Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno PHP a generování PDF

Zdravím,

generuju pomocí PHP faktury, použil jsem třídu TCPDF, která podporuje znakovou sadu UTF, v níž mám napsanou celou aplikaci. Jakmile se však vygenerovala faktura, tak v ní nefungovaly některé české znaky (zejména "čřě").

Byl jsem proto nucen si převést vlastní font, a to český Arial přímo z C:/Windows/Fonts. Jakmile jsem tento převedený font přidal do generovaného dokumentu, vznikl mi 438kB faktura, a jelikož jich na ftp klidně může být za chvíli tisíc, tak je to opravdu dost. Zkoušel jsem taky použít některé fonty přímo z třídy TCPDF, avšak při použití freeserif mi vylezlo PDF o velikosi 800kB, tak jsem to vzdal.

Nemáte prosím někdo zkušenosti s generováním českých PDF v unicode kódování, případně s třídou TCPDF?

Ještě dodám: Podle mých informaci TCPDF umí generovat české PDF, tak nevím, kde je problém. Net jsem prolezl jak to šlo, něco jsem našel, ale stejně jsem našel jen samé převody fontů do truetypu, které vedou k velkým PDF. Když jsem vygeneroval PDF fakturu jen s Arialem, kde blbly české znaky, došel jsem k PDF necelé 3kB, což je krásné.

Díky za rady

Předmět Autor Datum
PDF jsem nikdy negeneroval, ale napadá mě, jestli by to nemohlo souviset s kódováním stránky, která…
Kráťa 03.11.2008 23:52
Kráťa
V případě generování PDF souborů se vůbec nejedná o HTML a metatagy. S metatagy a html to nemá vůbec…
Kuncek 04.11.2008 00:05
Kuncek
Aha. Dělá se to jinak než jsem myslel. Našel jsem tento návodík, kde píší: V tomto návodu se však b…
Kráťa 04.11.2008 00:26
Kráťa
A ještě tohle - ten samý problém Našel jsem řešení ,které využívá třídu fpdf, stačilo jen něco troš…
Kráťa 04.11.2008 00:34
Kráťa
Ano, tento návod znám, ale má jednu velkou mouchu, je v něm k češtině napsáno: Do všech souborů, kt…
Kuncek 04.11.2008 16:57
Kuncek
Zdravím pánové, před rokem jsem tady zakládal toto téma a řešení jsem nedostal. Týkal se 500kB PDF f…
Kuncek 13.02.2010 20:02
Kuncek
Musel jsem za dnešek vyřešit krom jiného i generování PDF seznamů a nebýt vás, musel bych do práce i…
Martin Směták 24.04.2010 16:49
Martin Směták
Moc dekuji za pomoc a zip soubor.:beer:
Rado_ 15.07.2010 22:40
Rado_
Super, díky! Jen doplním, že stačí přepsat všechny názvy fontů v šabloně na arialce
Scrand 01.09.2010 16:10
Scrand
Ahoj, stačí použít font Dejavu serif, který je součástí TCPDF. Velikost PDF potom začíná na cca 80kB…
Marty08 05.10.2011 13:12
Marty08
Díky, díky, díky, díky, díky. :-) Všem
JackeOb 10.01.2012 10:25
JackeOb
Zdar, já zkoušel snad všechno a nijak sem ito nedaří zprovoznit. Stále chybí české znaky. Nepochopil… poslední
Vebon 22.01.2012 11:22
Vebon

V případě generování PDF souborů se vůbec nejedná o HTML a metatagy. S metatagy a html to nemá vůbec nic společného, výstup PHP skriptu je vygenerovaný PDF soubor.

Tady je výtažek kódu:

// ======================================
// ====== vložení TCPDF třídy
// ======================================
include("tcpdf/tcpdf.php");
include("tcpdf/config/lang/eng.php");

// ======================================
// ====== hlavička + nastavení PDF
// ======================================
$pdf = new TCPDF('P', 'mm', 'A4', true);

$pdf->SetHeaderMargin(10); 
$pdf->SetHeaderFont(Array("arial", "", 10));
$pdf->SetHeaderData("", 0, "Faktura č.: $cislo_faktury", "Datum: $datum_vystaveni");

$pdf->SetFooterFont(Array("arialbd", "", 10));
$pdf->SetFooterMargin(10);
$pdf->SetAutoPageBreak(true, 15);
$pdf->AliasNbPages();

$pdf->SetMargins(10, 25);

// ======================================
// ====== dokument
// ======================================
$pdf->AddPage();

// dodavatel
$pdf->SetFont("arialbd", "", 10);
$pdf->SetY(26);
$pdf->Cell(90, 4, "Dodavatel:", 0, 1);
$pdf->SetY($pdf->GetY());
$pdf->SetFont("arial", "", 10);
$pdf->MultiCell(90, 0,

Přesto dík za reakci

Ano, tento návod znám, ale má jednu velkou mouchu, je v něm k češtině napsáno:

Do všech souborů, které mají na starost obsluhu generování PDF je nutné zaincludovat soubor tcpdf.php a config/lang/eng.php, případně jiný, pokud si jej vytvoříme. Jelikož se zde nachází pouze jeden textový řetězec k přeložení(page), tak lze použít i originální soubor. Jinak v adresáři config/lang/ zkopírujeme soubor eng.php třeba na czech.php a přeložíme již zmíněný řetězec. Tento soubor pak zaincludujeme do stránky.

Tohle není popis pro zprovoznění češtiny. Já sám si myslím, že autor možná ani neví, jak se složkou lang ve třídě TCPDF pracovat, protože to zde nijak nepopsal. Googloval jsem a žádný další návod na tohle jsem zatím nenašel. Důležité je, že po sestavování pdf podle tohoto článku mi vylezl dokument, v kterém nešlo "čěř", a kdo ví co ještě.

Zdravím pánové,
před rokem jsem tady zakládal toto téma a řešení jsem nedostal. Týkal se 500kB PDF faktur vygenerovaných pomocí PHP TCPDF třídou v UTF-8 kódování.

Po roce jsem se k tomu nějak znovu dostal při úpravě aplikace a podařilo se mi vyřešit výslednou velikost faktury. Zmenšil jsem ji z 500kB na 80kB. V obou případech (500kB i 80kB) byl použit font Arial, a to normální a bold.

Výslednou velikost jsem zmenšil tím, že jsem metrickou definici písma nepřevedl z Arialu z Windows, ale stáhl jsem si Arial CE (Central Europe, tedy Arial pouze se znaky pro Střední Evropu). Do generovaného PDF jsem vložil znaky z ISO-8859-2 znakové sady, která je zobrazena na: ISO_8859-2

Zájemci koukněte zde: ceske_pdf

Ještě jednou připomínám, PDF generuje PHP skript v UTF-8 kódování a dokument je v UTF-8 kódování (tedy žádné funkce typu iconv() nejsou použity).

Metrickou definici přikládám k příspěvku. Věřím, že to někomu pomůže.

Zpět do poradny Odpovědět na původní otázku Nahoru