Avatar billede htx98i17 Professor
08. juli 2017 - 15:39 Der er 1 løsning

fpdf tegnsæt

Det er som om at det med tegnsæt bare skal volde problemer 1-2 gange årligt.

Jeg bruger fpdf til at generere en pdf med data fra mysqli.

Problemet er at æøå vises forkert...

- Filen er defineret som en utf8 fil i ultraedit og er uploaded med transfer type binary.
- tabellen i databasen er defineret som utf8_danish_ci og ligeledes er felterne i tabellen.
- phpmyadmin viser fint æøå i felterne
- dataene kommer fra formfelter som har en utf8 tegnst side...

Jeg har åbenbart haft problemet før, for jeg har brugt utf8_decode() flere steder.

Men pludselig er dataene fra db-udtrækket et problem og det forstår jeg ikke hvorfor det pludseligt er.
Jeg har siddet og arbejdet med det de seneste par dage, men jeg kan ikke komme i tanke om at have lavet noget om med tegnsættene.




inc_mysqli_db_connect.php

<?php
   
   
    if($mysqli = new mysqli("server", "bruger", "kode", "db")) {
       
        $mysqli->set_charset("utf8");
       
    } else {
       
        $mysqli->error();
       
    }
?>



lav_pdf.php

<?php
   
    include("../inc_mysqli_db_connect.php");
   
   
    header("Content-Type: text/html; charset=utf-8");
   
   
    require("../fpdf/fpdf.php");

    $fakturanummer = (!$_SESSION['fakturanr']) ? 8400 : $_SESSION['fakturanr'];
   
    $pdf = new FPDF();
    $pdf->AddPage();
   
    if($kunde = $mysqli->prepare('SELECT id,UNIX_TIMESTAMP(dato),stel, ean, firma, cvr, navn1, navn2, adresse1, adresse2, postnr, city, land, intref, eksref, layout, pdflayout FROM tblfakturaer WHERE id = ? LIMIT 1')) {
       
        $kunde->bind_param('i',$fakturanummer);
        $kunde->execute();
        $kunde->bind_result($id,$dato,$stel,$ean,$firma,$cvr,$navn1,$navn2,$adresse1,$adresse2,$postnr,$city,$land,$intref,$eksref,$layout,$pdflayout);
        $kunde->fetch();
   
    }
   
    //kunde
    $pdf->SetFont('Arial','',10);
   
    $pdf->SetXY(10,20);
   
    if($ean) {
        $pdf->Cell(60,5,$ean,'0',0,'L',false);
    }
   
    if($firma) {
        $pdf->SetXY(10,$pdf->GetY()+5);
        $pdf->Cell(60,5,$firma." ".(($cvr) ? "cvr ".$cvr : ""),'0',0,'L',false);
    }
   
    if($navn1) {
        $pdf->SetXY(10,$pdf->GetY()+5);
        $pdf->Cell(50,5,$navn1,'0',0,'L',false);
    }
   
    if($navn2) {
        $pdf->SetXY(10,$pdf->GetY()+5);
        $pdf->Cell(50,5,$navn2,'0',0,'L',false);
    }
   
    if($adresse1) {
        $pdf->SetXY(10,$pdf->GetY()+5);
        $pdf->Cell(50,5,$adresse1,'0',0,'L',false);
    }
   
    if($adresse2) {
        $pdf->SetXY(10,$pdf->GetY()+5);
        $pdf->Cell(50,5,$adresse2,'0',0,'L',false);
    }
   
    if($city || $postnr) {
        $pdf->SetXY(10,$pdf->GetY()+5);
        $pdf->Cell(50,5,$postnr." ".$city,'0',0,'L',false);
    }
   
    if($land) {
        $pdf->SetXY(10,$pdf->GetY()+5);
        $pdf->Cell(50,5,$land,'0',0,'L',false);
    }
   
    $kunde->close();
   
    //skriv faktura eller kreditnota
   
    if($tjekfk = $mysqli->prepare('SELECT SUM(antal*salgspris) FROM tblfakturalinjer WHERE fakturanr = ? GROUP BY fakturanr')) {
        $tjekfk->bind_param('i',$fakturanummer);
        $tjekfk->execute();
        $tjekfk->bind_result($summen);
        $tjekfk->fetch();
       
    }
   
    $overskrift = ($summen>0) ? "Faktura" : "Kreditnota";
   
    $tjekfk->close();
       
    //firmainfo
   
    $pdf->Image("../grafik/logo.jpg",124,7);
   
    $pdf->SetFont('Arial','',18);
    $pdf->SetXY(65,40);
    $pdf->Cell(50,5,$overskrift,'0',0,'R',false);
   
    $pdf->SetFont('Arial','',10);
    $pdf->SetXY(150,20);
    $pdf->Cell(50,5,"adresse",'0',0,'R',false);
   
    $pdf->SetXY(150,$pdf->GetY()+5);
    $pdf->Cell(50,5,utf8_decode("DK-zip"),'0',0,'R',false);
   
    $pdf->SetXY(150,$pdf->GetY()+5);
    $pdf->Cell(50,5,"Telefon",'0',0,'R',false);
   
    $pdf->SetXY(150,$pdf->GetY()+5);
    $pdf->Cell(50,5,"Telefax +45",'0',0,'R',false);
   
    $pdf->SetXY(150,$pdf->GetY()+5);
    $pdf->Cell(50,5," ",'0',0,'R',false);
   
    $pdf->SetXY(150,$pdf->GetY()+5);
    $pdf->Cell(50,5,"mail@domain.dk",'0',0,'R',false);
   
    $pdf->SetXY(150,$pdf->GetY()+5);
    $pdf->Cell(50,5,"www.domain.dk",'0',0,'R',false);
   
    $pdf->SetXY(150,$pdf->GetY()+5);
    $pdf->Cell(50,5,"Cvr. ",'0',0,'R',false);
   
    $pdf->SetXY(150,$pdf->GetY()+5);
    $pdf->Cell(50,5,utf8_decode("æøå"),'0',0,'R',false);
   
    //ordrefakta
   
    $pdf->SetXY(9,70);
    $pdf->Cell(30,5,"Dato: ".date("d/m Y",$dato),'0',0,'L',false);
   
    $pdf->SetXY(41,70);
    $pdf->Cell(90,5,"Ref.: ".$eksref,'0',0,'L',false);
   
    $pdf->SetXY(131,70);
    $pdf->Cell(30,5,"Vores ref.: ".$intref,'0',0,'L',false);
   
    $pdf->SetXY(160,70);
    $pdf->Cell(40,5,"Fakturanummer: ".$id,'0',0,'R',false);
   
   
    //tabel hoved
   
    $pdf->SetXY(10,80);
   
    $pdf->SetFont('Arial','','8');
    $pdf->Cell(10,5,"Antal",'LBT',0,'L',false);
    $pdf->Cell(93,5,"Varebetegnelse",'LBT',0,'L',false);
    $pdf->Cell(20,5,"Enhedspris",'LBT',0,'L',false);
    $pdf->Cell(20,5,"Moms",'LBT',0,'L',false);
    $pdf->Cell(20,5," ",'LBT',0,'L',false);
    $pdf->Cell(26,5,utf8_decode("Beløb"),'LBTR',0,'L',false);
   
    //stelnummer
   
    $pdf->SetXY(10,85);
    $pdf->Cell(100,4,utf8_decode("Vedrørende : ").$stel,"0",0,'L',false);
   
    //fakturalinjer
   
    $pdf->SetXY(10,90);
   
    if($linje = $mysqli->prepare('SELECT linje,moms,salgspris,rabat,antal FROM tblfakturalinjer WHERE fakturanr = ? ORDER BY id ASC')) {
       
        $linje->bind_param('i',$fakturanummer);
        $linje->execute();
        $linje->bind_result($label,$moms,$salgspris,$rabat,$antal);
       
        $pdf->SetFont('Arial','','10');
       
        while($linje->fetch()) {

            $pdf->Cell(10,5,number_format($antal,2,",","."),'0',0,'L');
            $px = $pdf->GetX()+93;
            $py = $pdf->GetY();
           
            //$label = substr($label,0,100);
           
            $pdf->MultiCell(93,5,$label,0,'L',false);
           
            $px_1 = $pdf->GetX();
            $py_2 = $pdf->GetY();
           
            $pdf->SetXY($px,$py); 
           
            $pdf->Cell(20,5,number_format($salgspris,2,",","."),'0',0,'R');
            $pdf->Cell(20,5,number_format($antal*$moms,2,",","."),'0',0,'R');
            $pdf->Cell(20,5,(($rabat) ? number_format($rabat,2,",",".")."%" : ""),'0',0,'R');
            $pdf->Cell(26,5,number_format((($antal*$salgspris)+($moms*$antal))-($rabat*(($antal*$salgspris)+($moms*$antal))/100), 2, ',', '.'),'0',1,'R');
           
            $pdf->SetXY($px_1,$py_2);
           
            if($moms != 0) {
           
                if($rabat != 0) {
                    $momspligtigtbeloeb += ($salgspris*$antal)-(($salgspris*$antal)*$rabat)/100;
                } else {
                    $momspligtigtbeloeb += ($salgspris*$antal);
                }
            }
           
           
            if($moms != 0) {
               
                if($rabat >0) {
                    $samletmoms += ($moms*$antal)-(($moms*$antal)*$rabat)/100;
                } else {
                    $samletmoms += ($moms*$antal);
                }
           
            } else {
               
                if($rabat != 0) {
                    $salgudenmoms += ($salgspris*$antal)-((($salgspris*$antal)*$rabat)/100);
                } else {
                    $salgudenmoms += ($salgspris*$antal);
                }
           
            }
       
        }
   
        $linje->close();
   
    }   
   
    //footer
    $pdf->Line(10,230,200,230);
    $pdf->SetXY(10,230);
    $pdf->SetFont('Arial','',8);
    $pdf->Cell(27,5,utf8_decode("Momspligtigt beløb"),'0',0,'L',false);
    $pdf->SetX(75);
    $pdf->Cell(18,5,utf8_decode("Moms 25%"),'0',0,'L',false);
    $pdf->SetX(125);
    $pdf->Cell(23,5,utf8_decode("Salg uden moms"),'0',0,'L',false);
    $pdf->SetX(182);
    $pdf->Cell(22,5,utf8_decode("I alt at betale"),'0',1,'L',false);
   
    $pdf->SetFont('Arial','',10);
    $pdf->Cell(27,5,number_format($momspligtigtbeloeb,2,",","."),'0',0,'C',false);
    $pdf->SetX(75);
    $pdf->Cell(18,5,number_format($samletmoms,2,",","."),'0',0,'C',false);
    $pdf->SetX(125);
    $pdf->Cell(23,5,number_format($salgudenmoms,2,",","."),'0',0,'C',false);
    $pdf->SetX(178);
    $pdf->SetFont('Arial','B',10);
    $pdf->Cell(22,5,number_format($momspligtigtbeloeb+$samletmoms+$salgudenmoms,2,",","."),'0',1,'R',false);
    $pdf->SetX(50);   
       
    //layout
       
        if($pdflayout == 1) {
           
            $pdf->Rect(10,250,190,30);
            $pdf->SetXY(10,257);
            $pdf->SetFont('Arial','',12);
            $pdf->Cell(190,5,"Betalingsbetingelser: Netto kontant 8 dage",'0',0,'C',false);
            $pdf->SetXY(10,263);
            $pdf->SetFont('Arial','',8);
            $pdf->Cell(190,5,utf8_decode("Vi gør opmærksom på at skaffevarer ikke tages retur - spørg eventuelt før bestilling."),'0',0,C,false);
            $pdf->SetXY(10,267);
            $pdf->Cell(190,5,utf8_decode("Vedr. returnering i øvrigt henvises til vore sædvanlige salgsbetingelser."),'0',0,C,false);
           
        } elseif($pdflayout == 2) {
           
            $pdf->Rect(10,250,190,30);
            $pdf->SetXY(10,257);
            $pdf->SetFont('Arial','',12);
            $pdf->Cell(190,5,"Betalingsbetingelser: Netto kontant 14 dage",'0',0,'C',false);
            $pdf->SetXY(10,263);
            $pdf->SetFont('Arial','',8);
            $pdf->Cell(190,5,utf8_decode("Vi gør opmærksom på at skaffevarer ikke tages retur - spørg eventuelt før bestilling."),'0',0,C,false);
            $pdf->SetXY(10,267);
            $pdf->Cell(190,5,utf8_decode("Vedr. returnering i øvrigt henvises til vore sædvanlige salgsbetingelser."),'0',0,C,false);
       
        } elseif($pdflayout == 3) {
           
            $pdf->Rect(10,250,190,30);
            $pdf->SetXY(10,257);
            $pdf->SetFont('Arial','',12);
            $pdf->Cell(190,5,"Betalingsbetingelser: Netto kontant ved afhentning",'0',0,'C',false);
            $pdf->SetXY(10,263);
            $pdf->SetFont('Arial','',8);
            $pdf->Cell(190,5,utf8_decode("Vi gør opmærksom på at skaffevarer ikke tages retur - spørg eventuelt før bestilling."),'0',0,C,false);
            $pdf->SetXY(10,267);
            $pdf->Cell(190,5,utf8_decode("Vedr. returnering i øvrigt henvises til vore sædvanlige salgsbetingelser."),'0',0,C,false);
       
        } elseif($pdflayout == 4) {
           
            $pdf->Rect(10,250,190,30);
            $pdf->SetXY(10,261);
            $pdf->SetFont('Arial','',14);
            $pdf->Cell(190,5,utf8_decode("Husk: Efterspænding af hjul efter 50 - 100 km. kørsel"),'0',0,'C',false);
           
        } elseif($pdflayout == 5) {
           
            $pdf->Rect(10,250,190,30);
           
            $pdf->SetFont('Arial','',14);
           
            $pdf->SetXY(10,252);
            $pdf->Cell(190,5,utf8_decode("Husk: Efterspænding af hjul efter 50 - 100 km. kørsel"),'0',0,C,false);
           
            $pdf->SetFont('Arial','',12);
            $pdf->SetXY(10,261);
            $pdf->Cell(190,5,"Betalingsbetingelser: Netto kontant 8 dage",'0',0,'C',false);
           
            $pdf->SetFont('Arial','',8);
            $pdf->SetXY(10,267);
            $pdf->Cell(190,5,utf8_decode("Vi gør opmærksom på at skaffevarer ikke tages retur - spørg eventuelt før bestilling."),'0',0,C,false);
           
            $pdf->SetXY(10,271);
            $pdf->Cell(190,5,utf8_decode("Vedr. returnering i øvrigt henvises til vore sædvanlige salgsbetingelser."),'0',0,C,false);
           
        } elseif($pdflayout == 6) {
           
            $pdf->Rect(10,250,190,30);
           
            $pdf->SetFont('Arial','',14);
           
            $pdf->SetXY(10,252);
            $pdf->Cell(190,5,utf8_decode("Husk: Efterspænding af hjul efter 50 - 100 km. kørsel"),'0',0,C,false);
           
            $pdf->SetFont('Arial','',12);
            $pdf->SetXY(10,261);
            $pdf->Cell(190,5,"Betalingsbetingelser: Netto kontant 14 dage",'0',0,'C',false);
           
            $pdf->SetFont('Arial','',8);
            $pdf->SetXY(10,267);
            $pdf->Cell(190,5,utf8_decode("Vi gør opmærksom på at skaffevarer ikke tages retur - spørg eventuelt før bestilling."),'0',0,C,false);
           
            $pdf->SetXY(10,271);
            $pdf->Cell(190,5,utf8_decode("Vedr. returnering i øvrigt henvises til vore sædvanlige salgsbetingelser."),'0',0,C,false);
           
        } elseif($pdflayout == 7) {
           
            $pdf->Rect(10,250,190,30);
           
            $pdf->SetFont('Arial','',14);
           
            $pdf->SetXY(10,252);
            $pdf->Cell(190,5,utf8_decode("Husk: Efterspænding af hjul efter 50 - 100 km. kørsel"),'0',0,C,false);
           
            $pdf->SetFont('Arial','',12);
            $pdf->SetXY(10,261);
            $pdf->Cell(190,5,"Betalingsbetingelser: Netto kontant ved afhentning",'0',0,'C',false);
           
            $pdf->SetFont('Arial','',8);
            $pdf->SetXY(10,267);
            $pdf->Cell(190,5,utf8_decode("Vi gør opmærksom på at skaffevarer ikke tages retur - spørg eventuelt før bestilling."),'0',0,C,false);
           
            $pdf->SetXY(10,271);
            $pdf->Cell(190,5,utf8_decode("Vedr. returnering i øvrigt henvises til vore sædvanlige salgsbetingelser."),'0',0,C,false);
           
        }
       
       
   
    //udskriv pdf
   
    //$pdf->Output("../pdf/".$fakturanummer.".pdf","F");
   
    $pdf->Output("f","i");
   
?>
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

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