ava实现HTML转换PDF2011-08-1215:09:40|分类:java|举报|字号订阅1、IText实现html2pdf,速度快,纠错能力差,支持中文(要求HTML使用unicode编码),但中支持一种中文字体,开源。2、FlyingSauser实现html2pdf,纠错能力差,支持多种中文字体(部分样式不能识别),开源。3、PD4ML实现html2pdf,速度快,纠错能力强,支持多种中文字体,商业。(一)IText官网:测试案例:TestIText.java依赖jar包:iText-2.0.8.jar、iTextAsian.jar(支持中文)下面只是一个小的测试案例,如果项目中使用到了该组件可以参考API完成项目组中相应的功能!viewplaincopytoclipboardprint?importjava.io.FileOutputStream;importjava.io.FileReader;importjava.util.ArrayList;importcom.lowagie.text.Document;importcom.lowagie.text.Element;importcom.lowagie.text.Font;importcom.lowagie.text.PageSize;importcom.lowagie.text.Paragraph;importcom.lowagie.text.html.simpleparser.HTMLWorker;importcom.lowagie.text.html.simpleparser.StyleSheet;importcom.lowagie.text.pdf.BaseFont;importcom.lowagie.text.pdf.PdfWriter;publicclassTestIText{publicstaticvoidmain(String[]args){TestITextih=newTestIText();ih.htmlCodeComeFromFile(D:\\Test\\iText.html,D:\\Test\\iText_1.pdf);ih.htmlCodeComeString(Hello中文,D:\\Test\\iText_2.pdf);}publicvoidhtmlCodeComeFromFile(StringfilePath,StringpdfPath){Documentdocument=newDocument();try{StyleSheetst=newStyleSheet();st.loadTagStyle(body,leading,16,0);PdfWriter.getInstance(document,newFileOutputStream(pdfPath));document.open();ArrayListp=HTMLWorker.parseToList(newFileReader(filePath),st);for(intk=0;kp.size();++k){document.add((Element)p.get(k));}document.close();System.out.println(文档创建成功);}catch(Exceptione){e.printStackTrace();}}publicvoidhtmlCodeComeString(StringhtmlCode,StringpdfPath){Documentdoc=newDocument(PageSize.A4);try{PdfWriter.getInstance(doc,newFileOutputStream(pdfPath));doc.open();//解决中文问题BaseFontbfChinese=BaseFont.createFont(STSong-Light,UniGB-UCS2-H,BaseFont.NOT_EMBEDDED);FontFontChinese=newFont(bfChinese,12,Font.NORMAL);Paragrapht=newParagraph(htmlCode,FontChinese);doc.add(t);doc.close();System.out.println(文档创建成功);}catch(Exceptione){e.printStackTrace();}}}(二)FlyingSauser项目主页:依赖jar包:iText-2.0.8.jar、iTextAsian.jar、core-renderer.jar默认情况下,core-renderer.jar对中文是不能进行换行的,如果想解决换行问题可以去下载一个jar包,该包对源代码做了稍加修改.下面只是一个小的测试案例,如果项目中使用到了该组件可以参考API完成项目组中相应的功能!viewplaincopytoclipboardprint?importjava.io.File;importjava.io.FileOutputStream;importjava.io.OutputStream;importorg.xhtmlrenderer.pdf.ITextFontResolver;importorg.xhtmlrenderer.pdf.ITextRenderer;importcom.lowagie.text.pdf.BaseFont;publicclassTestFlyingSauser{publicstaticvoidmain(String[]args)throwsException{demo_1();demo_2();}//不支持中文publicstaticvoiddemo_1()throwsException{StringinputFile=D:/Test/flying.html;Stringurl=newFile(inputFile).toURI().toURL().toString();StringoutputFile=D:/Test/flying.pdf;OutputStreamos=newFileOutputStream(outputFile);ITextRendererrenderer=newITextRenderer();renderer.setDocument(url);renderer.layout();renderer.createPDF(os);os.close();}//支持中文publicstaticvoiddemo_2()throwsException{StringoutputFile=D:/Test/demo_3.pdf;OutputStreamos=newFileOutputStream(outputFile);ITextRendererrenderer=newITextRenderer();ITextFontResolverfontResolver=renderer.getFontResolver();fontResolver.addFont(C:/Windows/fonts/simsun.ttc,BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);StringBufferhtml=newStringBuffer();//DOCTYPE必需写否则类似于这样的字符解析会出现错误html.append(!DOCTYPEhtmlPUBLIC\-//W3C//DTDXHTML1.0Transitional//EN\\);html.append(htmlxmlns=\).append(head).append(metahttp-equiv=\Content-Type\content=\text/html;charset=UTF-8\/).append(mce:styletype=\text/css\!--body{font-family:SimSun;}--/mce:stylestyletype=\text/css\mce_bogus=1body{font-family:SimSun;}/style).append(/head).append(body);html.append(div支持中文!/div);html.append(/body/html);renderer.setDocumentFromString(html.toString());//解决图片的相对路径问题//renderer.getSharedContext().setBaseURL(file:/F:/teste/html/);renderer.layout();renderer.createPDF(os);os.close();}}参考资料:://=4&do=blog&id=582关于FlyingSauser的一篇非常不错的文章:(三)PD4ML官网下载:依赖jar包:pd4ml_demo.jar、pd4ml__css2.jar、fonts.jar下面只是一个小的测试案例,如果项目中使用到了该组件可以参考API完成项目组中相应的功能!viewplaincopytoclipboardprint?importjava.awt.Insets;importjava.io.File;importjava.io.FileOutputStream;importjava.io.StringReader;importorg.zefer.pd4ml.PD4Constants;importorg.zefer.pd4ml.PD4ML;publicclassConverter{publicstaticvoidmain(String[]args)throwsException{Converterconverter=newConverter();converter.generatePDF_2(newFile(D:/Test/demo_ch_pd4ml_a.pdf),D:/Test/a.htm);FilepdfFile=newFile(D:/Test/demo_ch_pd4ml.pdf);StringBufferhtml=newStringBuffer();html.append(html).append(head).append(metahttp-equiv=\Content-Type\content=\text/html;charset=UTF-8\/).append(/head).append(body).append(fontface=\KaiTi_GB2312\).append(fontcolor='red'size=22显示中文/font).append(/font).append(/body