Avatar billede lsskaarup Nybegynder
25. oktober 2010 - 16:55 Der er 15 kommentarer og
1 løsning

Ændre margin på udskrivning

Jeg har lavet en side, som skal kunne udskrives på en printer.

Men jeg har ikke helt forstået hvordan jeg kobler css properties sammen med opsætningen af papiret. F.eks. vil jeg gerne ændre margin på udskriften, men der sker ikke noget når jeg ændrer værdierne.

I øjeblikket ser er min som følger:

<?php
      require('system/global_defs.php');   
      include('system/date.php');
      include('static/ordre12.php');
    include('static/afsnit6.php');

?>

<html>
<head>
<style type="text/css">
@media print {
@page { size:21.0cm 29.7cm; }
@page { margin-left: 1cm; margin-right:0.8cm; margin-top:0.8cm; margin-bottom:0.8cm; }
@page :header { content: none ;}
@page :footer { content: none ;}
}
body, td {
  font-family: Arial;
  font-size: 9pt;
}
h1 {
  font-size: 12pt;
}
.header {
  font-weight: bold;
}
.header2 {
  font-size: 9pt;
  font-weight: bold;
  vertical-align: top;
}
.small {
  font-size: 6pt;
  border-left: none;
  border-right: none;
  text-align: center;
}
.noborder {
  border:none;
}
.footer {
  font-size: 8pt;
  border: none;
}
td {
border-collapse: collapse;
border: inset 1px;
}

</style>
<!--table{
border: outset 1px;
}
--> 
</head>

<?php
$ua = array();
for ($qe=1;$qe<=count($UNDERAKT);$qe++) {
    $ua[] = $UNDERAKT[$qe]['nr'];
}

$nummer = $_GET['forkalk'];
$ordre_id = $_GET['id'];
$lqs = "SELECT DATE_FORMAT(dato, '%d-%m-%Y') AS alm_dato, DATE(dato) AS dato, låst_af FROM kalkulation AS k LEFT JOIN kalkulationskolonner AS kk ON k.id = kk.kalkulations_id WHERE kolonnenr = '$nummer' AND ordre_id = '$ordre_id'";
$forlqs = mysql_query($lqs) or die($lqs);
$fl = mysql_fetch_array($forlqs);
?>
<body>
<table>
    <tr>
        <td class="noborder" style="font-size:12px;font-weight:bold">
            Forkalkulation <?php echo $nummer;?> og kontraktgennemgang
        </td>
    </tr>
    <tr>
        <td colspan="4" style="font-size: 6pt;" class="noborder">
            110/15-05-2008
        </td>
    </tr>
    <tr>
        <td class="noborder"> </td>
    </tr>
</table>

<table cellpadding="0" cellspacing="0">
<?php
    $sql = "SELECT r1, r9, r18 FROM ordre0 WHERE id = '".$_GET['id']."'";

    $kb = mysql_query($sql) or die($sql);
    $kuby = mysql_fetch_array($kb);
?>
<tr>
    <td colspan="4" class="noborder">
        <?php if($fl['dato'] != "0000-00-00") {
            echo "Låst: ". $fl['alm_dato']. " af ".$fl['låst_af'];
        }?>
    </td>
    <td colspan="2" class="noborder">
        Dato: <?php echo date('d-m-y', time()); ?>
    </td>
</tr>
<tr>
    <td colspan="4" class="noborder">
        Kunde: <?php echo $kuby[r9];?>
    </td>
    <td colspan="2" class="noborder">
        Projektleder: <?php echo $kuby[r1];?>
    </td>
</tr>
<tr>
    <td colspan="4" class="noborder">
        Sagsnavn: <?php echo $kuby[r18];?>
    </td>
    <td colspan="2" class="noborder">
        Projektnr.: <?php echo $_GET['ordrenr']; ?>
    </td>
</tr>

<tr>
    <td width="10%" class="header2">Hovedakt.</td>
    <td width="10%" class="header2">Underakt</td>
    <td width="25%" class="header2">Beskrivelse/hovedakt.</td>
    <td width="25%" class="header2">Beskrivelse/underakt.</td>
    <td width="15%" class="header2">Kostpris</td>
    <td width="15%" class="header2">Total/hovedakt.</td>
</tr>
<?php
$forrige_hakt="";
$be_hakt = "";
//$tæl_underakt =1;
for ($j=1;$j<=count($HOVEDAKT);$j++) {
    $hov = substr($HOVEDAKT[$j]['nr'], 0, 1);
    //echo $hov;
    $antal_i_array = preg_grep('/^'.$hov.'.*/', $ua);
    $aia = count($antal_i_array);
    //echo "<br>";
    //echo count($antal_i_array);
   
    $hovedakt_nr = $HOVEDAKT[$j]['nr'];
    $hovedakt_be = $HOVEDAKT[$j]['beskrivelse'];
   
    //Total kostpris
    $total_kostpris = "SELECT SUM(kostpris) AS total FROM kalkulation AS k
                    LEFT JOIN kalkulationspriser AS kp ON k.id=kp.kalkulations_id
                    LEFT JOIN kalkulationskolonner AS kk  ON kp.id = kk.kostpris_id
                    WHERE kolonnenr = '".$nummer."' AND ordre_id = '".$ordre_id."' AND SUBSTRING(underakt, 1, 1) = '".substr($hovedakt_nr, 0, 1)."' AND type = 0";
    $t_kost = mysql_query($total_kostpris) or die($total_kostpris);
    $t_k = mysql_fetch_array($t_kost);
    if (!isset($t_k['total'])) {
        $t_k['total'] = "-";
    }

    $tæl_underakt=1;//Tæl altid fra 1, når vi er ved en ny hovedakt.
    for ($i=1;$i<=count($UNDERAKT);$i++) {
        $underakt_nr = $UNDERAKT[$i]['nr'];
        $underakt_be = $UNDERAKT[$i]['beskrivelse'];
       
        if (substr($underakt_nr,0,1)."0" == $hovedakt_nr) {
        //    echo $tæl_underakt . " - " . $aia;
            /*echo $tmp = "SELECT * FROM kalkulation AS k
                    LEFT JOIN kalkulationskolonner AS kk ON k.id = kk.kalkulations_id
                    LEFT JOIN kalkulationspriser AS kp ON kk.kostpris_id = kp.id
                    WHERE ordre_id = '".$ordre_id."' AND kp.kostpris != '0' AND type = '0'
                    AND kolonnenr = '".$nummer."' AND k.underakt = $underakt_nr";//type = 0 => kostpriser
                    */
                   
            $tmp = "SELECT SUM(kostpris) AS kostpris FROM kalkulation AS k
                    LEFT JOIN kalkulationskolonner AS kk ON k.id = kk.kalkulations_id
                    LEFT JOIN kalkulationspriser AS kp ON kk.kostpris_id = kp.id
                    WHERE ordre_id = '".$ordre_id."' AND kp.kostpris != '0' AND type = '0'
                    AND kolonnenr = '".$nummer."' AND k.underakt = $underakt_nr
                    GROUP BY underakt";//type = 0 => kostpriser
            $rtmp = mysql_query($tmp) or die($tmp);
           
            if (!mysql_num_rows($rtmp) || !isset($rtmp)) {//Hvis der ingen kostpris er
                    echo "<tr>";
                    if ($forrige_hakt == $hovedakt_nr) {
                        echo "<td valign=\"top\"> </td>";
                    } else {
                        echo "<td valign=\"top\">".$hovedakt_nr."</td>";
                    }
                    echo "<td valign=\"top\">".$underakt_nr."</td>";
                   
                    if ($be_hakt == $hovedakt_be) {
                        echo "<td valign=\"top\"> </td>";
                    } else {
                        echo "<td valign=\"top\">".$hovedakt_be."</td>";
                    }

                    echo "<td valign=\"top\">".$underakt_be."</td>";
                    echo "<td valign=\"top\" style=\"text-align:right\"> </td>";
                    if ($tæl_underakt == $aia) {
                        echo "<td style=\"text-align:right\">".number_format($t_k['total'],0,',','.')."</td>";
                    } else {
                        echo "<td style=\"text-align:right;\"><input name=\"spacer\" type=\"image\" src=\"/gfx/print_background.jpg\" width=\"97\" height=\"15\"></td>";
                    }
                    echo "</tr>\n";   
                    $forrige_hakt = $hovedakt_nr;
                    $be_hakt = $hovedakt_be;
            } else {
                while ($rep = mysql_fetch_array($rtmp)){
                    echo "<tr>";
                    if ($forrige_hakt == $hovedakt_nr) {
                        echo "<td valign=\"top\"> </td>";
                    } else {
                        echo "<td valign=\"top\">".$hovedakt_nr."</td>";
                    }
                    echo "<td valign=\"top\">".$underakt_nr."</td>";
                   
                    if ($be_hakt == $hovedakt_be) {
                        echo "<td valign=\"top\"> </td>";
                    } else {
                        echo "<td valign=\"top\">".$hovedakt_be."</td>";
                    }
                   
                    echo "<td valign=\"top\">".$underakt_be."</td>";
                    echo "<td valign=\"top\" style=\"text-align:right\">".number_format($rep['kostpris'],0,',','.')."</td>";
                    if ($tæl_underakt == $aia) {
                        echo "<td style=\"text-align:right\">".$tæl_underakt . " - ".number_format($t_k['total'],0,',','.')."</td>";
                    } else {
                        echo "<td style=\"text-align:right;\"><input name=\"spacer\" type=\"image\" src=\"/gfx/print_background.jpg\" width=\"97\" height=\"14\" padding=\"0px\" margin=\"0px\"></td>";
                    }
                    echo "</tr>\n";
                    $forrige_hakt = $hovedakt_nr;
                    $be_hakt = $hovedakt_be;
                }
            }
            $tæl_underakt++;
        }
    }
   
}

  $sql = "SELECT SUM(kp.kostpris) AS kostpris FROM kalkulation AS k
            LEFT JOIN kalkulationskolonner AS kk ON k.id = kk.kalkulations_id
            LEFT JOIN kalkulationspriser AS kp ON kk.kostpris_id = kp.id
            WHERE ordre_id = '".$ordre_id."' AND type = '0' AND kolonnenr = '".$nummer."'
            GROUP BY ordre_id";
  $res = mysql_query($sql) or die(mysql_error().$sql);
  $ksum = mysql_fetch_array($res);

$låst_datos = "SELECT SUM(kostpris) AS salgspris FROM kalkulation AS k
                LEFT JOIN kalkulationspriser AS kp ON k.id=kp.kalkulations_id
                LEFT JOIN kalkulationskolonner AS kk ON kp.id = kk.kostpris_id
                WHERE kolonnenr = '".$nummer."' AND ordre_id = '".$ordre_id."' AND type = 1
                GROUP BY ordre_id";
$lås_datos = mysql_query($låst_datos) or die(mysql_error);
$ssum = mysql_fetch_array($lås_datos);

?>
<tr>
    <td colspan="4" style="text-align:right; vertical-align:top;">I alt kostpris kr.</td>
    <td style="text-align:right"><?php echo number_format($ksum['kostpris'],0,',','.'); ?></td>
</tr>
<tr>
    <td style="border-bottom: none; border-right: none;" colspan="4">Dækningsbidrag kr.</td>
    <td style="border-bottom: none; border-left: none; text-align:right;"><?php echo number_format($ssum['salgspris']- $ksum['kostpris'],0,',','.');?></td>
</tr>
<tr>
    <td style="border-bottom: none; border-right: none;" colspan="4">Salgspris kr.</td>
    <td style="border-bottom: none; border-left: none; text-align:right;"><?php echo number_format($ssum['salgspris'],0,',','.'); ?></td>
</tr>
<tr>
    <td style="border-bottom: none; border-right: none;" colspan="4">Dækningsgrad (% af salgspris)</td>
    <td style="border-bottom: none; border-left: none; text-align:right;"><?php echo number_format(($ssum['salgspris'] - $ksum['kostpris'])/$ssum['salgspris']*100,2,',','.');?></td>
</tr>

<tr>
    <td style="border-bottom: none; border-right: none;" colspan="5" height="30px;">Kontraktgennemgang udført</td>
</tr>
<tr>
    <td style="border-right: none; border-top: none;" colspan="3"> </td>
    <td class="small" colspan="1">(Sign. projektleder)</td>
    <td class="small" style="border-right: solid 1px;" colspan="1">(Dato)</td>
</tr>
<tr>
    <td colspan="6">Eventuelle bemærkninger:</td>
</tr>
</table>
<br>

<script language="JavaScript" type="text/javascript">

<!--
    //window.print();

    //setTimeout("window.close();",500);
//-->

</script>
</body>
</html>


Den kommer jeg så til fra en anden side, hvor man kan trykke på en knap:
<input class="submit" name="udskriv" type="button" value="Udskriv" onClick="launchUdskrift(<?php echo $æ;?>)"/>

<script language="javascript">
<!--
function launchUdskrift(nr) {
    window.open('/entreprise_ordre12_udskriv_process.php?id=<?php echo $_GET['id']; ?>&ordrenr=<?php echo $nr; ?>&forkalk='+nr, '', '');
}
//-->
</script>


Hvor og hvordan skal jeg refererer til stylen, så den træder i effekt?
Avatar billede keysersoze Ekspert
25. oktober 2010 - 17:34 #1
media print er fint, men du kan ikke ændre på klientens opsætning med CSS - enten må du leve med klientens indstillinger eller også tvinge brugerne til at benytte fx activex (fx har meadco et ok script).
Avatar billede lsskaarup Nybegynder
25. oktober 2010 - 19:46 #2
Jeg skal indrømme at stylesheetet er et jeg har arvet i systemet, så det har jeg ikke selv lavet, andet end tilpasninger i.

Det jeg ikke forstår er at media print ikke kaldes noget sted. Normalt skal man jo angive hvilken klasse i stylen man f.eks. vil bruge på en <td>. Er det ikke gældende for media print eller forgåer det automatisk?
Avatar billede keysersoze Ekspert
25. oktober 2010 - 21:54 #3
hvis du specifikt angiver @media print, det du har gjort i din første linje i dit style-tag, så finder klienten selv ud af at det er det der skal bruges når der printes.
Avatar billede lsskaarup Nybegynder
26. oktober 2010 - 09:20 #4
Vil det sige, at når det er som i min kode, så ved browseren at alt skal printes?

I mange eksempler på nettet bruges
<LINK rel="stylesheet" type"text/css" href="print.css" media="print">

og
<LINK rel="stylesheet" type"text/css" href="screen.css" media="screen">


Hvad er forskellen på dette og mit?
Avatar billede keysersoze Ekspert
26. oktober 2010 - 09:35 #5
Browseren printer altid hele siden - det den ved er kun, at et stylesheet med media print vil overgå et eventuelt stylesheet med media screen. På den måde kan man fx skjule menupunkter, billeder etc når en side printes i forhold til når den vises på skærmen.

Der er resultatmæssigt ingen forskel på de to måder at sætte et stylesheet ind på - men når man oftest vil benytte det du skriver i #4 så skyldes det flere ting, bla at et eksternt stylesheet kan caches hos klienten og dermed forbedre loadtid samt det bringer det egentlig indhold tættere på toppen og forbedre SEO.
Avatar billede lsskaarup Nybegynder
26. oktober 2010 - 09:52 #6
Aha, det tændte da for en pære over hovedet... klik ;-)

Men tilbage til selve spørgsmålet, det er altså ikke muligt, måske bort set fra noget activex, at bestemme margin på papiret?

Kan man fjerne sideantallet i toppen og adresselinjen i bunden, som ellers altid er der når man udskriver fra web?
Avatar billede keysersoze Ekspert
26. oktober 2010 - 10:00 #7
nej til begge - skal klientens indstillinger ændres skal de selv gøre det eller du skal over i fx activex (altså, påkrævet installation for klienten).
Avatar billede lsskaarup Nybegynder
26. oktober 2010 - 10:08 #8
Okay, jeg tror jeg vil kigger nærmere på det MeadCo script. Det er til et intranet, så der er ingen problemer med et script, og det bedste vil være at brugerne ikke selv skal installere det.

Findes der andre scripts end lige netop MeadCos?
Avatar billede lsskaarup Nybegynder
26. oktober 2010 - 10:12 #9
Fedt, til gratis versionen skriver de så:

System administrators wishing to pre-install ScriptX over an intranet should run smsx.exe - also contained in the downloadable archive - on each client machine


Der er så ingen smsx.exe i den downloadede mappe, men der findes en .inf fil, men den findes så både som smsx.inf og smsx2.inf. Hvilken mon man skal bruge?
Avatar billede lsskaarup Nybegynder
26. oktober 2010 - 10:19 #10
Nå, den lå så i en anden download fil
Avatar billede keysersoze Ekspert
26. oktober 2010 - 10:22 #11
jeg kender ikke til andre men mon ikke det findes. Hvis det er til et intranet og indstillingerne ikke kun skal gælde for denne specifikke side så vil det bedste måske være at få opsat hver klient korrekt.
Avatar billede lsskaarup Nybegynder
26. oktober 2010 - 11:48 #12
De skal så pt. kun gælde for denne side, måske én mere på sigt, men så langt er jeg ikke i udviklingen af den side.

Når man installere scriptet på serveren, burde browseren så ikke automatisk kører scriptet, eller skal jeg genstarte serveren for at få det til at ske?

Når jeg afvikler siden, får jeg at vide Windows har blokeret for softwaren. Kan jeg undgå det, så jeg ikke skal rundt til samtlige pc'er for at godkende udgiveren?
Avatar billede keysersoze Ekspert
26. oktober 2010 - 12:07 #13
egentlig installation på serveren burde ikke være nødvendig - det vigtige er at sætte scriptet rigtigt op i din HTML og have henvisningerne til filerne i orden. Alt dette er clientside så genstart vil ikke være nødvendig.

Du kan ikke undgå "alarmer" medmindre du sænker sikkerhedsniveauet på klienten.
Avatar billede lsskaarup Nybegynder
26. oktober 2010 - 13:59 #14
Hmm, kan ikke lige finde ud af om det er muligt at tilpasse scriptet, så brugeren ikke generes af det, eller at de i det sidste kun kan installere det en gang. Nu blokkeres det bare helt.

Enten finder jeg en vejledning på deres hjemmeside eller også dropper jeg det, og må så tilpasse tekststørrelse o.l., så det kan være på én side. Tror mest på det sidste.

Men det har da opklaret nogle ting for mig.
Avatar billede keysersoze Ekspert
26. oktober 2010 - 18:21 #15
det er lang tid siden jeg selv har benyttes deres script, men dengang virkede det relativt lige til at implementere og klienten skulle kun acceptere installation en enkelt gang.

Jeg vil dog til enhver en tid holde på at det er bedre at tilpasse stylesheet efter en standardprinter end at være afhængig af fx activex.
Avatar billede lsskaarup Nybegynder
26. oktober 2010 - 21:00 #16
Ville også mene det var rimeligt simpelt, men jeg sad og rodede lidt med sikkerhedsindstillingerne, men kunne bare ikke få den til at droppe blokeringen af scriptet og spørge om det skulle installeres i stedet for.

Men jeg har nu næsten 100% fået tilpasset stylesheet, så den kan være på en side. Det må så blive løsningen indtil videre.

Jeg skal dog have fundet en anden løsning, men om det er PDF, activex eller noget helt tredje ved jeg ikke. Jeg skal i hvert fald bare have de der sidenummereringer og adresselinjer væk, og det uden at brugeren skal ændre i deres opsætning.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester