TIP: Generování českých PDF pomocí PHP
Potřebujete v PHP generovat české PDF soubory? Existuje celá řada free knihoven, které generování PDF podporují. Většina z nich ale nepodporuje české znaky, nebo jen s problémy a jen u některých fontů. O podpoře UTF-8 ani nemluvě. Ale je zde jedna světlá výjimka…
Po dlouhém snažení o opravu špatné interpretace českých znaků u jedné nejmenované knihovny jsem sedl a začal googlovat, zda nenexistuje nějaká lepší alternativa (nutnost konverze textů do jiného kódování se mi totiž také moc nezamlouvala). A nakonec jsem také vyhovující třídu našel. Je jí TCPDF — Open Source PHP třída, která podporuje UTF-8, takže čeština jí nedělá nejmenší potíže.
Její používání je jednodušší, než u některých jiných alternativ, neboť používá pozicování s pozicí 0,0 vlevo nahoře (a ne vlevo dole, jak je tomu u PDF standartně). Poradí si také s výpisem jednoduchého HTML (to se hodí např. pro tabulky). Menší nevýhodou je neschopnost zalamovat text při výskytu \n, to se dá ale lehce spravit následujícím rozšířením:
class Pdf extends TCPDF {
public function Text($x, $y, $txt) {
foreach(explode("\n", $txt) as $line) {
parent::Text($x, $y, $line);
$y += $this->FontSizePt * $this->k;
}
return $y;
}
}
?>
Třídu pak lze jednoduše použít (např. pro vygenerování obálky s adresou):
define("ADDRESS", "Jméno Příjmení\nUlice 123\n123 45, Město");
$pdf = new Pdf(PDF_PAGE_ORIENTATION, PDF_UNIT, array(623.62, 311.81), true);
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor("Hopkins");
$pdf->SetTitle("Ukázkový dokument - obálka");
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);
require("config/lang/cs.php");
$pdf->setLanguageArray($l);
$pdf->SetFont("FreeSerif", "b", 18);
$pdf->AddPage();
$lines = explode("\n", ADDRESS);
$maxWidth = 0;
foreach($lines as $line) {
$width = $pdf->GetStringWidth($line);
if ($width > $maxWidth) $maxWidth = $width;
}
$pdf->Text(580-$maxWidth, 175, ADDRESS);
$pdf->Output();
?>
Přeji hodně úspěchů při generování vašich vlastních PDF .-)