Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Generowanie dużych plików PDF
Forum PHP.pl > Forum > PHP
lukaskolista
Część, chciałbym się Was zapytać, w jaki sposób można wygenerować duży plik PDF. Pisząc duży mam na myśli przynajmniej te 5000 stron. Sam HTML na podstawie którego to generuję ma ponad 13MB. Biblioteki napisane w PHP odrzuciłem na wstępie, ale niestety nawet wkhtmltopdf na linuxie nie daje rady. Będę wdzięczny za pomoc.

Z góry proszę o nie pisanie postów typu: masz to źle zaprojektowane, może da się generować mniejsze. Takie są niestety wymagania i nie ja je narzucam, a biznes (w korporacji).

Dodam, że praktycznie cały PDF to jedna duża tabelka, może da się to generować nie na podstawie HTML, tylko jakoś inaczej.
salfunglandyare
Mógłbyś spróbować podzielić tabelę na części, wygenerować kilka(-set) mniejszych PDF a na końcu skorzystać z PDFMergera https://pdfmerger.codeplex.com/
lukaskolista
Tylko wtedy nie zachowam płynnych przejść tabeli na kolejną stronę w miejscach łączeń plików pdf, a nie jestem w stanie obliczyć ile konkretnie wierszy zmieści się na 1 stronie, żeby wyświetlić odpowiednią ilość do płynnego przejścia.
salfunglandyare
No cóż, wkhtmltopdf się wykrzacza? tzn nie generuje nic, czy generuje, ale nie działa ze skryptu? Jeśli to drugie, to zmień wersję na QT i możesz skorzystać z knp-snappy (mozna doinstalowac z composera w php)
Możesz też spróbować skonwertować html do postscript (html2ps) i dopiero to do pdf... Ale to tylko rozwazania, nigdy nie probowalem rozwiazywac takiego problemu, ale ponoc co 2 glowy to nie 1 biggrin.gif
lukaskolista
Jak dla mnie problem leży w wydajności wkhtmltopdf, przy mniejszych ilościach HTML (np. dających 200 stron pdf) działa w kilka sekund. FPDF w php daje radę wygenerować taką tabelę w kilka sekund, ale znowu nie ma osbługi nagłówków i stopek dla stron oraz HTML, generalnie jest ubogi. Mpdf wymięka nawet przy tych 200 stronach pdf.

Spróbuję zwiększyć limit pamięci (w tej chwili 1GB na wirtualce), ale wątpię, że coś to da.

Cytat
No cóż, wkhtmltopdf się wykrzacza? tzn nie generuje nic, czy generuje, ale nie działa ze skryptu?

Generuje pusty pdf (0kb), wersję mam z QT, ponieważ tylko z QT daje osbługę nagłówków i stopek z zewnętrznych plików. Nie rozumiem stwierdzenia "nie działa ze skryptu".

Ogólnie w wkhtmltopdf dochodzę do momentu:
Loading pages (1/6)
[==============================> ] 50%
i tak zostaje na tych 50% nawet kilka godzin (raz trzeba było wirtualke zrestartować, bo nie dało się z nią nawet połączyć).

Edit:
przy generowaniu postscripta nie działają stopki i nagłówki, poza tym też tworzy pusty plik

Edit 2:
Zwiększyłem limit pamięci do 3GB i teraz działa szybko, niestety wywala się na nagłówkach i stopkach dla stron z komunikatem:
Error: Failed loading page file:///sciezka_do_pliku_stopki (sometimes it will work just to ignore this error with --load-error-handling ignore)

a na samym końcu wali błędem:
QPaintDevice: Cannot destroy paint device that is being painted

Edit 3:
w miarę postępu prac edytuję ten temat, żeby było dla innych.
Zmieniłem opcje --header-html i --footer-html aby pobierały nagłówek i stopkę przez http:// zamiast przez file:// i otrzymałem komunikat o przekroczonym limicie otwartych plików. Prawdopodobnie przy file:// jest ten sam błąd, tylko wyświetla info, że nie może otworzyć pliku zamiast info o przekroczonym limicie otwartych plików. Po ustawieniu wiekszego limitu (muszę na to poczekać) napiszę, jaki jest efekt.
sazian
nie testowałem ale może spróbuj tego https://sites.google.com/site/torisugari/commandlineprint2
wygląd obiecująco
lukaskolista
Niestety, ale potrzebuję opcji nagłówka dla każdej strony, w dodatku w zależności od numeru strony nagłówek ma być inny, a podane przez Ciebie narzędzie nie dostarcza tej funkcjonalności. Mimo wszystko dziękuję za pomoc.
salfunglandyare
Nie wiem, czy rozwiązałeś problem, ale z tego co pamiętam, to były rzeczywiście jakieś problemy z plikami naglowkow, sprobuj tego:
* w plikach z header i footer dodaj <!DOCTYPE html> na poczatku
* nie dawaj file:// jeśli jest to na lokalnym serwerze, po prostu /sciezka/do/pliku.html
lukaskolista
Tak właśnie robię. Problem leżał w niewystarczającej ilości RAM, teraz mam problem z limitem maksymalnej ilości otwartych plików. Jak go zwiększą (admini), to wtedy sprawdzę.

Po zwiększeniu limitu wkhtmltopdf mieli mieli i mieli, po czym generuje pusty plik pdf (0 bajtów). Czy ktoś spotkał się z takim problemem? Dodam, że pojawia się on tylko w przypadku użycia opcji nagłówka lub stopki z zewnętrznych plików. (--header-html i --footer-html).
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.