Mam dokument HTML (nie XHTML), który renderuje się dobrze w Firefox 3 i IE 7. Używa dość podstawowego CSS do stylizowania go i renderuje dobrze w HTML.
Teraz szukam sposobu na przekonwertowanie go do formatu PDF. Próbowałem:
- DOMPDF : miał ogromne problemy z tabelami. Uwzględniłem moje duże zagnieżdżone tabele i pomogło (zanim zużyło do 128 mln pamięci, a następnie umierało - to mój limit pamięci w php.ini), ale robi kompletny bałagan w tabelach i wydaje się, że nie dostaje obrazy. Tabele były po prostu podstawowymi elementami z niektórymi stylami obramowania, aby dodać linie w różnych punktach;
- HTML2PDF i HTML2PS : Miałem z tym więcej szczęścia. Wyrenderował niektóre obrazy (wszystkie obrazy są adresami URL Google Chart), a formatowanie tabeli było znacznie lepsze, ale wydawało się, że ma jakiś problem ze złożonością, którego jeszcze nie odkryłem i umieram z nieznanymi błędami node_type (). Nie jestem pewien, dokąd się udać; i
- Htmldoc : wydaje się, że działa dobrze na podstawowym HTML, ale prawie w ogóle nie obsługuje CSS, więc musisz robić wszystko w HTML (nie wiedziałem, że to był jeszcze rok 2001 w Htmldoc-land ...), więc jest to dla mnie bezużyteczne.
Wypróbowałem aplikację Windows o nazwie Html2Pdf Pilot, która faktycznie wykonała całkiem przyzwoitą robotę, ale potrzebuję czegoś, co najmniej działa w systemie Linux i idealnie działa na żądanie za pośrednictwem PHP na serwerze sieci Web.
Czego mi brakuje lub jak mogę rozwiązać ten problem?
@import
,@media
a@screen
przepisy i załaduje zewnętrznych arkuszy stylów. Jest również dostarczany ze wszystkim, co jest potrzebne do jego działania, chociaż są rzeczy, które można zainstalować, aby uzyskać lepszą wydajność niż domyślne biblioteki lib. code.google.com/p/dompdfchrome --headless --print-to-pdf="path/to/pdf" https://your_url
za najbogatsze, najszybsze i najłatwiejsze narzędzie do generowania html do pdf crbug.com/603559, ponieważ obsługuje on większość funkcji HTML, twórcy aplikacji polegają na tworzeniu stron internetowych i nie wysysają skomplikowanych skryptów, jak większość innych biblioteki i narzędzia tak robią.Odpowiedzi:
Ważne: należy pamiętać, że ta odpowiedź została napisana w 2009 r. I może nie być dziś najbardziej opłacalnym rozwiązaniem w 2019 r. Alternatywy online są dziś lepsze niż wtedy.
Oto niektóre usługi online, z których możesz skorzystać:
Spójrz na PrinceXML .
Jest to zdecydowanie najlepszy dostępny konwerter HTML / CSS na PDF, chociaż nie jest darmowy (ale hej, twoje programowanie może również nie być darmowe, więc jeśli zaoszczędzi ci 10 godzin pracy, jesteś wolny w domu (ponieważ musisz również wziąć pod uwagę, że alternatywne rozwiązania będą wymagać skonfigurowania serwera dedykowanego z odpowiednim oprogramowaniem)
O tak, czy wspomniałem, że to pierwsze (i prawdopodobnie tylko) rozwiązanie HTML2PDF, które obsługuje pełny ACID2 ?
Próbki PrinceXML
źródło
Spójrz na
wkhtmltopdf
. Jest to oprogramowanie typu open source, oparte na pakiecie internetowym i bezpłatne.Napisaliśmy mały poradnik tutaj .
EDYCJA (2017):
Gdyby dzisiaj miał coś zbudować, nie poszedłbym już tą drogą.
Ale zamiast tego użyłby http://pdfkit.org/ .
Prawdopodobnie pozbawienie go wszystkich zależności nodejs, aby uruchomić się w przeglądarce.
źródło
Po pewnym dochodzeniu i ogólnym pociągnięciu za włosy rozwiązaniem wydaje się HTML2PDF . DOMPDF wykonał okropną robotę z tabelami, ramkami , a nawet umiarkowanie złożonym układem, a htmldoc wydaje się dość solidny, ale jest prawie całkowicie nieświadomy CSS i nie chcę wracać do tworzenia układu HTML bez CSS tylko dla tego programu.
HTML2PDF wyglądał na najbardziej obiecujący, ale nadal miałem ten dziwny błąd dotyczący zerowych argumentów odwołania do typu_węzła. W końcu znalazłem rozwiązanie tego problemu. Zasadniczo PHP 5.1.x działało dobrze z zamiennikami regularnymi (preg_replace_ *) na ciągach dowolnego rozmiaru. PHP 5.2.1 wprowadziło dyrektywę konfiguracyjną php.ini o nazwie pcre.backtrack_limit . Ten parametr konfiguracyjny ogranicza długość łańcucha, dla którego dokonywane jest dopasowanie. Dlaczego to wprowadzono, nie wiem. Wartość domyślna została wybrana jako 100 000. Dlaczego tak niska wartość? Znowu nie mam pojęcia.
Błąd został podniesiony przed PHP 5.2.1 dla tego , co jest nadal otwarte prawie dwa lata później .
Przerażające w tym jest to, że gdy limit zostanie przekroczony, wymiana po prostu cicho zawiedzie . Przynajmniej gdyby błąd został zgłoszony i zalogowany, będziesz miał pewne wskazówki, co się stało, dlaczego i co należy zmienić, aby to naprawić. Ale nie.
Mam więc plik HTML 70k, który można przekształcić w PDF. Wymaga następujących ustawień php.ini:
Teraz bystry czytelnik mógł zauważyć, że mój plik HTML jest mniejszy niż 100 KB. Jedynym powodem, dla którego mogę zgadnąć, dlaczego trafiłem na ten problem, jest to, że html2pdf dokonuje konwersji do xhtml w ramach tego procesu. Być może to mnie przejęło (chociaż prawie 50% wzdęć wydaje się dziwne). Niezależnie od przypadku powyższe zadziałało.
Teraz html2pdf to świnia zasobów. Mój plik 70k zajmuje około 5 minut i co najmniej 500-600M pamięci RAM, aby utworzyć 35-stronicowy plik PDF. Niestety nie jest wystarczająco szybki (jak na razie) do pobierania w czasie rzeczywistym, a użycie pamięci ustawia współczynnik wykorzystania pamięci rzędu 1000 do 1 (600 MB pamięci RAM dla pliku 70k), co jest całkowicie absurdalne.
Niestety, to najlepsze, co wymyśliłem.
źródło
Dlaczego nie wypróbujesz mPDF w wersji 2.0 ? Użyłem go do stworzenia dokumentu PDF. To działa dobrze.
Tymczasem mPDF jest w wersji 5.7 i jest aktywnie utrzymywany, w przeciwieństwie do HTML2PS / HTML2PDF
Pamiętaj jednak, że dokumentacja może być naprawdę trudna w obsłudze. Na przykład spójrz na tę stronę: https://mpdf.github.io/ .
Za pomocą tej biblioteki można wykonywać bardzo podstawowe zadania od html do pdf, ale bardziej złożone zadania zajmą trochę czasu i „zrozumienie” dokumentacji.
źródło
mPDF error: IMAGE Error (http://www.example.com/folder/image.jpg): Error parsing image file - image type not recognised, and not supported by GD imagecreate
1) użyj MPDF !
a) wyodrębnić
yourfolder
b) tworzą file.php się
yourfolder
i wkładki takiego kodu:c) otwórz plik.php w przeglądarce
2) Użyj pdfToHtml !
1) wypakuj pdftohtml.exe do folderu głównego:
2) w tym folderze w pliku anyfile.php umieść ten kod (zakładając, że istnieje również przykładowy plik.pdf ):
3) wejdź do FinalFolder , a skonwertowane pliki (tyle stron, ile miał źródłowy plik PDF ...)
źródło
Kasa TCPDF . Posiada funkcje HTML-PDF, które mogą wystarczyć do zaspokojenia potrzeb. Jest to również bezpłatne!
źródło
Żeby podbić wątek, wypróbowałem DOMPDF i zadziałało idealnie. Użyłem
DIV
i innych elementów na poziomie bloku do pozycjonowania wszystkiego, trzymałem go ściśle CSS 2.1 i grałem bardzo ładnie.źródło
Sugeruję DocRaptor (który używa
PrinceXML
jako „silnik”)źródło
Zostało to już wspomniane, ale chciałbym tylko potwierdzić, że mpdf jest najłatwiejszym, najmocniejszym i najbardziej darmowym konwerterem HTML na pdf. Niebo jest naprawdę granicą. Możesz nawet wygenerować pdf dynamicznych danych generowanych przez użytkowników.
Na przykład klient chciał systemu CMS, aby mógł zaktualizować listę utworów, które grał w swoim klubie. Nie stanowiło to problemu, ale chciał również, aby użytkownicy mogli pobrać plik pdf z listy odtwarzania, więc ten plik do pobrania musiał zostać zaktualizowany również przez cms. Dzięki mpdf, z kilkoma prostymi pętlami i przeplatanymi zmiennymi mogłem to zrobić. Coś, co myślałem, że zajmie mi tygodnie dosłownie zajęło mi minuty.
Świetny artykuł, który pomógł mi zacząć.
źródło
Dobre wieści! Snappy !!
Snappy jest bardzo łatwą biblioteką PHP5 typu open source, umożliwiającą generowanie miniatur, migawek lub plików PDF z adresu URL lub strony HTML. I ... wykorzystuje doskonały wkhtmltopdf oparty na webkicie
Cieszyć się! ^ _ ^
źródło
Cóż, jeśli chcesz znaleźć idealną bibliotekę konwertera XHTML + CSS na PDF, zapomnij o tym. To dalekie od możliwego. Ponieważ jest to jak znalezienie idealnej przeglądarki (silnik renderujący XHTML + CSS). Czy mamy taki? IE czy FF?
Odniosłem pewien sukces z DOMPDF. Chodzi o to, że musisz zmodyfikować kod HTML + CSS, aby dostosować go do sposobu działania biblioteki. Poza tym mam całkiem dobre wyniki.
Patrz poniżej:
Oryginalny HTML
Konwertowanie HTML na PDF
źródło
HTML2PDF i html2ps który został pierwotnie wymienione w poście otwierającym mówił o pakiecie 2009 z tego linku
Ale jest lepszy HTML2PDF
Opiera się na TCPDF, choć częściowo jest w języku francuskim.
Możesz mieć nagłówki lub stopki tabeli powtarzające się na stronach oraz numery stron i łączną liczbę stron. Zobacz jego przykłady . Używam go od ponad trzech lat i polecam.
źródło
Używam fpdf do tworzenia plików PDF za pomocą PHP. Do tej pory działało dla mnie dobrze, tworząc proste wyniki.
źródło
Jest samouczek na temat devzone Zenda na temat generowania pdf z php ( część 1 , część 2 ) bez żadnych zewnętrznych bibliotek. Nigdy nie wdrożyłem tego rodzaju rozwiązania, ale ponieważ jest to cały php, może być bardziej elastyczne we wdrażaniu i debugowaniu.
źródło
Spróbuj pobrać najnowszą nocną kompilację dompdf - korzystałem ze starszej wersji, która była straszną świnią zasobów i trwała wieczność, aby wyrenderować mój pdf. Po złapaniu stąd co noc .
Wygenerowanie pliku PDF zajęło tylko kilka sekund - I było tak samo ładnie renderowane, jak w PrinceXML / Docraptor . Wygląda na to, że poważnie zoptymalizowali kod dompdf od czasu jego ostatniego użycia!
źródło
Wspomnienie Darryl Hein o TCPDF jest prawdopodobnie świetnym pomysłem. Kod Nicoli Asuni jest bardzo przydatny i potężny. Jedynym zabójcą jest to, że jeśli kiedykolwiek planujesz scalić pliki PDF z wygenerowanym plikiem PDF, nie ma tych funkcji. Będziesz musiał utworzyć plik PDF, a następnie scalić go za pomocą czegoś takiego jak PDFTK autorstwa Sid Steward (www.pdflabs.com/tools/pdftk-the-pdf-toolkit/).
źródło
Pod względem kosztów korzystanie z usługi internetowej (API) może w wielu przypadkach być bardziej rozsądnym podejściem. Ponadto, zlecając ten proces outsourcingowi, obciążasz własną infrastrukturę / backend i - pod warunkiem, że korzystasz z renomowanej usługi - zapewniasz zgodność z dostosowywaniem standardów internetowych, czasu pracy, krótkich czasów przetwarzania i szybkiego dostarczania treści.
Przeprowadziłem badania dotyczące większości usług internetowych obecnie dostępnych na rynku, poniżej znajdziesz interfejsy API, które moim zdaniem warto wspomnieć w tym wątku, w kolejności opartej na stosunku ceny do wartości. Wszystkie oferują wstępnie skomponowane klasy i pakiety PHP.
Jakość:
Mając wysokiej jakości silnik
PrinceXML
jako szkielet, DocRaptor wyraźnie oferuje najlepszą jakość PDF, zwracając bardzo dopracowane i dobrze przekonwertowane dokumenty PDF. Jednak usługa API pdflayer zbliża się tutaj. Pdfcrowd niekoniecznie ocenia jakość, ale szybkość przetwarzania.Koszt:
pdflayer.com - jak wskazano powyżej, najbardziej opłacalną opcją jest tutaj pdflayer.com, oferujący całkowicie darmowy abonament na 100 miesięcznych plików PDF i subskrypcje premium w przedziale od 9,99 USD do 119,99 USD. Cena za 10.000 miesięcznych dokumentów PDF wynosi 39,99 USD.
docraptor.com - Oferowanie 7-dniowego bezpłatnego okresu próbnego. Plany subskrypcji Premium wynoszą od 15 do 2250 USD. Cena za 10.000 miesięcznych dokumentów PDF wynosi ~ 300,00 $.
pdfcrowd.com - Oferowanie 100 plików PDF raz za darmo. Plany subskrypcji Premium wahają się od 9 do 89 USD. Cena za 10.000 miesięcznych dokumentów PDF wynosi ~ 49,00 $.
Użyłem wszystkich trzech, a ten tekst ma pomóc każdemu w podjęciu decyzji bez konieczności płacenia za wszystkie. Ten tekst nie został napisany w celu poparcia jednego produktu i nie mam żadnego powiązania z żadnym produktem.
źródło
Jeśli masz dostęp do wiersza poleceń, możesz użyć PhantomJS do utworzenia
PDF
zURL
(zdalnego lub lokalnego).Działa naprawdę dobrze i jest darmowym rozwiązaniem.
Spójrz na ten przykładowy skrypt dla tego konkretnego problemu.
źródło
To pytanie jest już dość stare, ale nie widziałem nikogo wspominającego o CutyCapt, więc zrobię to :)
CutyCapt
źródło
Polecam TCPDF lub DOMPDF, w tej kolejności.
źródło
Nie sądzę, aby klasa php była najlepsza do renderowania strony xHtml za pomocą css.
Co się stanie, gdy pojawi się nowa reguła css? (wkrótce css 3.0 ...)
Najlepszym sposobem renderowania strony HTML jest oczywiście przeglądarka. Firefox 3.0 może natywnie „drukować” w formacie pdf, torisugary opracowało rozszerzenie (drukowanie z wiersza poleceń), aby z niego korzystać. Tutaj to znajdziesz.
W każdym razie, nadal istnieje wiele problemów akustycznych runninr firefox tylko jako konwerter pdf ...
W tej chwili uważam, że wkhtmltopdf jest najlepszy (to ten używany przez przeglądarkę safari), szybki, szybki, niesamowity. Tak, również opensource ... Spójrz
źródło
Opracowałem publiczny interfejs API do tworzenia plików PDF ze stron internetowych. Ma ładną klasę klienta PHP, dzięki czemu jest bardzo łatwa w użyciu. Używa wkhtmltopdf do renderowania pliku PDF w chmurze.
Nie potrzeba niczego specjalnego w HTML. Nie ma potrzeby bezwzględnych adresów URL w linkach images / css / js. Działa również na localhost (maszynie deweloperskiej).
Obecnie usługa ma punkty końcowe w 4 regionach Azure: USA Wschodnie, USA Zachodnie, UE Północna, Azja Południowo-Wschodnia.
Jest szybki, ponieważ wykorzystuje zastrzeżony protokół do wysyłania zawartości strony internetowej do interfejsu API w celu konwersji do formatu PDF.
Jest niezawodny, ponieważ wszystkie punkty końcowe są zrównoważone pod względem obciążenia.
Darmowe konto dostępne do testowania lub niskiego zużycia. Szczegóły na stronie internetowej:
https://rotativahq.com
źródło
Być może możesz spróbować użyć Tidy przed przekazaniem pliku do konwertera. Jeśli jeden z renderera dusi się z powodu jakiegoś problemu HTML (takiego jak niezamknięty tag), może to pomóc.
źródło
Dokładne renderowanie nic nie znaczy. Czy to się sprawdza?
Wszystkie przeglądarki robią, co mogą, aby po prostu pokazać coś na ekranie, bez względu na to, jak zły jest sygnał wejściowy. I oczywiście nie robią tego samego. Jeśli chcesz tego samego renderowania co FireFox, możesz użyć jego silnika renderowania. Są do tego generatory pdf. To jednak okropnie dużo pracy.
źródło
Chociaż istnieje już wiele rozwiązań, polecam następujące dwa:
To, co różni się w tych dwóch interfejsach API od wszystkich wcześniej wspomnianych rozwiązań, to to, że oprócz konwersji HTML na PDF z CSS i JavaScript, oferuje także zarządzanie prawami do plików PDF, znak wodny i szyfrowanie. Dlatego jest to kompleksowe rozwiązanie dla tych, którzy chcą rzucić się na ziemię.
Oświadczenie: Pracuję dla Kaiomi, firmy, która obsługuje obie strony.
źródło
Czy konwersja HTML do PDF naprawdę musi odbywać się po stronie serwera za pomocą PHP?
Właśnie natrafiłem na jsPDF , rozwiązanie po stronie klienta korzystające z HTML5 / JavaScript. Kod licencjonowany na MIT również znajduje się na GitHub .
źródło
TCPDF działa dobrze, bez zależności, jest darmowy i ciągle naprawiany. Ma rozsądną szybkość, jeśli dostarczona zawartość HTML / CSS jest dobrze sformatowana. Zwykle generuję z 50 - 300 kB danych HTML (w tym CSS) i uzyskuję dane wyjściowe PDF w ciągu 1-3 sekund z 10 - 15 stronami PDF.
Przed wysłaniem czegokolwiek do TCPDF zdecydowanie zalecam używanie uporządkowanej biblioteki jako ładnego formatera HTML.
źródło
Wypróbowałem wiele różnych bibliotek dla PHP. Wszystkie wymienione próbowałem. Moim zdaniem biblioteka TCPDF jest najlepszym kompromisem wydajności / użyteczności. Jest bardzo prosty w instalacji i obsłudze, a także dobrą wydajność w małych średnich aplikacjach. Jeśli potrzebujesz wysokowydajnego i bardzo dużego dokumentu PDF, skorzystaj z modułu Zend_PDF , ale przygotuj się na ciężkie kodowanie!
źródło
Web API
Jeśli są ludzie, którzy zawsze szukają tego rodzaju rzeczy, istnieje darmowa strona internetowa, która pozwala na konwersję kodu HTML i stron do formatu pdf. Istnieje również (bardzo mały) interfejs API, który pozwala pobrać plik pdf z adresu URL.
Sprawdź tutaj
źródło
nie PHP , ale biblioteka Java , która robi to:
Można go używać z PHP za pośrednictwem
system()
lub podobnego połączenia. Chociaż wymaga XML poprawnie sformułowanego plikuinput
.źródło