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

Идеята е даден текст и таблица да бъдат съхранени в 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 го ползват (просто информативно).

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)
Създаване на PDF с кирилица от php като входа е html, 5.0 out of 5 based on 1 rating

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

  1. Здрасти,

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

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

    VA:F [1.9.22_1171]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  2. Здравей, Благодаря и успехите да ти се връщат многократно.

    VN:F [1.9.22_1171]
    Rating: 0.0/5 (0 votes cast)
    VN:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  3. Здрасти, Адаш! :)

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

    Браво!

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

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

    VA:F [1.9.22_1171]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  4. Здравей Адаш , добавил съм пример към края на статията с която се надявам, че всичко става ясно :) На практика ако го ползваш директно, то всичко ще си работи перфектно (поне така беше последния път).

    VN:F [1.9.22_1171]
    Rating: 0.0/5 (0 votes cast)
    VN:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  5. Здравейте! Много полезна статия. Но да питам:
    Някои справи ли се да създаде arial шрифтовете и да ги вкара в класа, че пък и да му тръгнат?! Нещо само удебеления ариел ми се кирилизира правилно, всичко друго е маймуни. А ми трябва нещо по изчистено и да не е куриер за бланки за документи.

    VA:F [1.9.22_1171]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  6. kup4ooo :
    Здравейте! Много полезна статия. Но да питам:
    Някои справи ли се да създаде arial шрифтовете и да ги вкара в класа, че пък и да му тръгнат?! Нещо само удебеления ариел ми се кирилизира правилно, всичко друго е маймуни. А ми трябва нещо по изчистено и да не е куриер за бланки за документи.

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

    VA:F [1.9.22_1171]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  7. Здравейте, добра статия -- поздравления!

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

    VA:F [1.9.22_1171]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  8. Примерния файл pdf_creation.php е с енкодинг Western ISO-8859-15. Отварям го, виждам кирилицата кодирана. Иначе генерира правилно кирилица в PDF-a, когато добавя в него кирилица, не може да се запази в същия формат. Запазвам го в UTF-8 и кирицата в PDF файла е отново кодирана :(

    VA:F [1.9.22_1171]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  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, или аз нещо бъркам ?

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

    VA:F [1.9.22_1171]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)

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

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