it-swarm.asia

Konversi HTML + CSS ke PDF dengan PHP?

Saya memiliki dokumen HTML (bukan XHTML) yang menjadikannya bagus di Firefox 3 dan IE 7. Ia menggunakan CSS yang cukup mendasar untuk mendesainnya dan menjadikannya bagus dalam HTML.

Saya sekarang setelah cara mengubahnya ke PDF. Saya telah mencoba:

  • DOMPDF : ia memiliki masalah besar dengan tabel. Saya memfaktorkan tabel bersarang saya yang besar dan itu membantu (sebelum itu hanya menghabiskan hingga 128 juta memori kemudian mati - itulah batas saya pada memori di php.ini) tetapi itu membuat kekacauan tabel yang lengkap dan sepertinya tidak mendapatkan gambar. Tabel hanya barang-barang dasar dengan beberapa gaya perbatasan untuk menambahkan beberapa baris di berbagai titik;
  • HTML2PDF dan HTML2PS : Saya sebenarnya lebih beruntung dengan ini. Itu membuat beberapa gambar (semua gambar adalah Google Chart URL) dan pemformatan tabel jauh lebih baik tetapi tampaknya memiliki beberapa masalah kompleksitas yang belum saya temukan dan terus sekarat dengan kesalahan node_type () yang tidak diketahui. Tidak yakin hendak kemana setelah ini; dan
  • Htmldoc : ini tampaknya berfungsi dengan baik pada HTML dasar tetapi hampir tidak memiliki dukungan untuk CSS sama sekali sehingga Anda harus melakukan semuanya dalam HTML (saya tidak menyadari itu masih 2001 di Htmldoc-land ...) jadi tidak berguna bagi saya.

Saya mencoba aplikasi Windows bernama Html2Pdf Pilot yang benar-benar melakukan pekerjaan yang lumayan tapi saya butuh sesuatu yang minimal berjalan di Linux dan idealnya berjalan on-demand melalui PHP di Webserver.

Apa yang saya lewatkan, atau bagaimana saya bisa menyelesaikan masalah ini?

1520
cletus

Penting: Harap dicatat bahwa jawaban ini ditulis pada tahun 2009 dan mungkin bukan solusi yang paling hemat biaya hari ini di tahun 2019. Alternatif online saat ini lebih baik daripada saat itu.

Berikut adalah beberapa layanan online yang dapat Anda gunakan:


Lihatlah PrinceXML .

Ini pasti HTML/CSS terbaik untuk PDF konverter di luar sana, meskipun tidak gratis (Tapi hei, pemrograman Anda mungkin tidak gratis juga, jadi jika itu menghemat 10 jam kerja, Anda bebas di rumah (karena Anda juga perlu mempertimbangkan bahwa solusi alternatif akan mengharuskan Anda untuk menyiapkan server khusus dengan perangkat lunak yang tepat)

Oh ya, apakah saya menyebutkan bahwa ini adalah solusi HTML2PDF pertama (dan mungkin hanya) yang penuh ACID2 ?

Sampel PrinceXML

512
SchizoDuckie

Lihat wkhtmltopdf . Ini adalah open source, berdasarkan webkit dan gratis.

Kami menulis tutorial kecil di sini .

EDIT (2017):

Jika itu untuk membangun sesuatu hari ini, saya tidak akan pergi ke rute itu lagi.
Tetapi akan menggunakan http://pdfkit.org/ sebagai gantinya.
Mungkin menghapus semua dependensi nodejs, untuk dijalankan di browser.

653
Mic

Setelah beberapa penyelidikan dan penarik rambut secara umum solusinya adalah HTML2PDF . DOMPDF melakukan pekerjaan yang buruk dengan tabel, perbatasan dan bahkan tata letak yang cukup kompleks dan htmldoc tampaknya cukup kuat tetapi hampir sepenuhnya CSS-dungu dan saya tidak ingin kembali melakukan tata letak HTML tanpa CSS hanya untuk program itu.

HTML2PDF tampak paling menjanjikan tetapi saya terus memiliki kesalahan aneh tentang argumen referensi nol ke node_type. Saya akhirnya menemukan solusi untuk ini. Pada dasarnya, PHP 5.1.x bekerja dengan baik dengan penggantian regex (preg_replace_ *) pada string dengan ukuran berapa pun. PHP 5.2.1 memperkenalkan arahan config php.ini bernama pcre.backtrack_limit . Apa yang dilakukan parameter konfigurasi ini adalah membatasi panjang string untuk pencocokan yang dilakukan. Mengapa ini diperkenalkan saya tidak tahu. Nilai default dipilih sebagai 100.000. Mengapa nilainya begitu rendah? Sekali lagi, tidak tahu.

Bug A muncul terhadap PHP 5.2.1 untuk ini , yang masih terbuka hampir dua tahun kemudian.

Apa yang mengerikan tentang ini adalah bahwa ketika batas terlampaui, ganti saja gagal secara diam-diam . Setidaknya jika kesalahan telah dinaikkan dan dicatat Anda akan memiliki beberapa indikasi tentang apa yang terjadi, mengapa dan apa yang harus diubah untuk memperbaikinya. Tapi tidak.

Jadi saya punya file HTML 70k untuk diubah menjadi PDF. Ini membutuhkan pengaturan php.ini berikut:

  • pcre.backtrack_limit = 2000000; # Mungkin lebih dari yang saya butuhkan tetapi tidak apa-apa
  • memory_limit = 1024M; # yes, satu gigabyte ; dan
  • max_execution_time = 600; # ya, 10 menit .

Sekarang pembaca yang cerdik mungkin memperhatikan bahwa file HTML saya lebih kecil dari 100k. Satu-satunya alasan saya dapat menebak mengapa saya menemukan masalah ini adalah html2pdf melakukan konversi ke xhtml sebagai bagian dari proses. Mungkin itu membuat saya mengambil alih (meskipun hampir 50% mengasapi tampaknya aneh). Apa pun masalahnya, hal di atas berhasil.

Sekarang, html2pdf adalah sumber daya babi. File 70k saya membutuhkan waktu sekitar 5 menit dan setidaknya 500-600M file RAM untuk membuat file 35 halaman PDF. Sayangnya, tidak cukup cepat (sejauh ini) untuk unduhan waktu nyata dan penggunaan memori menempatkan rasio penggunaan memori dalam urutan 1000-ke-1 (600M RAM untuk file 70k), yang merupakan benar-benar konyol.

Sayangnya, itulah yang terbaik yang saya hasilkan.

146
cletus

Mengapa Anda tidak mencoba mPDF versi 2.0 ? Saya menggunakannya untuk membuat dokumen PDF. Ini bekerja dengan baik.

Sementara itu mPDF berada pada versi 5.7 dan dipelihara secara aktif, berbeda dengan HTML2PS/HTML2PDF

Tetapi perlu diingat, bahwa dokumentasi itu benar-benar sulit untuk ditangani. Misalnya, lihat halaman ini: https://mpdf.github.io/ .

Tugas yang sangat mendasar di sekitar html ke pdf, dapat dilakukan dengan pustaka ini, tetapi tugas yang lebih kompleks akan membutuhkan waktu lama untuk membaca dan "memahami" dokumentasi.

120
Karthick

1) gunakan MPDF !

a) ekstrak dalam yourfolder

b) buat file.php di yourfolder dan masukkan kode tersebut:

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

c) buka file.php dari browser Anda




2) Gunakan pdfToHtml !

1) ekstrak pdftohtml.exe ke folder root Anda:

2) di dalam folder itu, di anyfile.php file, masukkan kode ini (dengan asumsi, ada juga source example.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) masukkan FinalFolder , dan akan ada file yang dikonversi (sebanyak halaman, sebagai sumber PDF punya ..)

65
T.Todua

Checkout TCPDF . Ini memiliki beberapa fungsi HTML hingga PDF yang mungkin cukup untuk apa yang Anda butuhkan. Ini juga gratis!

54
Darryl Hein

Saya sarankanDocRaptor(yang menggunakan PrinceXML sebagai "mesin")

29
Oren

Sudah disebutkan, tetapi saya hanya ingin mengkonfirmasi bahwa mpdf adalah pengubah HTML ke pdf termudah, paling kuat, dan paling gratis di luar sana. Langit benar-benar batasnya. Anda bahkan dapat menghasilkan pdf data dinamis, yang dibuat pengguna.

Misalnya, seorang klien menginginkan sistem CMS sehingga ia dapat memperbarui daftar lagu musik yang ia mainkan di klubnya. Itu tidak masalah, tetapi ia juga ingin agar pengguna dapat mengunduh .pdf dari daftar putar, sehingga pdf yang dapat diunduh ini juga harus diperbarui oleh cms. Berkat mpdf, dengan beberapa loop sederhana dan variabel yang diselingi saya bisa melakukan hal itu. Sesuatu yang saya pikir akan membawa saya berminggu-minggu benar-benar membutuhkan waktu beberapa menit.

Hebat artikel yang membantu saya memulai.

27
Starkers

Hanya untuk menabrak utas, saya sudah mencoba DOMPDF dan itu bekerja dengan sempurna. Saya telah menggunakan DIV dan elemen level block lainnya untuk memposisikan segalanya, saya menyimpannya dengan ketat CSS 2.1 dan itu dimainkan dengan sangat baik.

27
Filip Dupanović

Kabar baik! Tajam !!

Snappy adalah sangat mudah open source perpustakaan PHP5, memungkinkan thumbnail, snapshot atau PDF generasi dari url atau halaman html. Dan ... ini menggunakan excellent berbasis webkitwkhtmltopdf

Nikmati! ^ _ ^

27
Paulo Coghi

The HTML2PDF dan HTML2PS yang semula disebutkan dalam posting pembukaan berbicara tentang paket 2009 dengan tautan ini

Tapi ada yang lebih baik HTML2PDF

Ini didasarkan pada TCPDF meskipun sebagian dalam bahasa Prancis.

Anda bisa memiliki header atau footer tabel yang berulang pada halaman dan memiliki nomor halaman dan total halaman. Lihat contohnya . Saya telah menggunakannya selama lebih dari tiga tahun dan merekomendasikannya.

23
Luke Wenke

Nah jika Anda ingin menemukan XHTML + CSS ke PDF converter library yang sempurna, lupakan saja. Itu jauh dari mungkin. Karena itu seperti mencari browser yang sempurna (mesin rendering XHTML + CSS). Apakah kita punya satu? IE atau FF?

Saya sudah cukup sukses dengan DOMPDF. Masalahnya adalah bahwa Anda harus memodifikasi kode HTML + CSS Anda untuk pergi dengan cara perpustakaan dimaksudkan untuk bekerja. Selain itu, saya memiliki hasil yang cukup bagus.

Lihat di bawah:

HTML Asli

Mengonversi HTML ke PDF

23
datasn.io

Ada tutorial tentang devzone Zend tentang menghasilkan pdf dari php ( bagian 1 , bagian 2 ) tanpa pustaka eksternal. Saya tidak pernah mengimplementasikan solusi semacam ini, tetapi karena semuanya php, Anda mungkin merasa lebih fleksibel untuk mengimplementasikan dan men-debug.

19
yoavf

Coba ambil nightly terbaru dompdf build - Saya menggunakan versi yang lebih lama yang merupakan sumber daya yang mengerikan dan butuh selamanya untuk membuat pdf saya. Setelah meraih malam dari sini .

Hanya perlu beberapa detik untuk menghasilkan PDF - DAN itu sama baiknya dengan PrinceXML / Docraptor . Sepertinya mereka sudah serius mengoptimalkan dompdf kode sejak saya terakhir menggunakannya!

14
Arni J

Penyebutan Darryl Hein di atas TCPDF sepertinya ide yang bagus. Kode Nicola Asuni sangat berguna dan kuat. Satu-satunya pembunuh adalah jika Anda berencana untuk menggabungkan file PDF dengan _ yang dihasilkan PDF Anda tidak memiliki fitur-fitur tersebut. Anda harus membuat PDF dan kemudian menggabungkannya menggunakan sesuatu seperti PDFTK oleh Sid Steward (www.pdflabs.com/tools/pdftk-the-pdf-toolkit/).

14
Arachnid

Dalam hal biaya, menggunakan layanan web (API) dalam banyak kasus mungkin merupakan pendekatan yang lebih masuk akal. Plus, dengan melakukan outsourcing proses ini Anda melepaskan beban infrastruktur/backend Anda sendiri dan - asalkan Anda menggunakan layanan yang memiliki reputasi baik - memastikan kompatibilitas dengan menyesuaikan standar web, waktu kerja, waktu pemrosesan yang singkat, dan pengiriman konten yang cepat.

Saya telah melakukan penelitian pada sebagian besar layanan web saat ini di pasar, silakan temukan di bawah API yang saya rasa layak disebutkan di utas ini, dalam urutan berdasarkan rasio harga/nilai. Semua dari mereka menawarkan kelas dan paket yang sudah dibuat sebelumnya PHP.

  1. pdflayer.com - Biaya: $ - Kualitas: ☆☆☆☆
  2. docraptor.com - Biaya: $$$ - Kualitas: ☆☆☆☆☆
  3. pdfcrowd.com - Biaya: $$ - Kualitas: ☆☆☆

Kualitas:

Memiliki mesin berkualitas tinggi PrinceXML sebagai tulang punggung, DocRaptor jelas menawarkan kualitas PDF terbaik, menghasilkan dokumen PDF yang dipoles dengan baik dan dikonversi dengan baik. Namun, API pdflayer layanan menjadi cukup dekat di sini. Pdfcrowd tidak harus mencetak skor dengan kualitas, tetapi dengan kecepatan pemrosesan.

Biaya:

pdflayer.com - Seperti yang ditunjukkan di atas, opsi yang paling hemat biaya di sini adalah pdflayer.com, menawarkan paket berlangganan gratis untuk 100 PDF bulanan dan langganan premium berkisar antara $ 9,99 - $ 119,99. Harga untuk 10.000 dokumen PDF bulanan adalah $ 39,99.

docraptor.com - Menawarkan periode Uji Coba Gratis 7-Hari. Paket berlangganan premium berkisar dari $ 15- $ 2.250. Harga untuk 10.000 dokumen PDF bulanan adalah ~ $ 300,00.

pdfcrowd.com - Menawarkan 100 PDF sekali gratis. Paket berlangganan premium berkisar dari $ 9- $ 89. Harga untuk 10.000 dokumen PDF bulanan adalah ~ $ 49,00.

Saya telah menggunakan ketiganya dan teks ini seharusnya membantu siapa pun memutuskan tanpa harus membayar semuanya. Teks ini belum ditulis untuk mendukung satu produk dan saya tidak memiliki afiliasi dengan salah satu produk tersebut.

13
Frank

Jika Anda memiliki akses ke baris perintah, Anda dapat menggunakan PhantomJS untuk membuat PDF dari URL (jarak jauh atau lokal).

Ini bekerja dengan sangat baik, dan merupakan solusi gratis.

Lihatlah skrip example yang dibuat untuk masalah ini.

12
chjortlund

Pertanyaan ini sudah cukup lama, tetapi belum melihat orang yang menyebutkan CutyCapt jadi saya akan :)

CutyCapt

CutyCapt adalah utilitas baris perintah lintas platform kecil untuk menangkap rendering WebKit dari halaman web ke dalam berbagai format vektor dan bitmap, termasuk SVG, PDF, PS, PNG, JPEG, TIFF, GIF, dan BMP

11
Koen.

Saya tidak berpikir kelas php akan menjadi yang terbaik untuk membuat halaman xHtml dengan css.

Apa yang terjadi ketika aturan css baru keluar? (segera css 3.0 ...)

Cara terbaik untuk merender halaman html adalah, secara tidak disengaja, browser. Firefox 3.0 secara asli dapat 'mencetak' dalam format pdf, sementara itu mengembangkan ekstensi (cetak baris perintah) untuk menggunakannya. Di sini Anda akan menemukannya.

Bagaimanapun, masih ada banyak masalah runninr firefox just sebagai konverter pdf ...

Saat ini, saya pikir wkhtmltopdf adalah yang terbaik (yang digunakan oleh browser safari), cepat, cepat, luar biasa. Ya, opensource juga ... Cobalah

9
Strae

Mungkin Anda dapat mencoba dan menggunakan Tidy sebelum menyerahkan file ke konverter. Jika salah satu penyaji tersedak masalah HTML (seperti tag tidak tertutup), mungkin membantu.

9
PhiLho

Saya mengembangkan API publik untuk membuat file PDF dari halaman web. Ini memiliki kelas klien _ PHP Bagus yang membuatnya sangat mudah digunakan. Ia menggunakan wkhtmltopdf untuk merender PDF di cloud.

Tidak perlu sesuatu yang istimewa dalam HTML. Tidak perlu URL absolut di tautan gambar/css/js. Bekerja di localhost (mesin dev) juga.

Saat ini layanan memiliki titik akhir di 4 wilayah Azure: AS Timur, AS Barat, UE Utara, Asia Tenggara.

Cepat karena menggunakan protokol berpemilik untuk mengirim konten halaman web ke API untuk konversi ke PDF.

Ini dapat diandalkan karena semua titik akhir beban seimbang.

Akun gratis tersedia untuk pengujian atau penggunaan rendah. Detail di situs web:

https://rotativahq.com

9
Giorgio Bozio

Saya merekomendasikan TCPDF atau DOMPDF, dalam urutan itu.

8
criss_ae

Meskipun sudah ada banyak solusi yang ditawarkan, saya merekomendasikan dua yang berikut:

  1. HTM2PDF - menawarkan API untuk mengonversi HTML ke PDF dan juga memiliki PHP SDK, yang membuatnya sangat mudah diimplementasikan dalam PHP; Ini menawarkan pilihan lokasi server di Eropa, Asia dan Amerika Serikat
  2. PDFmyURL - menawarkan API yang melakukan URL dan HTML ke PDF juga, dengan fungsionalitas yang kira-kira sama seperti HTM2PDF, tetapi bekerja pada lansekap seimbang dan telah ada sedikit lebih lama

Hal yang berbeda dari kedua API ini dari semua solusi yang disebutkan sebelumnya, adalah - selain mengonversi HTML ke PDF dengan CSS dan JavaScript - ia juga menawarkan PDF manajemen hak, watermarking dan enkripsi . Oleh karena itu, ini adalah solusi menyeluruh bagi mereka yang ingin terus berlari.

Penafian: Saya bekerja untuk Kaiomi, perusahaan yang mengoperasikan kedua situs web ini.

7
user1914292

Render yang bagus tidak berarti apa-apa. Apakah ini valid?

Semua browser melakukan yang terbaik yang mereka bisa untuk hanya menunjukkan sesuatu di layar, tidak peduli seberapa buruk inputnya. Dan tentu saja mereka tidak melakukan hal yang sama. Jika Anda menginginkan rendering yang sama dengan FireFox, Anda bisa menggunakan mesin renderingnya. Ada generator pdf untuk itu. Ini adalah pekerjaan yang sangat buruk.

7

TCPDF berfungsi dengan baik, tidak ada dependensi, gratis dan terus-menerus diperbaiki bug. Ini memiliki kecepatan yang wajar jika konten HTML/CSS yang disediakan sudah diformat dengan baik. Saya biasanya menghasilkan dari 50 - 300 kB input HTML (termasuk CSS) dan mendapatkan PDF output dalam 1-3 detik dengan halaman 10 - 15 PDF.

Saya sangat merekomendasikan menggunakan rapi perpustakaan sebagai formatter cantik HTML sebelum mengirim sesuatu ke TCPDF.

5
lubosdz

Apakah konversi HTML ke PDF benar-benar perlu terjadi di sisi server menggunakan PHP?

Saya baru saja menemukan jsPDF , solusi sisi klien menggunakan HTML5/JavaScript. Kode berlisensi MIT juga ada di GitHub .

5
Oliver Schafeld

Saya sudah mencoba banyak perpustakaan berbeda untuk PHP. Semua yang terdaftar saya sudah mencoba. Menurut pendapat saya TCPDF library adalah kinerja/kegunaan kompromi terbaik. Ini sangat sederhana untuk menginstal dan menggunakan, juga kinerja yang baik dalam aplikasi menengah kecil. Jika Anda membutuhkan dokumen PDF kinerja besar dan sangat besar, gunakan Zend_PDF module, tetapi bersiaplah untuk pengkodean keras!

4
trullallero

API web

Jika ada orang yang selalu mencari hal semacam ini, ada situs web gratis yang memungkinkan Anda mengonversi kode & halaman html ke pdf. Ada juga api (sangat kecil) yang memungkinkan Anda untuk mendapatkan file pdf dari url.

Periksa di sini

3
Superdrac

bukanPHP, tetapi Java library , yang melakukan hal:

Piring Terbang mengambil XML atau XHTML dan menerapkan stylesheet yang sesuai dengan CSS 2.1, untuk membuat ke PDF

Dapat digunakan dariPHPvia system() atau panggilan serupa. Meskipun membutuhkanXMLwellness of the input.

2
Ivan Kurmanov