HTML to PDF Converter – Hasil Pemerkosaan PPL

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?

About Prasetyo Andy W.
Mobile technology, social media, and other awesomeness enthusiast. Tech savvy. Software engineer. In love with photography and travelling.

2 Responses to HTML to PDF Converter – Hasil Pemerkosaan PPL

  1. umi fadilah says:

    hik,, saya bangga, anak-anakku…

    huahahaha..keren bgt paw, bal,, smoga program final kita de’best dah pokoknya! hehehe..

  2. Sofwan says:

    Heee…kebetulan ada yang nanya saya yg beginian

    Saya share ya…thanks

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: