Pertanyaan Konversi HTML + CSS ke PDF dengan PHP? [Tutup]


Saya memiliki dokumen HTML (bukan XHTML) yang membuat baik di Firefox 3 dan IE 7. Ini menggunakan CSS yang cukup dasar untuk memberi gaya dan membuat baik dalam HTML.

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

  • DOMPDF: itu punya masalah besar dengan tabel. Saya memfaktorkan tabel bertumpuk besar saya dan itu membantu (sebelum itu hanya memakan hingga 128M memori kemudian mati - itu batas saya pada memori di php.ini) tetapi itu membuat berantakan lengkap tabel dan tampaknya tidak mendapatkan gambar. Tabel-tabel itu hanya barang-barang dasar dengan beberapa gaya perbatasan untuk menambahkan beberapa garis di berbagai titik;
  • HTML2PDF dan HTML2PS: Saya sebenarnya lebih beruntung dengan ini. Ini membuat beberapa gambar (semua gambar adalah Google Chart URL) dan format tabel jauh lebih baik tetapi tampaknya memiliki beberapa masalah kompleksitas yang saya belum tahu dan terus mati 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 itu tidak berguna bagi saya.

Saya mencoba aplikasi Windows bernama Html2Pdf Percontohan yang benar-benar melakukan pekerjaan yang lumayan bagus tetapi saya memerlukan sesuatu yang minimal berjalan di Linux dan idealnya berjalan sesuai permintaan melalui PHP di Webserver.

Apa yang hilang, atau bagaimana cara menyelesaikan masalah ini?


1395


asal


Jawaban:


Penting: Harap dicatat bahwa jawaban ini ditulis pada tahun 2009 dan mungkin bukan solusi paling efektif saat ini di tahun 2018. Alternatif online seperti PDFShift hari ini lebih baik daripada saat itu.


Silahkan lihat PrinceXML.

Ini pasti yang terbaik HTML / CSS untuk PDF converter di luar sana, meskipun itu tidak gratis (Tapi, hei, pemrograman Anda mungkin tidak gratis juga, jadi jika Anda menghemat 10 jam kerja, Anda pulang gratis (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 PangeranXML


442



Silahkan lihat wkhtmltopdf . Ini adalah open source, berdasarkan webkit dan gratis.

Kami menulis tutorial kecil sini.

EDIT (2017):

Jika itu untuk membangun sesuatu hari ini, saya tidak akan pergi ke rute itu lagi.
Tetapi akan digunakan http://pdfkit.org/ sebagai gantinya.
Mungkin melucuti semua dependensi node-nya, untuk dijalankan di browser.


627



Setelah beberapa penyelidikan dan solusi menarik rambut umum tampaknya HTML2PDF. DOMPDF melakukan pekerjaan yang mengerikan dengan tabel, perbatasan dan bahkan tata letak yang cukup kompleks dan htmldoc tampaknya cukup kuat tetapi hampir sepenuhnya CSS-ignorant dan saya tidak ingin kembali melakukan tata letak HTML tanpa CSS hanya untuk program itu.

HTML2PDF tampak paling menjanjikan tetapi saya terus mengalami kesalahan aneh ini tentang argumen referensi null ke node_type. Saya akhirnya menemukan solusi untuk ini. Pada dasarnya, PHP 5.1.x bekerja dengan baik dengan regex menggantikan (preg_replace_ *) pada string dari berbagai ukuran. PHP 5.2.1 memperkenalkan direktif konfigurasi php.ini yang disebut pcre.backtrack_limit. Apa yang dilakukan oleh parameter config ini adalah membatasi panjang string untuk pencocokan yang dilakukan. Mengapa ini diperkenalkan, saya tidak tahu. Nilai default dipilih sebagai 100.000. Mengapa nilai yang begitu rendah? Sekali lagi, tidak tahu.

SEBUAH bug dibangkitkan 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 diam-diam gagal. Setidaknya jika kesalahan telah dinaikkan dan dicatat, Anda akan memiliki indikasi tentang apa yang terjadi, mengapa dan apa yang harus diubah untuk memperbaikinya. Tapi tidak.

Jadi saya memiliki file HTML 70k untuk berubah menjadi PDF. Ini memerlukan pengaturan php.ini berikut:

  • pcre.backtrack_limit = 2000000; # mungkin lebih dari yang saya butuhkan tapi tidak apa-apa
  • memory_limit = 1024M; # iya nih, satu gigabyte; dan
  • max_execution_time = 600; # iya nih, 10 menit.

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

Sekarang, html2pdf adalah babi sumber daya. File 70k saya membutuhkan waktu sekitar 5 menit dan setidaknya 500-600M RAM untuk membuat file PDF 35 halaman. Tidak cukup cepat (jauh) untuk pengunduhan real-time, sayangnya dan penggunaan memori menempatkan rasio penggunaan memori dalam urutan 1000-ke-1 (600M RAM untuk file 70k), yang benar-benar konyol.

Sayangnya, itulah yang terbaik yang saya miliki.


141



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

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

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

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


115



1) digunakan MPDF !

a) ekstrak di 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) terbuka 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, letakkan kode ini (dengan asumsi, ada contoh source.pdf juga):

<?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) masuk FinalFolder, dan akan ada file-file yang dikonversi (seperti banyak halaman, seperti yang dimiliki oleh PDF sumber ..)


60



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


51



saya menyarankan DocRaptor (yang menggunakan PrinceXML sebagai "mesin")


29



Hanya untuk menabrak benang, saya sudah mencoba DOMPDF dan itu bekerja dengan sempurna. Saya telah menggunakan DIV dan elemen tingkat blok lainnya untuk memposisikan semuanya, menjaganya tetap ketat pada CSS 2.1 dan itu dimainkan dengan baik.


25



Kabar baik! Tajam!!

Snappy adalah a sangat mudah open source PHP5 library, memungkinkan thumbnail, snapshot atau generasi PDF dari url atau halaman html. Dan ... itu menggunakan luar biasa berbasis webkit wkhtmltopdf

Nikmati! ^ _ ^


24



Nah jika Anda ingin menemukan XHTML + CSS yang sempurna untuk pustaka konverter PDF, lupakan saja. Ini jauh dari mungkin. Karena itu seperti menemukan browser yang sempurna (XHTML + CSS render engine). Apakah kita punya satu? IE atau FF?

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

Lihat di bawah:

HTML asli

Konversi HTML ke PDF


22



Ini sudah disebutkan, tapi saya ingin mengonfirmasi bahwa mpdf adalah html termudah, paling kuat dan gratis untuk konverter pdf di luar sana. Langit benar-benar batasnya. Anda bahkan dapat menghasilkan pdf data dinamis yang dihasilkan oleh pengguna.

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

Besar artikel yang membantu saya memulai.


19