Hwe.. emangnya iqbal doang yang bisa ngepost serial hasil pemekorsaan PPL. Gw juga aah..
Kali ini gw mengeksplor bagian converter HTML to PDF. Jadi aplikasi OSAMA yang kami buat, ada semacam fitur yang memperbolehkan sang user menyimpan halaman web ke dalam bentuk pdf. Gw coba googling untuk mencari library atau semacamnya yang berguna. Lalu jawaban yang terbaik dari mbah google adalah menggunakan PD4ML, sebuah library yang salah satu fungsi utamanya adalah dapat me-render halaman web ke dalam PDF dalam bahasa java. Selain itu gw juga menemukan iText yang merupakan sebuah library untuk men-generate PDF dengan bahasa java.
Gw coba eksplor keduanya, tapi awalnya gw coba utak atik iText karena open source, lain dengan PD4ML yang bayar, namun ada juga versi gratisannya. Ternyata iText gw rasa terlalu “dasar” jika dibandingkan dengan kebutuhan gw, yaitu halaman web to PDF converter. Walhasil gw “menyerah” dan mencoba PD4ML yang “siap saji”, dengan menggunakan versi gratisannya [FYI, kalo dari FAQs-nya, PD4ML gratis cuman beda dikit sama yang bayar. Pada PD4ML yang gratis, bakal ada semacam watermark bahwa PDF itu generated pake PD4ML. Kalo ga salah itu aja perbedaannya]
Cara pemakaian PD4ML ini gampang-gampang sulit. The very first thing to do is: Download Librarynya [bisa bentuk .jar nya ato .zip] Pertama bisa pake taglib PD4ML dan dimasukkan ke file JSP:
<%@ taglib uri="/WEB-INF/tlds/pd4ml.tld" prefix="pd4ml" %><%@page
contentType="text/html; charset=ISO8859_1"%><pd4ml:transform
screenWidth="400"
pageFormat="A5"
pageOrientation="landscape"
pageInsets="100,100,100,100,points"
enableImageSplit="false"> <!-- Halaman akan di-render ke PDF dari sini, sebelum tag <pd4ml:transform> ga boleh ada space kosong, jadi ditempel ke tag sebelumnya <- PD4ML nya bilang gitu-->
<html>
<head>
<title>pd4ml test</title>
<style type="text/css"> <!-- PD4ML bisa render css filenya juga, jadi insya Allah tampilan PDF nya sama kayak tampilan HTML di browser -->
body {
color: red;
background-color: #FFFFFF;
font-family: Tahoma, "Sans-Serif";
font-size: 10pt;
}
</style>
</head>
<body>
<p>Hello World!</p>
<pd4ml:page.break/> <!-- Nanti di pdf akan ada page break di sini -->
<table width="100%" style="background-color: #dddddd; color: #000000">
<tr>
<td>
Ini di tabel lho...
</td>
</tr>
</table>
</body>
</html>
</pd4ml:transform> <!-- Halaman akan di-render ke PDF sampai sini -->
Lalu bisa juga via java class, dengan menginclude PD4ML_demo.jar ke dalam project yang kita buat [yap, gw punya versi demo, gratisan euy! hehe]. Tapi yang java class ini gw blum nyoba, karna concern ke yang jsp style, hoho.
import java.awt.Dimension;
import java.awt.Insets;
import java.io.File;
import org.zefer.pd4ml.PD4Constants;
import org.zefer.pd4ml.PD4ML;
import org.zefer.pd4ml.PD4PageMark;
public class PdfGenerator {
public static void main(String[] args) throws Exception {
PdfGenerator converter = new PdfGenerator();
String htmlFileName = args[0];
File pdfFile = new File(args[1]);
converter.generatePDF(htmlFileName, pdfFile, PD4Constants.A4,
args.length > 2 ? args[2] : null, args.length > 3 ? args[3] : null );
System.out.println("done.");
}
private void generatePDF(String inputHTMLFileName, File outputPDFFile, Dimension format, String fontsDir, String headerBody)
throws Exception {
java.io.FileOutputStream fos = new java.io.FileOutputStream(outputPDFFile);
PD4ML pd4ml = new PD4ML();
pd4ml.setPageInsets(new Insets(20, 10, 10, 10));
pd4ml.setHtmlWidth(950);
pd4ml.setPageSize(pd4ml.changePageOrientation(format)); // landscape page orientation
if ( fontsDir != null && fontsDir.length() > 0 ) {
pd4ml.useTTF( fontsDir, true );
}
if ( headerBody != null && headerBody.length() > 0 ) {
PD4PageMark header = new PD4PageMark();
header.setAreaHeight( -1 ); // autocompute
header.setHtmlTemplate( headerBody ); // autocompute
pd4ml.setPageHeader( header );
}
pd4ml.enableDebugInfo();
pd4ml.render("file:" + inputHTMLFileName, fos);
}
}
Nah, tapi karena gw menemukan sedikit keanehan pada generate dengan taglib di file jsp, sementara ini gw pake cara menginvoke batch file dari java class untuk generate pdf nya
Ini source java untuk invoke .bat, simpelnya seperti ini
import java.io.*;
public class CallJavaTest {
public static void main(String[] args) {
try {
Process p = Runtime.getRuntime().exec("run.bat");
} catch (Exception e) {
e.printStackTrace();
}
}
}
lalu java class ini menginvoke run.bat, yang isinya
java -Xmx512m -cp pd4ml_demo.jar;. Converter <nama file html input> <nama file pdf keluaran> “” “”
Dengan asumsi pada direktori file itu terdapat file pd4ml_demo.jar [atau pd4ml.jar untuk versi berbayarnya :P]
Nah, gw masih ada kendala dengan pemakaian taglib lalu dari dengan membuat <pd4ml:transform> </pd4ml:transform>, karena ntah mengapa taglib yang dituju ga bisa me-load tag transform, padahal di contoh pemakaiannya bisa. hihi.. ada yang bisa bantu?
hik,, saya bangga, anak-anakku…
huahahaha..keren bgt paw, bal,, smoga program final kita de’best dah pokoknya! hehehe..