Създаване на PDF с кирилица от php като входа е html

Written by

in

Идеята е даден текст и таблица да бъдат съхранени в pdf . За целта използвам fpdf (http://fpdf.org/) и всичко е наред, но една част от задачата е информацията която ще се вкарва да бъде HTML т.е. пример „<table><tr><td>test</td><td>test1</td></tr></table>“ Така вместо да се създава pdf файла на по- ниско ниво се използва едно допълнито апи html2pdf -> http://html2pdf.spipu.net/ . Всичко супер, но реших да ползвам cyrillic text на cp1251 енкодинг и имаше проблем. Поиграх с html2pdf,  но нищо не се получи тогава реших ръчно да си добавя кирилизирани фотнове.  Преди да се добавят трябва да бъдат създадени като се ползва една тулка: ttf2pt1 пример „ttf2pt1 -a times.ttf times“ и след това да вкарвате генерирания файл „times.afm“ в DIR „makefont“ и вътре в makefont.php изпълнявате създаването на фонта за html2pdf или пример „MakeFont(‘times.ttf’,’times.afm’,’cp1251′);“. След това се създават „times.php и times.z“ като тези фонтове ги добавяте в DIR ../font/ .  След това трябва да ги добавите ръчно и да ги използвате за поставената цел 🙂

Редактирам по- долния файл. Ръчно поставям:

Файл: html2pdf/html2pdf.class.php

Преди:

function AddFont($family, $style=“, $file=“)
{
$this->pdf->AddFont($family, $style, $file);
}
След:

function AddFont($family, $style=“, $file=“)
{
$this->pdf->AddFont($family, $style, $file);
$this->pdf->AddFont(‘times’,“,’times.php’);
$this->pdf->AddFont(‘times’,’B’,’timesb.php’);
$this->pdf->AddFont(‘times’,’I’,’timesi.php’);
$this->pdf->AddFont(‘times’,’BI’,’timesbi.php’);
}

Сега един html файл мога с един ред да го направя pdf и по- конкретно на енкодинг cp1251. Идеята е лесно и бързо създаване на отчети, генериране на фактури, договори и други документи.

Пример за html файл -> pdf:
<?php

echo „<table style=’width:100%;’><tr><td style=’width:50%’><img src=’images/test/logo_tuv.png’ align=’left’></td><td style=’width:50%’><img src=’images/test/logo_nikosltd.png’ align=’right’></td></tr></table><div style=’font-family:comic;’>Тест -1251 :)</div>“;

$content = ob_get_clean();
require_once(dirname(__FILE__).’/include/html2pdf/html2pdf.class.php’);
$html2pdf = new HTML2PDF(‘P’,’A4′,’en’);
$html2pdf->AddFont(‘times’,“,’times.php’);
$html2pdf->WriteHTML($content, isset($_GET[‘vuehtml’]));
$html2pdf->Output();
?>

Пример: Имаше голяма заинтересованост за пример на тази публикация и затова ето го и него: Пример

PS: Междо другото докато цъках с това fpdf забелязах, че и Joomla го ползват (просто информативно).

Comments

10 responses to “Създаване на PDF с кирилица от php като входа е html”

  1. Аватарът на Volksphone Seokomov
    Volksphone Seokomov

    Здрасти,

    искам само да ти изкажа голяма благодарност за статията „Създаване на PDF с кирилица от php като входа е html“, днес съм си играл 4 часа с тоя проблем докато намеря твоето решение 🙂
    Много успехи ти желая!

    Поздрави,
    Петър

  2. Аватарът на admin

    Здравей, Благодаря и успехите да ти се връщат многократно.

  3. Аватарът на legrandelf

    Здрасти, Адаш! 🙂

    Прекрасен материал, който успя да ми свърши работа 😉 Сега остава малко клизмене около стилистиката на фактурата, но пък кирилицата сработи! 🙂

    Браво!

    П.П. Ти сам ли си добавял Times New Roman и ако да, как аджеба и какви файлове трябва да се създадат, за да се добавят (примерно) и други шрифтове 😉 Сещаш се, за благинки от визуална гледна точка! 🙂

    Мерси отново!

    1. Аватарът на admin

      Здравей Адаш , добавил съм пример към края на статията с която се надявам, че всичко става ясно 🙂 На практика ако го ползваш директно, то всичко ще си работи перфектно (поне така беше последния път).

  4. Аватарът на kup4ooo
    kup4ooo

    Здравейте! Много полезна статия. Но да питам:
    Някои справи ли се да създаде arial шрифтовете и да ги вкара в класа, че пък и да му тръгнат?! Нещо само удебеления ариел ми се кирилизира правилно, всичко друго е маймуни. А ми трябва нещо по изчистено и да не е куриер за бланки за документи.

  5. Аватарът на kup4ooo
    kup4ooo

    kup4ooo :
    Здравейте! Много полезна статия. Но да питам:
    Някои справи ли се да създаде arial шрифтовете и да ги вкара в класа, че пък и да му тръгнат?! Нещо само удебеления ариел ми се кирилизира правилно, всичко друго е маймуни. А ми трябва нещо по изчистено и да не е куриер за бланки за документи.

    Справих се! Замених името на шрифра при записването му в html2pdf.class.php.

  6. Аватарът на Uvigii
    Uvigii

    Здравейте, добра статия – поздравления!

    Много по-добър вариянт, който тръгва ‘out of the box’ , работи с cp1251 и UTF, не се налага нищо да се донаглася:
    http://mpdf.bpm1.com/

  7. Аватарът на yasen
    yasen

    Примерния файл pdf_creation.php е с енкодинг Western ISO-8859-15. Отварям го, виждам кирилицата кодирана. Иначе генерира правилно кирилица в PDF-a, когато добавя в него кирилица, не може да се запази в същия формат. Запазвам го в UTF-8 и кирицата в PDF файла е отново кодирана 🙁

  8. Аватарът на yasen
    yasen

    Този скрипт е базиран на fpdf и поддържа utf-8. http://www.fpdf.org/en/script/script92.php

  9. Аватарът на Данчо
    Данчо

    Здрасти благодаря за тази статия, но май аз правя нещо грешно.
    Ако можеш да ми обясниш къде бъркам, ще съм ти много задължен…

    Значи… свалих си примера към който си дал линк.
    Свалих го и го разархивирах на правилното място.

    Работи, но не ми генерира правилно кирилица в PDF-a. Причината се досещам къде е – това което ти си предложил е за CP1251 а аз му изпращам UTF-8.
    Опитах да конвертирам чрез $content = iconv(„UTF-8“, „cp1251“, $content); но не се получи – само се смени генерираната „кирилица“ и от Големи латински букви D стана на големи букви A…

    Добавих си $html2pdf->AddFont(‘times’,“,’times.php’); преди $html2pdf->writeHTML($content, false); и пак същото…

    Има ли начин да се използва твоя пример за UTF-8 без да се налага да конвертирам всичко към cp1251, или аз нещо бъркам ?

    Благодаря ти предварително!

Вашият коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *