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 :P

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?

1 Response to “HTML to PDF Converter - Hasil Pemerkosaan PPL”


  1. 1 umi fadilah April 9, 2008 at 12:18 am

    hik,, saya bangga, anak-anakku…

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

Leave a Reply




Hottest News

Mau tau cerita seru KP [Kerja Praktek] IF '05 dari sabang sampe timika? :P
TKP: Tjerita Kerdja Praktik

Jika ingin melihat tulisan2 yang lebih 'sampah' daripada 'kumpulan sampah2' ini, hehe.. Anda bisa mengunjungi tumblelog saya di http://inipunyapaw.tumblr.com

Jika ingin melihat tulisan2 yang lebih punya 'taste', Anda bisa mengunjungi biro kuliner di http://birokuliner.wordpress.com
Dijamin kenyang! Hehe.. Terima kasih :D

Disclaimer

This is my personal blog. All opinions and thoughts expressed here represent my own, not other people or organizations that I may be related or not with my opinions. All quotations, images, comments, trackbacks, and pingbacks are owned by their respective owners. I disclaim any responsibility for their contents. Jika terjadi kesamaan nama, tokoh, alamat, dll. hanyalah kebetulan belaka, dan bukan rekayasa. Hehehe...

Archives

RSS Planet IF

  • Women and High Heels
  • One of my daydreamings
  • Nostalgia Streets of Rage
  • Kecanduan Plurk
  • Semester Baru

Blog Stats

  • 32,496 hits