package com.micmiu.pdf.itext;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import com.itextpdf.text.Document;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.tool.xml.Pipeline;
import com.itextpdf.tool.xml.XMLWorker;
import com.itextpdf.tool.xml.XMLWorkerHelper;
import com.itextpdf.tool.xml.html.Tags;
import com.itextpdf.tool.xml.parser.XMLParser;
import com.itextpdf.tool.xml.pipeline.css.CSSResolver;
import com.itextpdf.tool.xml.pipeline.css.CssResolverPipeline;
import com.itextpdf.tool.xml.pipeline.end.PdfWriterPipeline;
import com.itextpdf.tool.xml.pipeline.html.HtmlPipeline;
import com.itextpdf.tool.xml.pipeline.html.HtmlPipelineContext;
public class HTML2PDFByXMLWorker {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
String rootPath = "d:/test/itext/";
String htmlFile = "demo-cn.html";
String pdfFile = "demo-cnxxx.pdf";
HTML2PDFByXMLWorker hander = new HTML2PDFByXMLWorker();
long times = System.currentTimeMillis();
System.out.println(" --------------- > start...");
hander.buildPDF(rootPath, htmlFile, pdfFile);
System.out.println(" --------------- > end. use time(ms):"
+ (System.currentTimeMillis() - times));
// FileInputStream ins = new FileInputStream(new File(rootPath +
// htmlFile));
//
// InputStreamReader isr = new InputStreamReader(ins, "utf-8");
// int b;
// while ((b = isr.read()) != -1) {
// System.out.print((char) b);
// }
// isr.close();
}
private void buildPDF(String rootPath, String htmlFile, String pdfFile) {
try {
FileInputStream ins = new FileInputStream(new File(rootPath
+ htmlFile));
InputStreamReader isr = new InputStreamReader(ins, "UTF-8");
Document document = new Document(PageSize.A4);
//document.setMargins(0, 0, 0, 0);
// pdf method
FileOutputStream outputStream = new FileOutputStream(rootPath
+ pdfFile);
PdfWriter pdfwriter = PdfWriter.getInstance(document, outputStream);
pdfwriter.setViewerPreferences(PdfWriter.HideToolbar);
document.open();
// XMLWorkerHelper.getInstance().parseXHtml(pdfwriter, document,
// isr);
HtmlPipelineContext htmlContext = new HtmlPipelineContext(null);
htmlContext.charSet(Charset.forName("UTF-8"));
htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory());
// final String dir =
// request.getSession().getServletContext().getRealPath("/");
// htmlContext.setImageProvider(new AbstractImageProvider() {
// public String getImageRootPath() {
// return dir+"/pdftemplate/"; //web realpath for images.
// }
// });
//
// htmlContext.setLinkProvider(new LinkProvider() {
// public String getLinkRoot() {
// return dir+"/pdftemplate/";
// }
//
// });
CSSResolver cssResolver = XMLWorkerHelper.getInstance()
.getDefaultCssResolver(true);
Pipeline<?> pipeline = new CssResolverPipeline(cssResolver,
new HtmlPipeline(htmlContext, new PdfWriterPipeline(
document, pdfwriter)));
XMLWorker worker = new XMLWorker(pipeline, true);
XMLParser p = new XMLParser();
p.addListener(worker);
p.parse(isr);
p.flush();
document.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}