Saya menerima fail HTML dan ingin menukarnya kepada fail PDF dalam ingatan. Semasa penukaran saya tidak mahu menggunakan mana-mana lokasi luaran untuk ini. Apa yang saya mahu ialah menyimpannya dalam ingatan.
Setakat ini saya telah mencuba beberapa perpustakaan Java untuk penukaran, tetapi mereka sentiasa mencipta fail sementara di suatu tempat dan kemudian membaca/menulis daripadanya. Saya tidak mahu melakukan sebarang I/O semasa penukaran.
HTMLKelas pekerja telah ditamatkan beberapa tahun yang lalu. Matlamat HTMLWorker adalah untuk menukar serpihan HTML yang kecil dan ringkas kepada objek iText. Ia tidak pernah bertujuan untuk menukar halaman HTML lengkap kepada PDF, tetapi itulah bilangan pembangun yang cuba menggunakannya. Ini mengakibatkan banyak kekecewaan kerana HTMLWorker tidak menyokong semua teg HTML, tidak menghuraikan fail CSS, dsb. Untuk mengelakkan kekecewaan ini, HTMLWorker telah dialih keluar daripada versi terkini iText.
Pada tahun 2011, iText Group mengeluarkan XML Worker sebagai alat XML kepada PDF universal, dibina pada iText 5. Pelaksanaan lalai menukar XHTML (data) dan CSS (gaya) kepada PDF, memetakan teg HTML, mis.
,
, dan
kepada objek iText 5 seperti Perenggan, Imej dan ListItem Kami tidak mengetahui sebarang pelaksanaan yang menggunakan XML Worker untuk mana-mana format XML lain, tetapi ramai pembangun menggunakan XML Worker dalam kombinasi dengan jsoup sebagai penukar HTML2PDF.
XML Worker bukanlah alat URL2PDF yang dijangkakan oleh HTML yang boleh diramal dibuat untuk tujuan menukar HTML itu kepada PDF Kes penggunaan yang biasa ialah penciptaan invois dan bukannya memprogramkan reka bentuk invois dalam Java atau C#. , pembangun memilih untuk mencipta templat HTML ringkas yang mentakrifkan struktur dokumen, dan beberapa CSS mentakrifkan gaya Mereka kemudiannya mengisi HTML dengan data, dan menggunakan XML Worker untuk mencipta invois sebagai dokumen PDF, membuang HTML asal Akan melihat dengan lebih dekat kes penggunaan ini dalam bab 4, menukar XML kepada HTML dalam ingatan menggunakan XSLT, kemudian menukar HTML itu kepada PDF menggunakan alat tambah pdfHTML.
iText 5 Apabila ia dicipta pada asalnya, ia telah direka sebagai alat untuk menjana PDF secepat mungkin, mengepam halaman ke OutputStream setelah ia selesai. Apabila iText pertama kali dikeluarkan pada tahun 2000, beberapa pilihan reka bentuk yang sangat bermakna masih muncul dalam iText 5 16 tahun kemudian. Malangnya, beberapa pilihan ini menjadikannya sangat sukar, jika tidak mustahil, untuk memanjangkan kefungsian XML Workers ke tahap kualiti yang dijangkakan oleh ramai pembangun. Jika kami benar-benar mahu mencipta penukar HTML kepada PDF yang hebat, kami perlu menulis semula iText dari awal. Kita berjaya.
Pada tahun 2016 kami mengeluarkan iText 7, versi baharu iText yang tidak lagi serasi dengan versi sebelumnya tetapi telah dicipta dengan pdfHTML dalam fikiran. Banyak kerja telah dimasukkan ke dalam rangka kerja pemapar baharu. Apabila anda membuat dokumen menggunakan iText 7, pepohon pemapar dan pemapar kecil mereka dibina. Reka letak dibuat dengan melintasi pokok ini, yang lebih sesuai untuk mengendalikan penukaran HTML kepada PDF. Objek iText telah direka bentuk semula sepenuhnya untuk memadankan teg HTML dengan lebih baik dan membolehkan penggayaan "cara CSS".
Sebagai contoh: dalam iText 5, anda mempunyai objek PdfPTable dan PdfPCell untuk mencipta jadual dan selnya. Jika anda mahu setiap sel mengandungi teks dalam fon yang berbeza daripada fon lalai, anda perlu menetapkan fon tersebut untuk kandungan setiap sel yang berasingan. Dalam iText 7, anda mempunyai objek Jadual dan Sel, 和 apabila anda menetapkan fon berbeza untuk jadual lengkap, fon ini diwarisi sebagai fon lalai untuk setiap sel. Itu merupakan satu langkah besar ke hadapan dari segi reka bentuk seni bina, terutamanya jika matlamatnya adalah untuk menukar HTML kepada PDF.
Tetapi janganlah kita mengingati masa lalu, mari kita lihat apa yang pdfHTML boleh lakukan untuk kita. Dalam bab pertama, kita akan melihat variasi berbeza kaedah convertToPdf()/ConvertToPdf(), 和 kita akan mengetahui cara penukar dikonfigurasikan.