BUKA HTML KE PDF
RINGKASAN
Open HTML to PDF adalah pustaka Java murni untuk merender subset XML/XHTML yang terbentuk dengan baik (dan bahkan beberapa HTML5) menggunakan CSS 2.1 (dan standar yang lebih baru) untuk tata letak dan pemformatan, menghasilkan PDF atau gambar.
Gunakan perpustakaan ini untuk menghasilkan dokumen PDF yang tampak bagus. Namun perlu diketahui bahwa Anda tidak dapat menggunakan HTML5+ modern di mesin ini dan mengharapkan hasil yang bagus. Anda harus membuat dokumen HTML khusus untuk perpustakaan ini dan menggunakan fitur CSS yang diperluas seperti #31 atau #32 untuk mendapatkan hasil yang baik. Hindari float di dekat hentian halaman dan gunakan tata letak tabel.
MEMULAI
- Panduan integrasi - dapatkan artefak dan kode pakar untuk memulai.
- 1.0.10 Kotak Pasir Online - Sekarang dengan log!
- Templat untuk Openhtmltopdf - Templat berlisensi MIT yang berfungsi dengan proyek ini. Diperbarui 21-09-2021.
- Dokumen Etalase - PDF
- Wiki dokumentasi
- Panduan Penulis Templat - PDF - TIDAK DIGUNAKAN lagi - Lebih memilih wiki - Memindahkan info ke wiki
- Contoh Proyek - Generator Resume Cantik
PERBEDAAN DENGAN PIRING TERBANG
- Menggunakan PDFBOX yang terpelihara dengan baik dan bersumber terbuka (kompatibel dengan LGPL) sebagai perpustakaan PDF, bukan iText.
- Dukungan yang tepat untuk menghasilkan PDF yang dapat diakses (Bagian 508, PDF/UA, WCAG 2.0).
- Dukungan yang tepat untuk menghasilkan PDF yang sesuai standar PDF/A.
- Perender baru yang lebih cepat berarti proyek ini bisa beberapa kali lebih cepat untuk dokumen berukuran sangat besar.
- Dukungan yang lebih baik untuk transformasi CSS3.
- Pengujian regresi visual otomatis pada PDF, dengan banyak pengujian ujung ke ujung.
- Kemampuan untuk menyisipkan halaman untuk konten yang terpotong.
- Plugin bawaan untuk SVG dan MathML.
- Dukungan penggantian font.
- Dukungan terbatas untuk RTL dan dokumen dua arah.
- Sisi negatifnya, tidak ada dukungan untuk font OpenType.
- Dukungan catatan kaki.
- Lebih banyak lagi. Lihat log perubahan di bawah.
LISENSI
Buka HTML ke PDF didistribusikan di bawah LGPL. Open HTML to PDF sendiri dilisensikan di bawah GNU Lesser General Public License, versi 2.1 atau lebih baru, tersedia di http://www.gnu.org/copyleft/lesser.html. Anda dapat menggunakan Open HTML ke PDF dengan cara apa pun dan untuk tujuan apa pun yang Anda inginkan selama Anda menghormati ketentuan lisensi. Salinan lisensi LGPL disertakan sebagai lisensi-lgpl-2.1.txt atau lisensi-lgpl-3.txt di distribusi kami dan di pohon sumber kami.
Pengecualian untuk ini adalah modul pengujian pdf-a, yang dilisensikan di bawah GPL. Modul ini tidak didistribusikan ke Maven Central dan hanya untuk pengujian.
Buka HTML ke PDF menggunakan beberapa paket FOSS untuk menyelesaikan pekerjaannya. Daftarnya dapat ditemukan di grafik ketergantungan.
KREDIT
Buka HTML ke PDF didasarkan pada Piring Terbang. Penghargaan diberikan kepada kontributor proyek itu. Kode juga akan digunakan dari neoFlyingSaucer
Pertanyaan Umum
- OPEN HTML TO PDF diuji dengan OpenJDK 8, 11 dan 17 (akses awal). Ini membutuhkan setidaknya Java 8 untuk dijalankan.
- Tidak, Anda tidak dapat menggunakannya di Android.
- Anda seharusnya dapat menggunakannya di Google App Engine (lingkungan Java 8 atau lebih tinggi). Beri tahu kami pengalaman Anda.
-
Kolom yang mengalir tidak diterapkan. Diimplementasikan di RC12. - Tidak, ini bukan browser web. Secara khusus, ini tidak menjalankan javascript atau menerapkan banyak standar modern seperti tata letak fleksibel dan grid.
KASUS UJI
Kasus uji, yang gagal atau berhasil dipersilakan, harap letakkan di /openhtmltopdf-examples/src/main/resources/testcases/
dan jalankan dari /openhtmltopdf-examples/src/main/java/com/openhtmltopdf/testcases/TestcaseRunner.java
.
PERUBAHANLOG
kepala - 1.0.11-SNAPSHOT
1.0.10 (2021-September-13)
CATATAN : Setelah rilis ini, penyaji lambat yang lama akan dihapus. Mode cepat telah menjadi default (sejak 1.0.5) jadi Anda hanya perlu memeriksa kode Anda jika Anda memanggil metode useSlowMode
yang akan dihapus.
- #551 KEAMANAN Perbaiki loop yang hampir tak terbatas untuk konten yang bersarang sangat dalam dengan
page-break-inside: avoid
batasan. Terima kasih telah bertahan @swillis12 dan men-debug @syjer. - #729 KEAMANAN Tingkatkan xmlgraphics-commons (digunakan dalam rendering SVG) untuk menghindari CVE. Terima kasih @electrofLy.
- #711 Dukungan catatan kaki (beta). Lihat dokumentasi catatan kaki di wiki. Terima kasih telah meminta @a-leithner dan @slumki.
- #761 Properti CSS untuk menonaktifkan bevel pada batas untuk mencegah efek anti-aliasing yang buruk, terutama pada sel tabel. Lihat properti -fs-border-rendering di wiki. Terima kasih telah memberikan sampel @gandboy91.
- #103 Keluarkan nama kelas pengecualian dan pesan secara default untuk pesan log dengan pengecualian terkait.
- #711 (campuran) Tinju yang lebih baik untuk konten
::before
dan ::after
. Sekarang seharusnya dapat menentukan batas di sekitar konten semu dengan benar. - #738 Dukungan untuk elemen tambahan dalam PDF/UA termasuk seni, bagian, sekte, bagian, keterangan dan blockquote. Terima kasih @AndreasJacobsen.
- #736 Contoh baru penggunaan mutator dom untuk mengimplementasikan konten yang tidak didukung seperti atribut tag font. Terima kasih telah meminta @ mgabhishek06kodur.
- #707 Perbaiki regresi ketika dokumen PDF/UA yang juga tidak sesuai dengan PDF/A tidak memiliki metadata Dublin Core. Terima kasih @mgm-rwagner, @syjer.
- #732 Izinkan elemen
table
diposisikan. Terima kasih @fcorneli. - #727 Izinkan penggunaan nomor halaman awal untuk penghitung
page
dan pages
. Terima kasih untuk PR @fanthos.
1.0.9 (2021-Juni-18)
RELEASE KEAMANAN : Rilis ini dimajukan karena rilis keamanan dari dependensi PDFBOX dan Batik.
- #722 Tingkatkan PDFBOX (ke 2.0.24) - hindari CVE di versi sebelumnya dan PDFBoxGraphics2D. Terima kasih banyak @rototor.
- #678 Tingkatkan Versi Batik ke 1.14 (CVE-2020-11987) - Sekali lagi sangat disarankan untuk menghindari SVG dan XML yang tidak tepercaya. Terima kasih @rototor.
- #716 Ganti panggilan
println
jahat dengan panggilan log. Terima kasih @syjer untuk PR, @tfo untuk pelaporan. - #708 Izinkan properti SVG CSS
shape-rendering
. Terima kasih @syjer untuk PR, @RAlfoeldi untuk pelaporan. - #703 Hapus panggilan ke panggilan metode yang tidak digunakan lagi di perpustakaan standar JRE. Dapat mengubah kelas pembaca XML. Diimplementasikan oleh @danfickle.
- #702 Tetapkan batas waktu untuk pengendali HTTP/HTTPS default. Terima kasih telah melaporkan @gengzi.
- 162228 Masukkan tautan ke gambar raster dalam SVG melalui pemecah URL.
- #694 Perbaiki ukuran kertas B3 yang salah. Terima kasih @lfintalan telah melaporkan dengan nomor baris!
- ab48fd Jangan mencatat font yang hilang lebih dari satu kali.
CATATAN: CVE PDFBOX berkaitan dengan pemuatan PDF yang tidak tepercaya di PDFBOX dan oleh karena itu proyek ini tidak terpengaruh secara langsung. Namun, bukanlah ide yang baik untuk memiliki CVE di jalur kelas Anda.
1.0.8 (22-Maret-2021)
PEMBEBASAN KEAMANAN
- #675 Perbarui PDFBOX ke 2.0.23 untuk menghindari CVE. Terima kasih telah melaporkan @Samuel3.
CATATAN: CVE ini berkaitan dengan pemuatan PDF yang tidak tepercaya di PDFBOX sehingga proyek ini tidak terpengaruh secara langsung. Namun, bukanlah ide yang baik untuk memiliki CVE di jalur kelas Anda.
1.0.7 (2021-Maret-19)
- #650 Dukungan untuk beberapa gambar latar belakang pada satu elemen. Terima kasih telah meminta @baedorf.
- #669 Mendukung font cadangan. Terima kasih telah meminta @asu2 dan membantu @draco1023.
- #640 Terapkan penyematan file melalui atribut unduh pada tautan. Terima kasih atas PR asli @syjer dan atas permintaan @lindamarieb dan @vader.
- #666 API untuk mendapatkan posisi y paling bawah dari konten yang dirender agar dapat memposisikan konten lanjutan dengan alat lain. Terima kasih telah meninjau secara ekstensif PR @stechio dan atas permintaan dari @DSW-AK.
- #664 Peningkatan dukungan untuk standar PDF/A dan PDF/UA. Terima kasih untuk PR @qligier.
- #653 Perbaikan untuk elemen blok sebaris dengan indeks-z atau transformasi dihasilkan dua kali. Terima kasih telah melaporkan @hannes123bsi.
- #655 Tata letak daftar terurut yang benar dalam arah RTL. Terima kasih untuk PR @johnnyaug.
- #658 Implementasikan fungsi
target-text
untuk properti content
. Terima kasih untuk PR @BenjaminVega. - #647 Perbaiki kondisi balapan dalam menyiapkan logger di lingkungan multi-thread. Terima kasih untuk PR @syjer.
- #638 Kemampuan untuk memasang kontrol sumber daya eksternal berdasarkan jenis sumber daya dan url. Terima kasih untuk PR asli @syjer.
- #628 Gunakan metode penyematan gambar yang disempurnakan dari PDF-BOX. Terima kasih untuk PR @rototor dan pekerjaan Anda dalam PDF-BOX yang mengimplementasikan ini.
- #627 Perbaiki regresi di mana gaya font null menyebabkan NPE. Terima kasih untuk PR @rototor.
- #338 Implementasikan grup tombol radio hanya-baca. Terima kasih telah menyelidiki, melaporkan, dan kesabaran @ThoSchCon, @aleks-shbln, @dmitry-weirdo, @syjer, dan @paulito-bandito.
1.0.6 (2020-Desember-22)
PENTING: #615 Ini adalah rilis perbaikan bug untuk masalah loop tak berujung saat menggunakan break-word dengan elemen mengambang dengan margin atas/bawah.
- #624 Perbarui PDFBOX ke 2.0.22 dan pdfbox-graphics2d ke 0.30. Terima kasih @rototor.
- #467 Cegah kemungkinan loop impor CSS.
- #621 Berikan spasi pada data uris. Terima kasih @syjer.
1.0.5 (2020-November-30)
KEAMANAN: #609 Memperbarui penyaji Apache Batik SVG ke versi terbaru untuk menghindari masalah keamanan. Jika Anda menggunakan proyek ini untuk merender SVG yang tidak tepercaya (tidak disarankan), Anda harus segera memperbaruinya. Terima kasih banyak @halvorbmundal.
PENTING: Perender cepat sekarang menjadi default dalam persiapan menghapus perender lambat yang lama. Untuk menggunakan perender lambat untuk sementara, Anda dapat memanggil metode yang sudah tidak digunakan lagi builder.useSlowMode()
(hanya keluaran PDF).
PENTING: #543 Versi ini tetap di PDFBOX versi 2.0.20 karena ada bug dengan spasi yang tidak dapat terputus di versi 2.0.21. Harap pastikan versi 2.0.21 tidak ada di classpath Anda. Bug ini telah diperbaiki di 2.0.22 mendatang.
- #544 Kode untuk membuat situs web untuk templat PDF siap pakai dalam format thymeleaf dan XHTML mentah. Kunjungi situs web templat untuk melihat pratinjau templat.
- #533 Plugin kode batang. PR yang sangat berguna disediakan oleh @syjer. Dokumen plugin barcode.
- #521 Pindahkan keluaran gambar Java2D ke penyaji cepat dan perbaikan umum. Dokumen keluaran gambar Java2D.
- 9ffd0e #568 Filter karakter bermasalah yang terlihat di beberapa font tetapi tidak boleh berupa tanda hubung lunak. Terima kasih @StephanSchrader.
- #587 Perbaikan untuk spasi putih: nowrap terpotong alih-alih membungkus. Terima kasih @vipcxj akhirnya diperbaiki melalui PR.
- #577 Tambahkan plugin laci PDF latar depan (berguna terutama untuk tanda air). Terima kasih @rototor untuk PR dan @ sillen102 untuk ketekunannya.
- #566 Ganti nama argumen
baseUri
menjadi baseDocumentUri
dan tingkatkan javadoc untuk menghindari kebingungan. Terima kasih telah melaporkan @NehalDamania. - 801780 Perbarui ketergantungan pengujian junit ke 4.13.1 untuk menghindari peringatan pemindai keamanan (masalah keamanan spesifik tidak memengaruhi perpustakaan ini).
- #553 Perbaikan untuk ContentLimitContainer yang menyebabkan NPE ketika margin negatif digunakan. Terima kasih telah melaporkan @adilxoxo.
- #552 Optimalkan pemformat log untuk logging Juli. Terima kasih atas PR @syjer yang mengesankan.
- #542 Tingkatkan penempatan dekorasi daftar. Terima kasih untuk PR @syjer dan pelaporan @mndzielski.
- #458 Perbaikan untuk dekorasi daftar yang dikeluarkan (dipotong) di area margin halaman.
- #525 Hapus skema/DTD yang tidak digunakan. Mengurangi ukuran toples secara signifikan. Terima kasih untuk PR @syjer.
- #592 Izinkan nilai satuan (px, cm, em, dll) dalam atribut lebar/tinggi gambar SVG yang ditautkan. Terima kasih @DanielWulfert.
- #594 #458 Perbaikan untuk konten berulang dan kerusakan PDF/UA. Terima kasih @ThomHurks, @fungc.
- #599 Perbaiki RuntimeException yang terjadi di InlineText.setSubstring. Terima kasih @LAlves91.
- #605 Perbaikan agar pembenaran berfungsi dengan pasangan pengganti. Terima kasih @EmanuelCozariz.
- #601 Pindahkan CI ke tindakan Github. Terima kasih @syjer.
- #597 Generalisasikan dukungan data uri. Terima kasih @syjer, @Leostat86.
- #613 Izinkan penambahan font untuk SVG, MathML sebagai file alih-alih aliran input untuk menghindari bug JDK. Terima kasih @syjer, @sureshkumar-ramalingam, @olayinkasf.
1.0.4 (25-Juli-2020)
- b88538 Perbaikan untuk loop tanpa akhir saat menggunakan
word-wrap: break-word
. Terima kasih telah melaporkan, menguji, dan menyelidiki @swarl. Terima kasih telah menguji dan men-debug @rototor dan @syjer. - #492 Banyak pengujian algoritma pemecah garis untuk menghindari perulangan tanpa akhir di masa depan. Oleh @danfickle.
- #515 Teruskan gaya CSS dokumen yang diterapkan pada elemen SVG ke implementasi SVG. Terima kasih telah meminta dan berkontribusi @amckain92.
- #514 FIX: Posisikan kotak dengan benar saat membenarkan garis rtl. Terima kasih telah melaporkan dan menguji @ lzhy1101.
- #512 #507 #502 Membersihkan kode termasuk menghapus kode yang tidak digunakan, kode generik, dll. Terima kasih untuk PR @syjer.
- #489 Perombakan logging secara ekstensif termasuk konsumen diagnostik per proses. Terima kasih banyak @syjer, banyak pekerjaan di PR ini. Lihat halaman logging di wiki untuk info lebih lanjut.
- #501 Tingkatkan PDFBOX ke 2.0.20 dan PDFBox-Graphics2D ke 0.26. Terima kasih untuk PR @rototor.
- #490 Perbaikan untuk NPE ketika decoding url data gambar gagal. Terima kasih untuk PR @syjer dan pelaporan @AlexisCothenet.
- #516 Tambahkan metadata bundel OSGI ke MANIFEST.MFs. Terima kasih telah meminta dan menyelidiki @zspitzer.
1.0.3 (2020-Mei-25)
- PENTING : Rilis ini berisi perbaikan untuk dua bug yang dapat mengakibatkan loop/penolakan layanan tanpa akhir saat menggunakan
word-wrap: break-word
. Jika Anda menggunakan fitur ini, harap segera tingkatkan versinya. - #483 Perbaikan untuk bug loop tak berujung dengan
word-wrap: break-word
dan soft hyphens. Terima kasih @rototor untuk PR, @syjer untuk analisisnya, dan @swarl untuk pelaporannya. - #466 Perbaikan untuk bug loop tak berujung dengan
word-wrap: break-word
dan kotak lebar nol. Terima kasih @syjer untuk analisisnya dan @AlexisCothenet untuk pelaporannya. - #486 Plugin SVG sekarang dapat menyediakan daftar protokol yang diizinkan untuk sumber daya eksternal dan penyelesai uri/penanganan aliran apa pun yang dikonfigurasi akan digunakan. Terima kasih @syjer untuk PR dan @ieugen untuk pelaporan.
- #480 Perbaikan untuk bentuk tautan yang dikembalikan dari laci objek khusus. Terima kasih @rototor untuk PR dan @hbergmey untuk pelaporan.
- #485 Terapkan dukungan untuk data uris SVG. Terima kasih @syjer untuk PR dan @adrianrodfer untuk pelaporan.
- #470 Izinkan
mailto:
tautan atau tautan valid lainnya. Terima kasih @syjer untuk PR dan @mndzielski untuk pelaporan. - #464 Hormati properti CSS
direction
. Terima kasih @AnanasPizza telah melaporkan. - #460 Ubah kelas pengecualian yang dilempar ke
IOException
yang lebih spesifik. Terima kasih untuk PR @leonorader. - #459 Implementasikan unit
rem
CSS. Terima kasih kepada @leonorader untuk pelaporannya. - #211 Gambar sekarang dapat digunakan di properti
content
CSS. Terima kasih telah meminta @Kuhlware. - #445 Perbaikan karena tidak mengambil nilai atribut dalam dokumen yang dikonversi Jsoup. Terima kasih telah melaporkan @testinfected.
- #450 Hanya keluaran Java2D: Kemampuan untuk menambahkan font melalui kode. Font lingkungan juga tidak lagi digunakan secara default. Untuk menggunakan font lingkungan:
builder.useEnvironmentFonts(true)
.
1.0.2 (2020-Februari-25)
- KEAMANAN Menghapus adaptor Log4J 1.x seperti pada CVE-2019-17571 tanpa versi terbaru yang tersedia.
- #448 Terapkan dukungan
linear-gradient
untuk properti background-image
. Oleh @danfickle. Diminta oleh @ rja907. - #429 Perombakan besar-besaran pada
word-wrap: break-word
. Sekarang sebuah kata tidak akan terputus kecuali jika kata itu terlalu besar untuk sebuah baris saja. Oleh @danfickle. Terima kasih telah melaporkan dan menguji @mndzielski. - #433 Jangan membenarkan baris yang diakhiri dengan tag
<br/>
. Terima kasih telah melaporkan @fcorneli. - #440 Hapus spasi tambahan untuk teks rata kanan guna menghindari tampilan bergerigi. Terima kasih telah melaporkan @AnanasPizza.
- #446 Cari atribut lang pada elemen leluhur saat menggunakan pemilih
lang()
. Terima kasih telah melaporkan dan melacak bug @func. - #430 Gunakan jalur relatif untuk melisensikan dalam toples sumber, bukan jalur absolut. Terima kasih telah melaporkan @gabro dan memperbaikinya melalui PR @syjer.
- #417 Pertahankan rasio aspek gambar dengan properti lebar/tinggi serta properti lebar/tinggi min/maks. Terima kasih atas pelaporan dan dasar untuk perbaikan @swarl.
- #423 Izinkan beberapa sumber font ditentukan dengan tag
format
. Hanya gunakan format(truetype)
. Terima kasih telah meminta @MichaelZaleskovsky dan dasar implementasi @syjer. - #415 Hindari pengecualian pemeran kelas jika pengguna mencoba mengapungkan sel tabel. Terima kasih telah melaporkan @dmartineau99 dan PR @syjer.
- #421 Hindari NPE ketika teks yang dibenarkan dicampur dengan konten yang tidak dapat dibenarkan. Terima kasih telah melaporkan @Megingjard dan PR @syjer.
- Memperbarui PDFBOX 2.0.17 ke 2.0.19.
1.0.1 (2019-November-18)
- #413 Tangani masalah formulir seperti tidak ada nama pada elemen masukan tanpa melemparkan NPE. Terima kasih @syjer untuk PR dan @mmatecki untuk pelaporan.
- #412 Tambahkan elemen level blok HTML sebagai
section
ke CSS default. Terima kasih @syjer. - #339 Hapus modul konverter JSoup ke DOM. Terima kasih @kewilson.
- 0cd098 Perbaikan untuk dukungan spasi huruf pada baris terakhir blok dengan spasi tambahan. Juga peningkatan kinerja dan refactoring. Oleh @danfickle.
- #410 Perbaikan untuk pengaturan huruf tebal yang salah pada penghitung item daftar. Terima kasih @syjer untuk perbaikan PR (dan pengujian!) dan @acieplinski untuk pelaporan.
- Wiki Pengaturan pembenaran teks yang dapat dikonfigurasi sebagai bagian dari perombakan pembenaran yang juga memungkinkan lebih banyak ruang untuk digunakan antar karakter ketika tidak ada spasi di baris. Oleh @danfickle. Komit tercantum di #403.
- #403 Dukungan tanda hubung lembut. Tanda hubung lunak kini diganti dengan tanda hubung keras bila digunakan sebagai karakter akhir baris. Terima kasih @sbrunecker.
- #408 Perbaikan untuk bookmark yang tidak berfungsi dengan parser HTML5 seperti JSoup. Terima kasih @syjer untuk menyelidiki dan memperbaiki dan @Milchreis untuk pelaporan.
- #404 Tingkatkan Batik ke 1.12 dan xmlgraphics-common ke 2.4 (keduanya digunakan dalam modul SVG) untuk menghindari CVE pada salah satu atau keduanya. Terima kasih @avoiculet.
- #396 Rendering kotak yang jauh lebih cepat menggunakan properti radius batas. Terima kasih @mndzielski.
- #400 Dukungan untuk atribut
lang
dan title
serta tag abbr
untuk PDF yang dapat diakses. Terima kasih @ Ignaciort91. - #394, #395 Tingkatkan PDFBOX ke 2.0.17 dan pdfbox-graphics2d ke 0.25. Terima kasih @cristan, @rototor.
- #384 Izinkan pengguna menyediakan pemasok PDFont. Terima kasih @DSW-PS.
- #373 Perbaiki regresi yang menyediakan lebar maksimal dan tinggi maksimal untuk gambar dengan rasio aspek tertentu. Terima kasih @rototor.
- #380 Dukungan yang jauh lebih baik untuk kolom mengalir termasuk jeda kolom eksplisit, konten mengambang, konten bersarang tingkat blok. Oleh @danfickle.
1.0.0 (23-Juli-2019)
- #372 Dukungan ukuran yang jauh lebih baik untuk elemen
img
, svg
dan math
. - #344 Gunakan PDF dalam tag
img
: <img src="some.pdf" page="1" alt="Some alt text" />
.
RILIS LAMA
Lihat CHANGELOG.md.