JDStar: Webmaster, Linux admin, XHTML, PHP, JAVA....
Zapraszam pod nowy adres, pod którym mam nadzieję zmiany będą częściej http://devel.jdstar.pl.
Generowanie dokumentów PDF z HTML w PHP (dompdf, HTML2FPDF, TCPDF)
2007-06-22 JDStar
Ostatnie artykuły
Próbnik koloru (color picker?) - pomoc w wyborze schematu kolorystycznego strony komentarzy [2]Konwersja z HTML do PDF w PHP - dompdf komentarzy [4]
Generowanie dokumentów PDF z HTML w PHP (dompdf, HTML2FPDF, TCPDF) komentarzy [52]
Podpowiedzi na www valid XHTML - czyli dymki, tooltip'y lub inne nazwy (nie wiem jakie) komentarzy [42]
Rozszerzenia Firefox'a, których używam - przydatne dla webdeveloperów/webmasterów komentarzy [49]
Na pierwszy rzut biblioteka HTML2FPDF - http://html2fpdf.sourceforge.net
To, że tę bibliotekę trzeba ściągnąć, rozpakować itp itd nie będę pisał - to jest oczywiste.
Co potrzebne:
- Jakiś dokument HTML - jako przykład wezmę druk wniosku o pozwolenie na budowę (treść poniżej),
- skrypt w PHP, który nam wygeneruje PDF''a z naszego HTML''a (również źródło poniżej)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
<head>
<meta name="generator" content="HTML Tidy, see www.w3.org" />
<title>e-Forms by Jacek Dziura</title>
<meta http-equiv="Content-type" content="text/html;charset=utf-8" />
</head>
<body>
<p style="text-align: right;">Tomaszów, dnia. r.</p>
<br />AB.7351 A - ..................../................ <br />
<address>(nr rejestru organu właściwego do wydania pozwolenia)</address>
<div style="text-align: center;">
<h2>WNIOSEK<br />
o pozwolenie na budowę / rozbiórkę*</h2>
</div>
<h2 style="text-align: center;">Starosta<br />
ul.Lwowska 68, 22-600 Tomaszów Lub.</h2>
<div style="text-align: center;">
<address>(nazwa organu wydającego pozwolenie)</address>
</div>
<h4>Inwestor:</h4>
<div style="text-align: center;">
<address>(imię i nazwisko lub nazwa instytucji oraz adres)</address>
</div>
<h4 style="text-align: left;">na podstawie art. 32 i 33 ustawy z dnia 7 lipca 1994 r. Prawo
budowlane (Dz. U. 2006 r. Nr 156, poz.</h4>
<h4 style="text-align: left;">1118), wnoszę o wydanie decyzji o pozwolenie na budowę /
rozbiórkę*:</h4>
<div style="text-align: center;">
<address>(nazwa i rodzaj oraz adres całego zamierzenia budowlanego, rodzaj/-e obiektu/-ów bądź robót
budowlanych, oznaczenie działki ewidencyjnej</address>
<address>wg ewidencji gruntów i budynków poprzez określenie obrębu ewidencyjnego oraz numeru działki
ewidencyjnej)</address>
</div>
<div>
<p>Jakis tekst<br />
<em>[ąśężźćńłó]</em> ąśżźĄŚŹĆŃŁĘÓóęłąść <strong>{ĄŚĘŻŹĆŃŁÓ}</strong><br />
(nazwa i rodzajóąłźćżęńśłó oraz adres całego zamierzenia budowlanego, rodzaj/-e obiektu/-ów
bądź robót budowlanych, oznaczenie działki ewidencyjnej wg ewidencji gruntów i budynków
poprzez określenie obrębu ewidencyjnego oraz numeru działki ewidencyjnej)</p>
Do wniosku o pozwolenie na budowę dołączam*:
<ol>
<li>Cztery egzemplarze projektu budowlanego wraz z opiniami, uzgodnieniami i pozwoleniami i innymi</li>
<li>Wymaganymi przepisami szczególnymi oraz zaświadczeniem o którym mowa w art. 12 ust 7 ustawy - Prawo budowlane,</li>
<li>Oświadczenie o posiadanym prawie do dysponowania nieruchomością na cele budowlane,</li>
<li>Decyzję o warunkach zabudowy i zagospodarowania terenu lub wypis z planu miejscowego zagospodarowania przestrzennego, jeśli jest wymagany zgodnie z przepisami ustawy o planowaniu i zagospodarowaniu,</li>
<li>Specjalistyczną opinię, o której mowa w art. 33 ust. 3 ustawy - Prawo budowlane,</li>
<li>Postanowienie o uzgodnieniu, z właściwym organem administracji architektoniczno - budowlanej, projektowanych rozwiązań w zakresie, o którym mowa w art.33 ust.2 pkt. 4 ustawy - Prawo budowlane,</li>
<li>Upoważnienie udzielone osobie pełnomocnika działającego w moim imieniu.</li>
</ol>
</div>
</body>
</html>
<?php
require_once(''html2fpdf.php'');
ob_start();
include_once(''../html_test.html'');
$htmlbuffer = ob_get_contents();
ob_end_clean();
$pdf = new HTML2FPDF(''P'',''mm'',''A4'');
$pdf->AddPage();
$pdf->UseCSS(true);
$htmlbuffer = iconv("UTF-8", "ISO8859-2", $htmlbuffer);
$pdf->WriteHTML($htmlbuffer);
$pdf->Output("file.pdf", "D");
?>
Tak przygotowane pliki są gotowe do generowania "w locie" plików PDF.
Niestety biblioteka HTML2FPDF nie wspiera Unicode UTF-8, więc konieczna jest konwersja z UTF-8 do ISO8859-2. Oprócz tej konwersji, aby zadziałało nam generowanie PDF z polskimi fontami musimy podmienić w bibliotece czcionki, na takie, które zawierają polskie ogonki w kodowaniu ISO8859-2. Czcionki bierzemy z katalogu FONTS z Windows''a, narzędzie są w katalogu makefont biblioteki, a plik ttf2pt1 szukamy w googlach:).
Poniżej sposób ich tworzenia.
ttf2pt1 -b -L iso-8859-2.map times.ttf timespl
<?php
require(''makefont.php'');
Makefont(''timespl.pfb'', ''timespl.afm'', ''iso-8859-2'');
?>
Powstaną pliki .php i .z - kopiujemy je do katalogu font w bibliotece html2fpdf.
Aby uzywać ich we wszystkich konwersjach trzeba dokonać zmian w pliku html2fpdf.php - zamieniamy wszystkie wywołania "$this->SetFont(''Arial'',''B'',9);" na np. takie (zależy od rodzaju czcionki, którą sobie przygotujemy: "$this->SetFont(''timespl'',''B'',9);" z tego względu, że po ustwieniu ich w skrypcie poprzez: "$pdf->SetFont(''timespl'','''',8);" niestety po pierwszym paragrafie lub innym elemencie, wracają do ustawień domyślnych oraz dodajemy naszą czcionkę na początku funkcji function HTML2FPDF($orientation='P',$unit='mm',$format='A4'):
<?php
$this->AddFont('timespl', '', 'timespl.php');
$this->AddFont('timespl', 'B', 'timesbdpl.php');
$this->AddFont('timespl', 'I', 'timesipl.php');
$this->SetFont('timespl','',10);?>
Tak wygląda gotowy wygenerowany plik PDF.
Kolejne sposoby użycia innych bibliotek (dompdf, TCPDF, xHTML2PDF) opiszę w najbliższym czasie
1: 2007-09-04 14:13:51, Falcon:
Świetna sprawa ale wkradł się jeden błąd (przy najmniej u mnie to błąd - pokazuje nieznaną czcionke) Dodawanie fontów powinno odbywać się nie na początku funkcji: HTML2FPDF($orientation='P',$unit='mm',$format='A4') ,a przed pierwszą deklaracją fontu w tej funkcji.
Czyli zaraz po: $this->DisplayPreferences('');
Pozdrawiam
2: 2007-09-21 10:27:24, debbie:
ja mam problem właśnie odnośnie znaczników html'a
Od momentu kiedy wstawie jakiś kod np <pre> niewyświetla mi polskich czcionek. czcionki wygenerowałem według instrukcji wyżej i jest ok. kod wygląda tak:
<?php
define('FPDF_FONTPATH','font/');
require_once('html2fpdf.php');
ob_start();
include_once('wydruk.php');
$htmlbuffer = ob_get_contents();
ob_end_clean();
$pdf = new HTML2FPDF('P','mm','A4');
$pdf->SetFont('courpl','',11);
$pdf->AddFont('courpl', '', 'courpl.php');
$pdf->AddPage();
$pdf->UseCSS(true);
$pdf->WriteHTML($htmlbuffer);
$pdf->Output("file", "D");
?>
czcionka jest dodana zaraz po:
$pdf = new HTML2FPDF('P','mm','A4');
pozmieniałem wszystkie $this->SetFont('Arial','',11);
na $this->SetFont('courpl','',11);
ale wyrzuca mi :
FPDF error: Undefined font: courpl
i niewiem co z tym zrobić?? był bym wdzięczny za informacje:)
3: 2007-09-21 14:21:31, JDStar:
Przenieś definicję dodawania czcionki do klasy html2fpdf.php
$pdf->AddFont('courpl', '', 'courpl.php');
Powinno pomóc. Jak nie to napisz maila do mnie.
4: 2007-12-11 14:20:36, lukasz :
Czy mógłby mi ktoś przesłać działającą paczkę? Ja zrobiłem wszytstko to oczym tu była mowa i nic, ciągle niemam polskich liter:/
5: 2008-02-07 01:21:27, Michal:
da rade wrzucić paczkę z tymi czcionkami ?
6: 2008-03-12 23:10:36, rajcho:
a mi sie pojawia dziwna sprawa. Generuje tylko pierwsze dwa wersy.
Po numerze AB.cos tam juz nic nie mam pusta strona. Wie ktos moze o co chodzi?
7: 2008-03-27 14:38:57, yoanna:
wywala blad :
Warning: Cannot modify header information - headers already sent by (output started at /usr/local/apache/www/...
on line 1678
FPDF error: Some data has already been output to browser, can't send PDF file
o co choidzi??
8: 2008-03-31 12:37:53, Jacek:
@yoanna
Zanim generujesz PDF'a masz coś wysyłane do przeglądarki - np. błąd:) lub chociażby "spację"
9: 2008-04-30 14:51:29, tomek:
przy takiej kombinacji :
$htmlbuffer = iconv("UTF-8", "ISO8859-2", $htmlbuffer);
generuje się pusty pdf, przy zmianie na
$htmlbuffer = iconv("UTF-8", "ISO8859-2//ignore", $htmlbuffer);
wyświetla sie tekst ale wszystkie polskie znaki znikają, Może jakaś wskazówka?
pozdrawiam
10: 2008-05-06 13:51:01, janek:
coś nie tak , spróbujcie dodać tabele w tabeli, rozjeżdża się kompletnie...
11: 2008-05-06 15:34:21, GD:
A jaki niby jest cel zagnieżdżania tabel? - do layoutów tabel się nie stosuje heheh.
A dompdf jest chyba nieco lepszy od HTML2FPDF.
12: 2008-05-16 12:55:42, domel:
Co zrobić jeśli chcę przestawić orientację dokumentu na poziomą?
Oraz czy mogę wygenerować pdf bezpośrednio ze skryptu php (a nie html)?
13: 2008-05-16 13:49:26, domel:
Zmieniłem parametr konstruktora z P na L i mam już orientację poziomą, ale rozjeżdża mi się stronicowanie. Pdf-a generuję na podstawie tabeli. Przy orientacji pionowej nie było problemów i jeśli dany wiersz nie mieścił się już na stronie to cały był przenoszony na nową stronę.
W przypadku orientacji poziomej tabela się rozjeżdża.
14: 2008-05-30 12:29:03, Piocho:
Niestety po wielu probach tak HTML2FPDF jak i DOMPDF nie daje rady zrobic tak zeby polskie fonty dzialaly. Czy ktos moglby wrzucic jakas cala przygotowana i dzialajaca paczke?
15: 2008-06-13 09:15:24, all_lol:
Przychylam sie do sugestii wrzucenia paczki z PL fontami, bo wszedzie pisza o konwertowaniu, a to jest jakis koszmar.
16: 2008-06-14 12:08:13, GD:
Tylko wystawienie paczki z fontami od M$ chyba nie byłoby zgodne z ich licencją (ale mogę się mylić)
17: 2008-07-07 09:22:15, remik:
Witam,
moja walka z polskimi fontami także okazała się porażką. Jak to możliwe bardzo bym prosił i bym był bardzo wdzięczny aby ktoś mi wysłał gotową paczkę na maila.
Pozdrawiam
18: 2008-07-07 09:22:22, remik:
Witam,
moja walka z polskimi fontami także okazała się porażką. Jak to możliwe bardzo bym prosił i bym był bardzo wdzięczny aby ktoś mi wysłał gotową paczkę na maila.
Pozdrawiam
19: 2008-07-07 09:22:23, remik:
Witam,
moja walka z polskimi fontami także okazała się porażką. Jak to możliwe bardzo bym prosił i bym był bardzo wdzięczny aby ktoś mi wysłał gotową paczkę na maila.
Pozdrawiam
20: 2008-07-07 09:22:23, remik:
Witam,
moja walka z polskimi fontami także okazała się porażką. Jak to możliwe bardzo bym prosił i bym był bardzo wdzięczny aby ktoś mi wysłał gotową paczkę na maila.
Pozdrawiam
21: 2008-07-07 09:22:23, remik:
Witam,
moja walka z polskimi fontami także okazała się porażką. Jak to możliwe bardzo bym prosił i bym był bardzo wdzięczny aby ktoś mi wysłał gotową paczkę na maila.
Pozdrawiam
22: 2008-07-07 09:22:26, remik:
Witam,
moja walka z polskimi fontami także okazała się porażką. Jak to możliwe bardzo bym prosił i bym był bardzo wdzięczny aby ktoś mi wysłał gotową paczkę na maila.
Pozdrawiam
23: 2008-09-04 10:38:44, ammpp:
A ja zrobiłem. Podmieniłem oryginalne fonty na te zrobione opisaną tu metodą. Dodałem sobie też dynamiczne dodawanie fontów (żeby nie generować PDF-ów, które mają niepotrzebnie 600kB).
I zadziałało :)
24: 2008-11-04 09:51:07, Olimpia:
ja mam podobny problem jak janek:
-------
coś nie tak , spróbujcie dodać tabele w tabeli, rozjeżdża się kompletnie...
-------
Ja również mam potrzebę zagnieżdżenia tabeli i pdf z takiego szablonu jest "rozjechany". Czy ktoś się z tym poradził?
25: 2008-12-08 17:51:09, debbie:
Witam! U mnie pojawił się kolejny problem:
mianowicie manipulacja rozmiarem czcionki.
Wie ktoś może w jaki sposób zmieniać rozmiar czcionki??? W powyższym skrypcie np napis
<h2 style="text-align: center;">Starosta<br />
ul.Lwowska 68, 22-600 Tomaszów Lub.</h2>
Jest w pdfie w dosyć dużej czcionce mimo tego iż nie jest nigdzie zdefiniowana wielkość czcionki.
Chodzi mi konkretnie o napis pod kropkami żeby był mniejszy niż cała reszta. Był bym bardzo wdzięczny za pomoc
26: 2009-01-03 14:22:56, filip:
szczerze mówiąc bardzo hujowy ten tutek...
27: 2009-12-22 11:15:35, nie podano:
co nie
28: 2010-01-12 22:55:39, lechu:
a u mnie z kolei wywala takie coś Warning: filesize(): stat failed for font/timespl.z in D:\apache2triad\htdocs\eceramik\system2009\admin\addons\html2fpdf\fpdf.php on line 1813 FPDF error: Font file not found w momencie jak dodaje czcionke po $this->DisplayPreferences(''); a jak przed czyli zaraz na początku funkcji to FPDF error: Undefined font: timespl i nie wiem co jest grane wszystko robie jak napisane w tutku:/
29: 2010-01-24 16:32:39, artur:
lechu...popatrz na datę tego tutka i zapoznaj się z mPDF , pozdro...
30: 2010-02-03 22:09:40, asdasd:
asdasdasd
31: 2011-05-06 19:09:33, rd:
Nie polecam. Jeśli chcesz zrobić jakieś proste pdf, lepiej ręcznie. Jeśli chcesz coś skomplikowanego to natrafiamy na niezliczone komplikacje: polskie czcionki (a używam kilku!), tabele rozjeżdżają się (szczególnie te w tabelach), zdjęcia pojawiają się w oryginalnych rozdzielczościach (wiem, mogę je zmniejszyć, ale wtedy tracę na jakości wydruku), ogólnie cały css . Moim zdaniem nowe okienko z porządnie 'zcssowanym' html'em będzie znacznie lepszym pomysłem.
32: 2011-05-12 15:17:59, profile aluminiowe:
zobaczę co da się zrobić z tego narzędzia...
33: 2011-05-26 13:06:50, AP:
U mnie zadzialalo - generuje sie ladny pdf z polskimi czcionkami. W tekscie nalezaloby dodac, ze tworzac plik przykladowy HTML z pozwoleniem na budowe, trzeba odpowiednio zakodowac polskie znaki w UTF-8, aby wyswietlajac sam plik html w przegladarce byly widoczne polskie znaki. Samo zaznaczenie i skopiowanie tekstu i zapisanie jako html_test.html spowoduje, ze polskie znaki beda zle zakodowane i po utworzeniu pdf bedzie zle.
34: 2011-10-23 19:24:44, A:
AP: może podeślesz mi gotową paczkę? jakoś wszystko mi się sypie, mimo, że walczę z tym jak młody wilk:) jeśli będziesz na tak, to odezwij się:) pzdr.
35: 2012-03-14 20:29:06, NT Solution:
Do generowania plików PDF, polecam TCPDF => www.tcpdf.org
36: 2012-10-29 21:01:03, patrycjusz:
Czy możesz po prostu zapodać te zmienione pliki?
times? dla polski będzie wiadomo co z nimi zrobić.
Zapakuj w zip i udostępnij (duży problem z tym jest)
37: 2016-12-09 20:34:52, Anh1988:
Muszę sie wam pochwalić w końcu schudłam - 9 kilo.
Przeszukałam chyba caly polski internet zeby znalezc coś
na odchudzanie i znalazlam. Wygoglujcie sobie: xxally radzi jak szybko schudnac
38: 2021-09-17 17:14:18, <:
you are actually a good webmaster. The website loading
velocity is incredible. It sort of feels that
you're doing any distinctive trick. Also, The contents are masterpiece.
you have done a fantastic activity on this subject!
39: 2022-05-31 17:40:33, Trabajos 4 You:
Wow that was unusual. I just wrote an very long comment but after I clicked submit my comment didn't appear.
Grrrr... well I'm not writing all that over again. Anyways,
just wanted to say excellent blog!
40: 2024-03-20 03:13:12, Shaanxi United Chemical:
Sweet blog! I found it while browsing on Yahoo News.
Do you have any suggestions on how to get listed in Yahoo News?
I've been trying for a while but I never seem to get there!
Cheers
41: 2024-03-20 03:14:18, Shaanxi United Chemical:
Sweet blog! I found it while browsing on Yahoo News.
Do you have any suggestions on how to get listed in Yahoo News?
I've been trying for a while but I never seem to get there!
Cheers
42: 2024-03-20 03:15:25, Shaanxi United Chemical:
Sweet blog! I found it while browsing on Yahoo News.
Do you have any suggestions on how to get listed in Yahoo News?
I've been trying for a while but I never seem to get there!
Cheers
43: 2024-03-20 03:16:31, Shaanxi United Chemical:
Sweet blog! I found it while browsing on Yahoo News.
Do you have any suggestions on how to get listed in Yahoo News?
I've been trying for a while but I never seem to get there!
Cheers
44: 2024-09-05 08:47:03, elp:
Hey there just wanted to give you a quick heads up. The
text in your content seem to be running off the screen in Internet explorer.
I'm not sure if this is a format issue or something to do with web browser compatibility but I thought I'd post to let you know.
The design and style look great though! Hope you get the problem solved soon.
Thanks
45: 2024-09-05 09:43:56, luxury pool towels:
Good write-up. I absolutely love this website. Keep it up!
46: 2024-09-05 09:45:01, luxury pool towels:
Good write-up. I absolutely love this website. Keep it up!
47: 2024-09-05 09:46:06, luxury pool towels:
Good write-up. I absolutely love this website. Keep it up!
48: 2024-09-05 09:47:11, luxury pool towels:
Good write-up. I absolutely love this website. Keep it up!
49: 2024-09-05 12:55:01, panen 33 login:
Ꮇy brother suggested Ι mіght liкe this web site.
Hе wаs totally right. Thhis post ɑctually msde my ԁay.
Ⲩou cann't Ьelieve simply hօѡ much tome Ӏ hɑd spent forr thіs info!
Thanks!
50: 2024-09-05 12:56:06, panen 33 login:
Ꮇy brother suggested Ι mіght liкe this web site.
Hе wаs totally right. Thhis post ɑctually msde my ԁay.
Ⲩou cann't Ьelieve simply hօѡ much tome Ӏ hɑd spent forr thіs info!
Thanks!
51: 2024-09-05 12:57:11, panen 33 login:
Ꮇy brother suggested Ι mіght liкe this web site.
Hе wаs totally right. Thhis post ɑctually msde my ԁay.
Ⲩou cann't Ьelieve simply hօѡ much tome Ӏ hɑd spent forr thіs info!
Thanks!
52: 2024-09-05 12:58:16, panen 33 login:
Ꮇy brother suggested Ι mіght liкe this web site.
Hе wаs totally right. Thhis post ɑctually msde my ԁay.
Ⲩou cann't Ьelieve simply hօѡ much tome Ӏ hɑd spent forr thіs info!
Thanks!