Java Library untuk Merubah HTML ke PDF

Alfian Rahman
6 min readNov 7, 2019

--

Seperti kita ketahui HTML (file berekstensi .html) digunakan sebagai halaman web secara umum. HTML bukanlah sebuah bahasa pemrograman. HTML merupakan bahasa markup yang berisi perintah-perintah dengan format tertentu yang terstruktur untuk menampilkan tampilan tertentu. Singkatnya, HTML merupakan markup yang memberitahu Web Browser bagaimana menampilkan kata pada Web Page dan gambar dari user, juga menentukan tampilan dan struktur dari jenis font, ukuran dan warnanya.

Kemudian PDF (file berkstensi .pdf) merupakan bentuk dokumen yang menangkap seluruh elemen sebagai gambar elektronik yang memungkinkan view, navigate dan print kepada orang lain. PDF pun dapat meng embed font tertentu sehingga, hasil dokumennya akan sama dimanapun ia dilihat. PDF merupakan penyimpanan dan pendistribusi informasi yang baik hal ini karena pemrosesan rendering text sebelum graphic image dan hypertext links memnungkina dokumen yang tampil pada Web akan lebih cepat dan akurat.

Ada saatnya beberapa informasi penting dari suatu Web kita perlu konversi ke dalam bentuk lain agar memudahkan pengguna Web dalam menyimpan dan memprint informasi tersebut. Dalam Java, terdapat beragam pilihan untuk melakukan hal tersebut diantaranya :

Itext merupakan library paling umum dan terbanyak pembahasannya di internet, sehingga memudahkan implementasi bagi para developer untuk mengaplikasikan software ini.

Itext bisa digunakan secara free maupun berbayar, yang membedakan ialah -kondisi penggunaan. Itext menyediakan versi komunitas dan komersil.

Itext versi komunitas (free)

Itext (version 5 or higher )ini masih memiliki beberapa batasan copyleft (semacam batasan penyebaran selama masih dalam lingkup yang ditentukan) sesuai copyright law. Itext versi free (dari version 5 or higher ini) berada dibawah naungan AGPL ( Affero General Public License) , yang berarti :

  • You can not distribute a closed source application that is based on iText without distributing the full source code of your own application.
  • You can not use iText in a web application without making the full source code of your web application available through that web application.

Secara sederhana setiap reproduksi, translasi , adaptasi , alterasi dan penyebaran tidak diperkenankan tanpa seijin Itext Software Corp ( California, USA). Namun siapapun dapat menggunakan iText dengan gratis selama kondisi diatas terpenuhi.

Adapun Itext versi lain (version 2) dikatakan free karena masih menggunakan licensi LGPL (Lesser General Public License) )

Itext versi komersil (paid)

tersedia pilihan dalam penggunaan komersil Itext tergantung pada model lisensi yang ditujukan diantaranya :

  • Unit-based licenses

terhitung pada aplikasi yang terinstal dan berjalan dari suatu devices. kelebihan : dapat copyleft AGPL license, support tersendiri dari Itext, Itext 7 Add-Ons untuk advance typographi, pembersihan dokumen dan invoicing.

  • OEM licenses

lisensi dalam embed itext library pada aplikasi yang diperjual belikan. OEM membutuhkan update dan support selama setahun pengunaan. Kelebihan : support dari developer Itext, diskon untuk kuantitas pembelian tertentu, ganti rugi dan jaminan hukum.

  • Volume-base licenses

lisensi kapasitas sewa ini berlaku bagi perusahaan yang deploy aplikasi mereka di external server atau rented server (seperti Amazon Cloud, Azure dsb). Kelebihan : harga disesuaikan dengan volume PDF yang diproses pertahun, support dan update, satu lisensi per aplikasi , diskon untuk kuantitas tertentu, ganti rugi dan jaminan hukum tersendiri.

Gambaran umum mengenai pricing Itext ini bisa dlihat disini. Untuk alternatif selain Itext untuk membuat PDF dalam Java, kita dapat menggunakan PDFBox.

Aplikasi dikembangkan untuk .Net namun tersedia fitur Konverter library untuk Java.

Versi Java nya diperlukan diatas JRE 1.6 . Fitur yang ditawarkan nya seperti berikut : telah teruji dalam multithread environment dan high traffic website, full support Html tags, CSS dan Java Script , advance Html5 seperti CSS3, SVG dan WebFonts, akurasi render gambar dari Html, Pengolahan PDF pasca konversi, merge, split dan fille existing PDF Dokumen.

Lisensi yang tersedia terdapat dua model yakni :

Java Deployment License

dapat digunakan di single aplication dan di deploy pada single server, termasuk juga update software dan technical support hingga setahun. harga untuk Java Only (not all platform) sekitar 250 USD.

Java Company License

dapat digunakan di unlimited aplication dan di deploy pada unlimited server, termasuk juga update software dan technical support hingga setahun dan tidak ada additional cost untuk customer yang membeli aplikasi kita. harga untuk Java Only sekitar 550 USD.

berlisensi LGPLv3, merupakan open source software tools untuk merender HTML menjadi PDF dan beragam format gambar melalui eksternal proses. Bila akan digunakan dalam Java, aplikasi kita perlu untuk memangil eksternal proses ini memalui kode tertentu. Memanggil eksternal proses ini dapat dilakukan dengan ProcessBuilder melalui kode Java. Untuk lebih mudahnya silahkan cari tutorial ProcessBuilder in Java. :)

WkHtmlToPdf dapat mengkonversi baik situs maupun file html.

Apache FOP (Formatting Objects Processor) adalah bentuk print terformat oleh XSL-FO (formatting objects Extensible Stylesheet Language) dan pemformat keluaran independen. Format keluaran yang didukung ialah PDF, PS, PCL, AFP, XML (representarasi tree), Print, AWT dan PNG. Langkah yang dilakukan untuk dapat mengkonversi HTML ke PDF melalui Apache FOP ialah :

  1. Convert the HTML to XHTML
  2. Convert the XHTML document to XSL-FO (Extensible Stylesheet Language Formatting Objects) using an XSL stylesheet and an XSLT transformer
  3. Pass the XSL-FO document to a formatter to generate the target PDF document

But this software ini bekerja baik untuk simple HTML namun bila HTML nya menggunakan styling (semisal border atau style table) hasil dari PDF nya akan tidak terformat sesuai HTML yang ada, hal ini dikarenakan perubahan text dokumen menjadi FO Output.

Bila kebutuhan konversi anda melibatkan banyak Stylesheet dan XML tutorial ini akan membantu mu memahami Apache FOP.

  • Jahia Project (Open Source Software)

Project ini berdasar apache PDFBox dan berikut linknya. Apache PDFBox is an open-source Java library yang mendukung pengembangan dan konversi PDF documents. Fitur yang dapat dilakukan PDFBox ini ialah

  • Extract Text − untuk mengekstrak Unicode text dari PDF files.
  • Split & Merge − untuk membagi single PDF file kedalam multiple files, and merge them back as a single file.
  • Fill Forms − untuk mengisi form data in a document.
  • Print − untuk memprint PDF file using the standard Java printing API.
  • Save as Image − untuk menyimpan PDFs as image files, such as PNG or JPEG.
  • Create PDFs − untuk membuat a new PDF file by creating Java programs and, you can also include images and fonts.
  • Signing− untuk menambahkan digital signatures to the PDF files.

Untuk konversi HTML ke bentuk PDF tidak memungkinkan, namun pada project Jahia ini mencoba mengetes konversi HTML ke PDF dengar alur :

  1. Parsing HTML paraghraf menggunakan JSOUP sebagai HTML Parser
  2. Mengiterasi DOM (Document Object Model) dan mengidentifikasi tags dan mengkonversinya
  3. Parameter hasil konversi digunakan sebagai referensi dalam membuat PDF melalui Apache PDFBox.

Namun source nya merupakan Prototype dan perlu penyesuaian lebih lanjut sebelum dapat digunakan pada project lain.

merupakan project yang berada di github.

Umumnya Flying Saucer merubah tipe XHTML menjadi PDF, Sehingga untuk dapat merubah HTML kita perlu menkonversinya menjadi XHTML terlebih dahulu menggunakan JTidy. Namun hal ini pun bisa dilewatkan dengan memanfaatkan library java.io.Outpustream dengan java.io.File sehingga Flying Saucer akan bisa merender file HTML.

Pemprosesan XHTML menjadi PDF menggunakan Flying Saucer dilakukan dengan menempatkan string XHTML kedalam perender PDF yang kemudian mengembalikan byte stream dari generated PDF, untuk dapat membuat dokumen PDF. Salah satu tutorial cukup menjelaskan cara ini, dapat dilihat disini.

Pemrosesan PDF melalui Flying Saucer perlu memerhatikan input, apabila terdapat kesalahan peletakan tag ataupun baris tertentu di HTML input Flying Saucer biasanya akan mengembalikan error sebelum proses konversi berlangsung, sehingga kita perlu memperbaiki error tersebut terlebih dahulu kemudian baru dapat melanjutkan proses.

Pertimbangan konversi HTML ke PDF dengan Flying Saucer ialah ia memiliki beberapa keterbatasan diantaranya :

  • Resource loading mengikuti tata letak urutan line kode.
  • Hasil konversi menghasilkan read-only PDF, tidak dapat diedit
  • Tidak mensupport Scripting (semisal : JavaScript)
  • Dynamic change content membutuhkan reload tidak bisa live result after change
  • Mendukung XHTML yang lebih rendari dari XML+CSS (not supported like <object>)

--

--

Alfian Rahman
Alfian Rahman

Written by Alfian Rahman

Code for Life, Life is’nt just for Code

No responses yet