Konwertuj HTML + CSS na PDF [zamknięte]

1628

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?

cletus
źródło
9
Html2Pdf faktycznie używa wbudowanej instancji IE do renderowania strony, a następnie konwertuje ją do formatu PDF - prawdopodobnie za pomocą mechanizmu drukowania IE.
Joel Mueller
55
ponieważ jest to pytanie z 2008 roku, dompdf jest teraz znacznie bardziej dojrzały. ;-)
Hendra Uzia
5
dompdf obsługuje CSS 2.1 i może zajmować się @import, @mediaa @screenprzepisy 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/dompdf
totallyNotLizards
6
Aktualizacja 2015: Po przeanalizowaniu wielu opcji zdecydowaliśmy się na wkhtmltopdf, to miłe narzędzie, z którym zmagamy się w CSS, ponieważ mamy zewnętrzny plik CSS, ale później zastosowaliśmy sztuczkę polegającą na umieszczeniu fikcyjnego łącza CSS w naszym elemencie HTML, który chcemy konwersja i ustawienie właściwej ścieżki działa jak MAGIA !!!
Anshul Nigam,
10
Wierzę, że wkrótce wszyscy uznają Chrome / Chromium chrome --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ą.
Ebrahim Byagowi

Odpowiedzi:

551

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

SchizoDuckie
źródło
16
Moja firma napisała serwis internetowy zbudowany na Prince. Znacząco niższe koszty początkowe i użyteczne bez konieczności instalowania czegokolwiek: docraptor.com
Joel Meador
6
Użyłem również DocRaptor. Niesamowity sposób na uzyskanie korzyści Prince'a bez konieczności płacenia za drogą licencję. Gratulacje, świetny produkt, Joel.
Nate365
22
O wiele za drogie. WKHTMLTOPDF (zobacz inną odpowiedź) jest darmowy, wykonuje pracę i korzysta z webkit, który jest niesamowity.
thomallen,
1
są usługi Saas o tej samej lub lepszej jakości za ułamek ceny - patrz htm2pdf.co.uk
user1914292
5
Jeśli masz dostęp do wiersza poleceń i NIE chcesz płacić 3500 USD, PhantomJS z tym skryptem: github.com/ariya/phantomjs/blob/master/examples/rasterize.js może być rozwiązaniem - to darmowy i łatwy sposób!
chjortlund
666

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.

Mic
źródło
10
Ten działa na najlepszej podstawie IMO. Zwiększ konwersję z istniejącego mechanizmu renderującego zamiast pisać go od zera - nie jest to trywialne zadanie. Co więcej, Webkit jest napisany w C ++ i dlatego jest znacznie szybszy i znacznie mniej zasobów niż implementacja oparta na PHP.
Koobz
3
Mieliśmy ogromne problemy z uzyskaniem tego, aby poprawnie renderować czcionki serwerów CentOS. Po dosłownie tygodniach bałaganu wydaje się, że jedyną opcją jest nie używanie CentOS.
Abhi Beckert,
1
OSTRZEŻENIE! Jeśli używasz wkhtmltopdf (przynajmniej w moim systemie, XAMPP w Windows 7 64-bit), we wszystkich przypadkach próbowałem, obrazy .gif nie pojawiają się w pliku PDF. Próbowałem szeregu obejść sugerowanych w różnych miejscach, takich jak „szerokość” i „wysokość” oraz pisanie identyfikatorów URI zgodnie z różnymi konwencjami. Nic, co próbowałem, nigdy nie spowodowało pojawienia się plików .gif (w szczególności nawet sugestii „szerokość” i „wysokość”, których próbowałem zarówno przy użyciu stylów wbudowanych, jak i archaicznych, surowych atrybutów HTML „szerokość” i „wysokość”). Jednak zamiana obrazów na .jpg działała przy pierwszej próbie.
Dan Nissenbaum,
6
Ta abstrakcja jest całkiem fajna, chociaż mikehaertl.github.io/phpwkhtmltopdf
saada,
1
Usługi komercyjne były dla nas zbyt drogie, dlatego wdrożyliśmy WKHTMLTOPDF jako bezpłatną usługę chmurową html2pdfrocket.com dla każdego, z której moglibyśmy korzystać, a następnie sami wykorzystaliśmy ją dla naszych klientów. Zrobiliśmy to w ten sposób, aby nasi klienci nie musieli instalować plików exe na swoich serwerach itp. I działali na różnych platformach. Zdecydowanie oceniam WKHTMLTOPDF, jeśli budujesz własną usługę.
eagle779
150

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:

  • pcre.backtrack_limit = 2000000; # prawdopodobnie więcej niż potrzebuję, ale to jest OK
  • limit_pamięci = 1024 M; # tak, jeden gigabajt ; i
  • max_execution_time = 600; # tak, 10 minut .

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.

cletus
źródło
1
@cletus, czy możesz mi powiedzieć o stabilnej wersji HTML2PDF. Powyższy przykład linku jest przestarzały
Ripa Saha
Aby uzyskać najnowszą wersję, zobacz github.com/spipu/html2pdf
Luke Wenke
1
Ponura literówka staje się bardziej ponura: Współczynnik wykorzystania pamięci jest rzędu od 10 000 do 1 lol
MickLH
Działa tak źle, jak mPDF ... szybciej, ale nie precyzyjnie ... a konwersja czcionek TTF jest niezwykle bolesna ... mają nawet niezależną bibliotekę "tc-lib-pdf-font" tylko do generowania czcionek
Martin Zvarík
125

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.

Karthick
źródło
1
Wypróbowałem tutaj kilka sugerowanych. Do tej pory ten został załadowany i opracowany bez żadnych problemów, a dokumenty są naprawdę niesamowite w porównaniu do reszty. Instrukcje użytkowania są wyraźnie napisane.
Smith Smithy
mPDF daje mi poważne kłopoty, gdy POSTING tagi html z obrazem w tle lub tagi z bazy danych: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
Stefan
Wersja 6.0 działa tak, jak się spodziewano: dołącz (lub we frameworku, załaduj) instancję, wypełnij swoje rzeczy, wypisz w taki czy inny sposób ... To wszystko!
toesslab
Cóż, MPDF działa dobrze, prawda! Ale kod i dokumentacja są niespójne - naprawdę ciężko jest wykonać bardziej złożone zadanie, np. Napisać list dotyczący normy DIN.
Qullbrune,
Twierdzi, że jest znacznie wolniejszy niż html2fpdf. Ale w przypadku podstawowych treści myślałem, że to dość szybko (faktury, raporty itp.). Ogromnym plusem dla mPDF jest to, że prawie nie ma żadnych wymagań dotyczących rozszerzenia PHP (działa od razu na współdzielonym hostingu)
Joao
70

1) użyj MPDF !

a) wyodrębnić yourfolder

b) tworzą file.php się yourfolderi wkładki takiego kodu:

<?php
include('../mpdf.php');
$mpdf=new mPDF();
$mpdf->WriteHTML('<p style="color:red;">Hallo World<br/>Fisrt sentencee</p>');
$mpdf->Output();   exit;
 ?>

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

<?php
$source="example.pdf";
$output_fold="FinalFolder";

    if (!file_exists($output_fold)) { mkdir($output_fold, 0777, true);}
$result= passthru("pdftohtml $source $output_fold/new_filename",$log);
//var_dump($result); var_dump($log);
?>

3) wejdź do FinalFolder , a skonwertowane pliki (tyle stron, ile miał źródłowy plik PDF ...)

tazo todua
źródło
Spróbowałbym GrabzIt ich API obsługuje CSS, JavaScript i większość innych typów zasobów. Należy po prostu odwoływać się do bezwzględnych adresów URL lub umieścić je w treści i dołączyć do kodu HTML wysyłanego do usługi. Spróbuj tutaj: grabz.it/html-to-pdf-image-api.aspx
Grabz To nie jest darmowe
Chatoxz
32

Żeby podbić wątek, wypróbowałem DOMPDF i zadziałało idealnie. Użyłem DIVi innych elementów na poziomie bloku do pozycjonowania wszystkiego, trzymałem go ściśle CSS 2.1 i grałem bardzo ładnie.

Filip Dupanović
źródło
31

Sugeruję DocRaptor (który używa PrinceXMLjako „silnik”)

aRahmanS29
źródło
Niestety nie można go użyć, jeśli chcesz wygenerować duże pliki PDF z dużą ilością obrazów. Myślę, że istnieje 60-sekundowy limit czasu na żądania i jeśli Docraptor będzie musiał pobrać dużo plików, zostanie to przekroczone i żaden plik nie zostanie utworzony.
Vilhelm
1
Ten problem, o którym wspomniał Vilhelm, został naprawiony.
illbzo1
30

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ąć.

Starkers
źródło
7
Plik PDF z listy odtwarzania. Boże pomóż mi.
Henrik Erlandsson
29

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ę! ^ _ ^

Paulo Coghi - Przywróć Monikę
źródło
1
Zbudowałem interfejs API HTTP, który używa Snappy (na podstawie wkhtmltopdf). Możesz przekazać adres URL i przekonwertować stronę z HTML na PDF: github.com/Dellos7/dhtml2pdf
David López
26

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

datasn.io
źródło
25

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.

Luke Wenke
źródło
1
Dlaczego to nie jest na górze? Działa bez żadnych dodatkowych zależności i jest wystarczający do aplikacji większości ludzi bez konieczności wydawania 3800 USD!
zdegenerowano
22

Używam fpdf do tworzenia plików PDF za pomocą PHP. Do tej pory działało dla mnie dobrze, tworząc proste wyniki.

stealthyninja
źródło
21

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.

yoavf
źródło
Tak, ale to nie konwertuje HTML ... to generowanie nieprzetworzonego pliku PDF
Martin Zvarík
16

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!

Arni J
źródło
dompdf to naprawdę świetna opcja. Użyłem dwa razy i jest to bardzo łatwe. Polecę wypróbować dompdf. Oto link do oficjalnego repozytorium github: github.com/dompdf/dompdf
Rituparna sonowal
16

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

Pajęczak
źródło
13

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.

  1. pdflayer.com - Koszt: $ - Jakość: ☆☆☆☆
  2. docraptor.com - Koszt: $$$ - Jakość: ☆☆☆☆☆
  3. pdfcrowd.com - Koszt: $$ - Jakość: ☆☆☆

Jakość:

Mając wysokiej jakości silnik PrinceXMLjako 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.

Frank
źródło
Dzięki za udostępnienia. Przez cały dzień analizowałem wszystkie opcje i bardziej skoncentrowałem się na darmowych libach lub kupowaniu lib. Twoja odpowiedź pomoże mi znów się zastanowić. Uważam, że dla małych firm jest to opłacalny i najłatwiejszy sposób korzystania z usług internetowych. Dla pdflayer.com; mniej niż 100 $ / rok trwa 20 lub 30 lat, aby złamać nawet, ale ja nie thnik będziemy zostawić w tym samym świecie, 20 lat później :)
darowizną
12

Jeśli masz dostęp do wiersza poleceń, możesz użyć PhantomJS do utworzenia PDFz URL(zdalnego lub lokalnego).

Działa naprawdę dobrze i jest darmowym rozwiązaniem.

Spójrz na ten przykładowy skrypt dla tego konkretnego problemu.

Hjortlund
źródło
ale możesz mieć problemy z czcionkami (stronami internetowymi)
Mihai Crăiță,
11

To pytanie jest już dość stare, ale nie widziałem nikogo wspominającego o CutyCapt, więc zrobię to :)

CutyCapt

CutyCapt to małe wieloplatformowe narzędzie wiersza polecenia do przechwytywania renderowania strony internetowej przez WebKit w różnych formatach wektorowych i bitmapowych, w tym SVG, PDF, PS, PNG, JPEG, TIFF, GIF i BMP

Koen
źródło
11

Polecam TCPDF lub DOMPDF, w tej kolejności.

criss_ae
źródło
9

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

Strae
źródło
PHP jest przydatne, jeśli chcesz wyprowadzić jakiś oficjalny dokument, taki jak pokwitowanie dla użytkownika, i możesz użyć CSS, aby wyglądał ładnie.
Luke Wenke
9

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

Giorgio Bozio
źródło
8

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.

PhiLho
źródło
Tak, ważny punkt, ale już o tym myślałem. W moim HTML nie ma niepasujących ani niestandardowych tagów.
cletus
7

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.

Stephan Eggermont
źródło
7

Chociaż istnieje już wiele rozwiązań, polecam następujące dwa:

  1. HTM2PDF - oferuje API do konwersji HTML na PDF, a także posiada PHP SDK, co bardzo ułatwia wdrożenie w PHP; Oferuje wybór lokalizacji serwerów w Europie, Azji i USA
  2. PDFmyURL - oferuje interfejs API, który obsługuje również URL i HTML do PDF, z mniej więcej taką samą funkcjonalnością jak HTM2PDF, ale działa na krajobrazie z równoważeniem obciążenia i jest nieco dłuższy

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.

użytkownik1914292
źródło
Nie chciałbym polegać na usłudze, kiedy jest na sprzedaż . Biorąc pod uwagę fakt, że nie został sprzedany na tej aukcji, mogę tylko założyć, że zostanie sprzedany w najbliższej przyszłości?
Robin van Baalen,
właściwie moja firma nabyła go jakiś czas po aukcji ....
user1914292
W takim razie chyba nie ma się czym martwić.
Robin van Baalen,
5

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 .

Oliver Schafeld
źródło
dla mnie biblioteka jest bardzo ograniczona
YXN
5

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.

lubosdz
źródło
4

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!

trullallero
źródło
Zend PDF nie może przekonwertować z HTML
Martin Zvarík,
3

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

Superdrac
źródło
2

nie PHP , ale biblioteka Java , która robi to:

Flying Saucer pobiera XML lub XHTML i stosuje do niego arkusze stylów zgodne z CSS 2.1, w celu renderowania do formatu PDF

Można go używać z PHP za pośrednictwem system()lub podobnego połączenia. Chociaż wymaga XML poprawnie sformułowanego pliku input.

Ivan Kurmanov
źródło