Konvertuoti HTML + CSS į PDF naudojant PHP?

Turiu HTML (ne XHTML) dokumentą, kuris puikiai rodo „Firefox 3“ ir „IE 7“. Jis naudoja gana paprasta CSS, kad būtų sukurtas ir pateikiamas HTML.

Dabar kreipiuosi į PDF failą. Bandžiau:

  • DOMPDF : Jis turėjo didelių problemų su lentelėmis. Aš užpildiau savo dideles įdėtas lenteles ir tai padėjo (prieš tai, kai ji tiesiog suvartojo iki 128 M atminties, ir tada jis mirė - tai mano atminties riba php.ini), tačiau ji visiškai neveikia stalų ir atrodo, kad tai nėra vaizdus. Lentelės buvo tik pagrindinės su kai kuriais sienos stiliais, kad būtų galima pridėti keletą eilučių skirtinguose taškuose;
  • HTML2PDF ir HTML2PS : man tai labai pasisekė. Jis rodė keletą vaizdų (visi vaizdai buvo „Google“ diagramos URL), o lentelės formatavimas buvo daug geresnis, bet man atrodė, kad turėjau sudėtingą problemą, apie kurią dar nesuvokiau, ir toliau miršta su nežinomomis mazgų tipo () klaidomis. Nežinote, kur eiti iš čia; ir
  • Htmldoc : atrodo, kad ji gerai veikia pagrindiniame HTML, bet beveik nepalaiko CSS, taigi jums reikia padaryti viską HTML (nesuprantu, kas 2001 m. Dar buvo HTML) ..., todėl tai yra nenaudinga man

Bandžiau „Windows“ programą, pavadintą „Html2Pdf Pilot“, kuri tikrai padarė gana padorų darbą, bet man reikia kažko, kas bent jau veikia „Linux“ ir puikiai veikia pagal paklausą per žiniatinklio serverį.

Kas man trūksta, ar kaip išspręsti šią problemą?

1475
24 дек. cletus yra nustatytas 24 d. 2008-12-24 11:14 '08 at 11:14 2008-12-24 11:14
@ 34 atsakymai
  • 1
  • 2

Svarbu: Atkreipkite dėmesį, kad šis atsakymas buvo parašytas 2009 m., Ir tai gali būti ne pats ekonomiškiausias sprendimas šiandien, 2019 m. Dabar internetinės alternatyvos yra geresnės nei tada.

Štai keletas internetinių paslaugų, kurias galite naudoti:


Pažvelkite į PrinceXML .

Tai yra geriausias HTML / CSS į PDF konverterį, nors tai nėra nemokama (tačiau hey, jūsų programavimas gali būti nemokamas, todėl, jei taupysite 10 valandų darbo, jūs esate laisvas namuose (nes taip pat turite atsižvelgti į kad alternatyvūs sprendimai reikalauja įdiegti specialų serverį su atitinkama programine įranga)

O, taip, paminėjau, kad tai pirmasis (ir turbūt vienintelis) HTML2PDF sprendimas, visiškai palaikantis ACID2 ?

PrinceXML pavyzdžiai

488
12 янв. Atsakymą pateikė SchizoDuckie sausio 12 d 2009-01-12 11:47 '09, 11:47, 2009-01-12 11:47

Žr. wkhtmltopdf . Tai yra atviro kodo, webkit ir nemokamas.

Čia parašėme šiek tiek pamokų.

EDIT (2017):

Jei šiandien būtų kažkas, ką reikia statyti, aš nebebūčiau sekęs šiuo keliu.
Tačiau vietoj to naudokite http://pdfkit.org/ .
Tikriausiai atimta iš visų „nodejs“ priklausomybių, paleiskite ją naršyklėje.

642
31 авг. atsakymas duotas Mic 31 rug. 2009-08-31 16:36 '09 at 16:36 2009-08-31 16:36

Po kai kurių tyrimų ir bendro plaukimo, sprendimas atrodo HTML2PDF . DOMPDF atliko siaubingą darbą su lentelėmis, sienomis, o netgi vidutiniškai sudėtingas išdėstymas ir htmldoc atrodo gana patikimi, bet CSS beveik visiškai ignoruojamas, ir nenoriu grįžti prie HTML be CSS tik šiai programai.

HTML2PDF atrodė perspektyviausias, bet turėjau tokią keistą klaidą dėl node_type null referencinių argumentų. Galiausiai suradau sprendimą. Iš esmės PHP 5.1.x atliko puikų darbą, pakeisdamas reguliarias išraiškas (preg_replace_ *) bet kokio dydžio stygomis. PHP 5.2.1, buvo nurodyta php.ini konfigūracijos direktyva, pavadinta pcre.backtrack_limit . Šis konfigūracijos parametras apriboja atitinkamos eilutės ilgį. Kodėl jis buvo įvestas, aš nežinau. Numatytoji vertė buvo pasirinkta kaip 100 000. Kodėl tokia maža kaina? Vėlgi, aš nežinau.

Klaida prieš PHP 5.2.1 , kuri dar tęsiasi beveik po dvejų metų.

Siaubinga yra tai, kad viršijus ribą, pakaitalas tiesiog tyliai nepavyksta . Bent jau, jei klaida buvo iškelta ir užregistruota, nurodytumėte, kas atsitiko, kodėl ir ką pakeisti, kad ją ištaisytumėte. Bet ne.

Taigi, turiu 70 kilobaitų HTML failą, kuris tampa PDF. Tam reikia šių php.ini nustatymų:

  • pcre.backtrack_limit = 2,000,000; # tikriausiai daugiau nei man reikia, bet kas gerai
  • memory_limit = 1024M; # taip, vienas gigabaitas ; ir
  • max_execution_time = 600; # taip, 10 minučių .

Dabar sumanus skaitytojas galbūt pastebėjo, kad mano HTML failas yra mažesnis nei 100k. Vienintelė priežastis, kodėl aš galiu atspėti, kodėl susidūriau su šia problema, yra ta, kad html2pdf konvertuoja į xhtml kaip proceso dalį. Gali būti, kad jis buvo išverstas (nors atrodo, kad beveik 50% paūmėja). Bet kokiu atveju, pirmiau aprašytas darbas.

Dabar html2pdf yra „hog“ išteklius. Mano 70k failas užtrunka apie 5 minutes ir ne mažiau kaip 500–600M RAM sukurti 35 puslapių PDF failą. Deja, nepakankamai greitai (deja) pakrovimui realiu laiku, o atminties panaudojimas suteikia atminties panaudojimo koeficientą maždaug nuo 1 iki 1 (600 MB RAM 70 tūkst. Failui), kuris yra visiškai juokingas.

Deja, tai yra geriausias dalykas, su kuriuo susidūriau.

144
12 янв. Atsakymas yra suteiktas klastas sausio 12 2009-01-12 06:51 '09 6:51 am 2009-01-12 06:51

Kodėl bandote mPDF 2.0 versiją ? Naudojau jį PDF dokumentui sukurti. Tai puikiai veikia.

Tuo tarpu mPDF yra versijoje 5.7 ir yra aktyviai palaikomas, skirtingai nei HTML2PS / HTML2PDF

Tačiau atminkite, kad dokumentai gali būti sunkiai tvarkomi. Pavyzdžiui, žiūrėkite šį puslapį: https://mpdf.github.io/ .

Su šia biblioteka galima atlikti labai paprastas html-pdf užduotis, tačiau sudėtingesnės užduotys užtruks šiek tiek laiko skaityti ir „suprasti“ dokumentus.

118
26 марта '10 в 14:11 2010-03-26 14:11 atsakė Karthick kovo 26 d. 10 val. 14:11 2010-03-26 14:11

1) naudoti MPDF !

a) yourfolder

b) yourfolder sukurkite yourfolder ir įklijuokite šį kodą:

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

c) atidarykite .php failą iš savo naršyklės




2) Naudokite pdfToHtml !

1) ištraukti pdftohtml.exe į šakninį aplanką:

2) šiame aplanke faile anyfile.php įdėjo šį kodą (tarkime, yra ir originalus pavyzdys .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) įveskite „ FinalFolder“ ir bus konvertuoti failai (tiek puslapių, kokių buvo originaliame PDF faile).

64
28 нояб. Atsakymą pateikė T.Todua lapkričio 28 d. 2013-11-28 17:52 '13, 17:52, 2013-11-28 17:52

„Checkout TCPDF“ . Jame yra keletas HTML funkcijų PDF rinkmenai, kuri gali būti pakankama jums reikalingam. Tai taip pat nemokama!

53
21 февр. atsakymą pateikė Darryl Hein 21 vasaris. 2009-02-21 23:50 '09, 11:50 val. 2009-02-21 23:50

Siūlau „ DocRaptor“ (kuris naudoja „ PrinceXML kaip „variklį“)

29
13 нояб. Atsakymą pateikė Oren lapkričio 13 d. 2010-11-13 03:48 '10, 3:48, 2010-11-13 03:48

Tiesiog stumti temą, aš bandžiau DOMPDF, ir jis dirbo gerai. DIV ir kitus bloko lygmens elementus naudoju, kad susitartume viską, griežtai laikydamasis CSS 2.1, ir tai puikiai grojo.

27
22 янв. Šį atsakymą Filip Dupanović pateikė sausio 22 d. 2009-01-22 02:32 '09, 2:32 am. 2009-01-22 02:32

Geros naujienos! Snappy !!

Snappy yra labai paprasta atviro kodo PHP5 biblioteka, leidžianti sukurti miniatiūras, momentinius vaizdus arba kurti PDF failus iš URL arba html puslapio. Ir ... jis naudoja puikią svetainę wkhtmltopdf

Mėgaukitės! ^ _ ^

26
21 нояб. Atsakymą pateikė Paulo Coghi 21 nov. 2011-11-21 23:23 '11 11:23 PM 2011-11-21 23:23

Tai jau buvo paminėta, bet norėčiau tik patvirtinti, kad mpdf yra paprasčiausias, galingiausias ir laisvas html į pdf konverterį. Dangus tikrai yra riba. Jūs netgi galite sukurti PDF failus su dinaminiais vartotojo duomenimis.

Pavyzdžiui, klientas norėjo turėti CMS sistemą, kad jis galėtų atnaujinti muzikos įrašų, kuriuos jis grojo savo klube, sąrašą. Tai nėra problema, tačiau jis taip pat norėjo, kad vartotojai galėtų parsisiųsti grojaraštį .pdf, todėl šis atsisiunčiamas pdf failas taip pat turėjo būti atnaujintas. Dėl mpdf, su kai kuriais paprastais kilpais ir skirtingais kintamaisiais, galėčiau tai padaryti. Ką maniau, kad per kelias savaites man teko pažvelgti tiesiog per minutę.

Puikus straipsnis, kuris padėjo man pradėti.

25
18 февр. Atsakyti Starkers 18 Vas 2013-02-18 23:50 '13, 11:50 pm 2013-02-18 23:50

Na, jei norite rasti geriausią XHTML + CSS į PDF konversijos biblioteką, pamiršite apie tai. Tai toli gražu neįmanoma. Nes tai yra kaip rasti geriausią naršyklę (XHTML + CSS atvaizdavimo variklis). Ar turime vieną? IE arba FF?

Turėjau sėkmės su DOMPDF. Faktas yra tai, kad turite pakeisti savo HTML + CSS kodą, kad galėtumėte naudoti bibliotekos veikimo būdą. Be to, turiu gerų rezultatų.

Žiūrėkite žemiau:

Originalus HTML

HTML į PDF konversiją

22
27 дек. atsakymas duodamas 27 d. 2008-12-27 09:17 '08 at 9:17 2008-12-27 09:17

HTML2PDF ir HTML2PS, kurie buvo paminėti pirmame pranešime, apie šią paketą kalbėjo apie 2009 m. Paketą

Tačiau yra geresnis HTML2PDF

Jis pagrįstas TCPDF, nors iš dalies prancūzų kalba.

Jūs galite turėti lentelės antraštes ar poraštes, kurios kartojasi puslapiuose ir kuriose yra puslapių numeriai ir bendras puslapių skaičius. Žr. Jo pavyzdžius . Aš jį naudoju daugiau nei trejus metus ir rekomenduoju.

21
07 мая '15 в 13:43 2015-05-07 13:43 atsakymą pateikė Luke Wenke gegužės 07 d., 15 val. 13.45 val. 2015-05-07 13:43

Naudodamas „PHP“, naudoju „ fpdf“ PDF failams kurti. Iki šiol tai padėjo man sukurti paprastus rezultatus.

19
atsakymas Vasario 21 d 2009-02-21 23:21 '09, 11:21 val. 2009-02-21 23:21

Yra „zend devzone“ pamoka, skirta sukurti PDF iš php ( 1 dalis, 2 dalis ) be jokių išorinių bibliotekų. Niekada neįgyvendinau tokio sprendimo, bet kadangi viskas yra php, galite rasti lankstesnę diegti ir derinti.

18
24 дек. atsakymas pateikiamas 24 d. 2008-12-24 12:46 '08, 12:46, 2008-12-24 12:46

Pabandykite užfiksuoti naujausią naktinį statybinį dompdfą - naudoju senesnę versiją, kuri buvo siaubingas „hog“ išteklius ir paliko savo PDF failą geram. Po nakties nustatymo iš čia .

PDF failo sukūrimui truko tik kelias sekundes, ir tai buvo tokia pat kaip ir XML / Docraptor spausdintuvui . Atrodo, kad jie labai optimizavo dompdf kodą, nes paskutinį kartą naudoju jį!

14
10 авг. atsakymą pateikė Arni J 10 rug. 2011-08-10 16:16 '11, 16:16, 2011-08-10 16:16

Darryl Hein aukščiau paminėjo TCPDF , tikriausiai tai puiki idėja. Nicola Asuni kodas yra gana patogus ir veiksmingas. Vienintelis žudikas yra tas, kad jei planuojate sujungti PDF failus su sukurtu PDF, tai šios funkcijos nėra. Jums reikės sukurti PDF failą ir tada sujungti jį naudodami kažką panašaus į „Syd Steward“ (www.pdflabs.com/tools/pdftk-the-pdf-toolkit/).

13
24 авг. Arachnido atsakymas 24 rug. 2010-08-24 22:01 '10 10:01 PM 2010-08-24 22:01

Kalbant apie išlaidas, daugeliu atvejų interneto paslaugų (API) naudojimas gali būti pagrįstas. Be to, užsakydami šį procesą, jūs atleisite savo infrastruktūrą / „backend“ ir, jei naudosite autoritetingą paslaugą, užtikrinsite suderinamumą su žiniatinklio standartų nustatymu, veikimo laiku, sumažinant apdorojimo laiką ir greitą turinį.

Aš tyrinėjau daugumą šiuo metu rinkoje esančių interneto paslaugų. Žemiau yra API, kurios, mano nuomone, turėtų būti paminėtos šioje temoje, pagal kainą / kainą santykį. Visi jie siūlo iš anksto sukomplektuotas PHP klases ir paketus.

Kokybė:

PrinceXML , turintis aukštos kokybės „ PrinceXML variklį, aiškiai siūlo geriausią PDF kokybę, grąžindamas labai poliruotus ir gerai konvertuotus PDF dokumentus. Tačiau pdflayer API veikia gana arti. „Pdfcrowd“ nebūtinai yra vertinama kokybe, bet su apdorojimo technologija.

Kaina:

pdflayer.com . Kaip minėta pirmiau, pats ekonomiškiausias variantas yra pdflayer.com, siūlantis visiškai nemokamą prenumeratos planą 100 mėnesio PDF rinkmenoms ir priemokų prenumerata nuo 9,99 iki 11,99 dolerių. 10 000 mėnesinių PDF dokumentų kaina yra 39,99 USD.

docraptor.com . Mes siūlome septynias dienas nemokamą bandomąjį laikotarpį. Premium tarifų planai svyruoja nuo 15 iki 2 250 JAV dolerių. Kaina už 10 000 kasdienių PDF dokumentų yra ~ 300 JAV dolerių.

pdfcrowd.com . 100 nemokamų PDF failų. Premium planai svyruoja nuo 9 iki 89 JAV dolerių. 10 000 mėnesinių PDF dokumentų kaina yra ~ $ 49.

Aš naudoju visus tris iš jų, ir šis tekstas turėtų padėti visiems nuspręsti nemokant visų. Šis tekstas nebuvo parašytas, kad būtų patvirtintas nė vienas produktas, ir aš nesusijęs su jokiais produktais.

13
11 февр. Atsakykite Frankui vasario 11 d 2016-02-11 20:51 '16 at 8:51 pm 2016-02-11 20:51

Jei turite prieigą prie komandinės eilutės, galite naudoti „ PhantomJS“, kad sukurtumėte PDFURL (nuotolinio arba vietinio).

Jis veikia labai gerai ir yra nemokamas sprendimas.

Pažvelkite į šį pavyzdinį scenarijų, pateiktą šiai tiksliai problemai.

12
08 окт. atsakymas duotas chjortlund 08 okt. 2014-10-08 17:14 '14, 17:14, 2014-10-08 17:14

Šis klausimas jau yra gana senas, bet nematė, kad kas nors paminėtų „ CutyCapt“ , todėl aš :)

CutyCapt

„CutyCapt“ yra maža įvairių platformų komandų eilutė, skirta „WebKit“ tinklalapių atvaizdavimui įvairiuose vektoriaus ir rastrinio formato formatuose, įskaitant SVG, PDF, PS, PNG, JPEG, TIFF, GIF ir BMP.

11
Atsakymą pateikė Koen. Vasario 20 d 2012-02-20 18:19 '12, 18:19, 2012-02-20 18:19

Nemanau, kad php klasė bus geriausia xHtml puslapių pateikimui naudojant „css“.

Kas atsitinka, kai atsiranda nauja CSS taisyklė? (greičiau css 3.0 ...)

Geriausias būdas pateikti html puslapį akivaizdžiai yra naršyklė. „Firefox 3.0“ iš pradžių gali spausdinti pdf formatu, todėl „Torisugary“ sukūrė išplėtimą (spausdinimą komandinėje eilutėje), kad ją būtų galima naudoti. Čia rasite.

Bet kokiu atveju, vis dar yra daug bandymų runninr firefox, kaip pdf konverteris ...

Šiuo metu manau, kad wkhtmltopdf yra geriausias (naudojamas Safari naršyklėje), greitas, greitas, siaubingas. Taip, atviro kodo ... Pažvelkite į jį

9
13 мая '09 в 0:02 2009-05-13 00:02 Atsakymą pateikė Strae , gegužės 13 d. , 09:02 , 2009-05-13 00:02

Galbūt jūs galite pabandyti naudoti Tidy prieš perkeldami failą į konverterį. Tai gali padėti, jei vienas iš atvaizduotojų suglaudins bet kurią HTML problemą (pvz., Uždarą žymę).

9
24 дек. Atsakymą pateikė PhiLho 24 d. 2008-12-24 12:16 '08, 12:16, 2008-12-24 12:16

Aš sukūriau atvirą API, skirtą kurti PDF failus iš tinklalapių. Ji turi gerą PHP kliento klasę, todėl ją lengva naudoti. Jis naudoja wkhtmltopdf, kad pateiktų PDF debesyje.

Jums nereikia nieko ypatingo apie HTML. Nuorodose „images / css / js“ nereikia absoliučių URL. Taip pat veikia „localhost“ (dev mašina).

Šiuo metu paslauga turi 4 punktus Cote d'Azur regione: JAV, JAV, JAV, Pietryčių Azijoje.

Tai greita, nes ji naudoja patentuotą protokolą, kad tinklalapio turinį nusiųstų į API, kad jis būtų konvertuojamas į PDF.

Jis yra patikimas, nes visi galiniai taškai yra subalansuoti.

Laisva paskyra skirta testavimui arba mažam naudojimui. Išsami informacija svetainėje:

https://rotativahq.com

9
22 июня '16 в 17:22 2016-06-22 17:22 atsakymą pateikė Giorgio Bozio birželio 22 d. 16 d. 17:22 . 2016-06-22 17:22

Nors daugelis sprendimų jau yra, aš rekomenduoju šiuos du:

  • HTM2PDF - siūlo API, leidžiančią konvertuoti HTML į PDF, ir taip pat turi PHP SDK, todėl labai lengva įdiegti PHP; Jame siūlomi įvairūs serveriai Europoje, Azijoje ir JAV.
  • PDFmyURL - siūlo API, kuri taip pat naudoja URL ir HTML PDF rinkmenai, su tokia pat funkcionalumu kaip ir HTM2PDF, bet veikia subalansuotu apkrovos balansu ir yra maždaug šiek tiek ilgiau

Tai, kas skiriasi nuo šių dviejų API, nuo visų anksčiau minėtų sprendimų yra ta, kad be HTML konvertavimo į PDF su CSS ir JavaScript, ji taip pat siūlo PDF teisių valdymą, vandenženklį ir šifravimą. Todėl tai yra viskas viename sprendime tiems, kurie nori patekti į žemę.

Atsakomybės apribojimas: dirbau Kaiomi, kompanijoje, kuri valdo abi šias svetaines.

7
02 июня '14 в 20:59 2014-06-02 20:59 atsakymą pateikė vartotojo1914292 02 birželio 14 d. 20:59 2014-06-02 20:59

Tikslus atvaizdavimas nieko nereiškia. Ar tai patvirtinta?

Visos naršyklės daro viską, ką gali, kad tiesiog rodytų kažką ekrane, nesvarbu, kaip blogai. Ir, žinoma, jie to nedaro. Jei norite turėti tą patį atvaizdavimą kaip „FireFox“, galite naudoti jos atvaizdavimo mechanizmą. Jam yra pdf generatoriai. Tai yra baisus darbas.

7
24 дек. Stephan Eggermont atsakymas gruodžio 24 d 2008-12-24 12:09 '08, 12:09 2008-12-24 12:09

Geriausiems rezultatams naudokite DOMPDF . Čia pateikiami nuorodų pavyzdžiai .

7
03 дек. atsakymą pateikė Rajnikant Kakadiya. 2017-12-03 04:19 '17 at 4:19 2017-12-03 04:19

Rekomenduoju TCPDF arba DOMPDF, tokia tvarka.

6
17 мая '13 в 15:38 2013-05-17 15:38 atsakymas pateikiamas criss_ae gegužės 17 d. 13 val. 2013-05-17 15:38

Ar HTML reikia PDF konversijai į serverį, naudojant PHP?

Aš tiesiog suklupau jsPDF , kliento sprendimu, kuris naudoja HTML5 / JavaScript. MIT licencijos kodas taip pat įtrauktas į „GitHub“ .

5
29 авг. atsakymas suteikiamas Oliver Schafeld 29 rug . 2013-08-29 18:06 '13, 18:06, 2013-08-29 18:06

TCPDF veikia be jokių priklausomybių, yra laisvas ir nuolat fiksuotas. Ji turi pagrįstą greitį, jei HTML / CSS turinys yra gerai suformuotas. Paprastai gaunu nuo 50 iki 300 KB HTML įvesties (įskaitant CSS) ir gaunu PDF išvestį per 1-3 sekundes su 10-15 PDF puslapių.

Prieš siunčiant TCPDF, labai rekomenduoju naudoti tvarkingą biblioteką kaip HTML HTML formatavimą.

5
08 дек. atsakymas pateikiamas „ lubosdz 08“. 2013-12-08 14:09 '13, 14:09, 2013-12-08 14:09

Štai mano požiūris naudojant phantomjs .

4
03 дек. atsakymą pateikė Simanas 03 dec. 2017-12-03 04:19 '17 at 4:19 2017-12-03 04:19

Išbandžiau daug skirtingų bibliotekų PHP. Bandžiau visus pirmiau minėtus dalykus. Mano nuomone, TCPDF biblioteka yra geriausias kompromiso našumas / tinkamumas. Tai labai paprasta įdiegti ir naudoti, taip pat geras našumas mažose laikmenose. Jei jums reikia didelio našumo ir labai didelio PDF dokumento, naudokite Zend_PDF modulį, bet būkite pasirengę koduoti!

4
22 мая '13 в 9:47 2013-05-22 09:47 atsakymas trullallero pateiktas gegužės 22 d. 13 val. 9:47 2013-05-22 09:47
  • 1
  • 2

Kiti klausimai apie žymes arba Užduoti klausimą