Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Generowanie dużych plików PDF
lukaskolista
post 6.05.2015, 10:06:11
Post #1





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

Ostrzeżenie: (0%)
-----


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.

Ten post edytował lukaskolista 6.05.2015, 10:11:33
Go to the top of the page
+Quote Post
salfunglandyare
post 6.05.2015, 10:29:12
Post #2





Grupa: Zarejestrowani
Postów: 150
Pomógł: 31
Dołączył: 10.01.2007
Skąd: Bydgoszcz/Inowrocław

Ostrzeżenie: (0%)
-----


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/
Go to the top of the page
+Quote Post
lukaskolista
post 6.05.2015, 12:02:02
Post #3





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
salfunglandyare
post 6.05.2015, 12:15:51
Post #4





Grupa: Zarejestrowani
Postów: 150
Pomógł: 31
Dołączył: 10.01.2007
Skąd: Bydgoszcz/Inowrocław

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
lukaskolista
post 6.05.2015, 12:52:27
Post #5





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

Ostrzeżenie: (0%)
-----


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.

Ten post edytował lukaskolista 6.05.2015, 14:57:03
Go to the top of the page
+Quote Post
sazian
post 6.05.2015, 20:28:09
Post #6





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

Ostrzeżenie: (0%)
-----


nie testowałem ale może spróbuj tego https://sites.google.com/site/torisugari/commandlineprint2
wygląd obiecująco
Go to the top of the page
+Quote Post
lukaskolista
post 7.05.2015, 10:52:25
Post #7





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
salfunglandyare
post 7.05.2015, 11:38:19
Post #8





Grupa: Zarejestrowani
Postów: 150
Pomógł: 31
Dołączył: 10.01.2007
Skąd: Bydgoszcz/Inowrocław

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
lukaskolista
post 11.05.2015, 13:24:20
Post #9





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

Ostrzeżenie: (0%)
-----


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).

Ten post edytował lukaskolista 11.05.2015, 13:24:32
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 16.05.2025 - 15:09