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");
?>