700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > html生成pdf java_Java实现HTML代码生成PDF文档

html生成pdf java_Java实现HTML代码生成PDF文档

时间:2018-07-09 23:37:35

相关推荐

html生成pdf java_Java实现HTML代码生成PDF文档

1、IText实现html2pdf,速度快,纠错能力差,支持中文(要求HTML使用unicode编码),但中支持一种中文字体,开源。

2、Flying Sauser实现html2pdf,纠错能力差,支持多种中文字体(部分样式不能识别),开源。

3、PD4ML实现html2pdf,速度快,纠错能力强,支持多种中文字体,商业。

(一)IText

测试案例:TestIText.Java

依赖jar包:iText-2.0.8.jar、iTextAsian.jar(支持中文)

下面只是一个小的测试案例,如果项目中使用到了该组件可以参考API完成项目组中相应的功能!

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;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();

}

}

}

(二)Flying Sauser

依赖jar包:iText-2.0.8.jar、iTextAsian.jar、core-renderer.jar

默认情况下,core-renderer.jar对中文是不能进行换行的,如果想解决换行问题可以去/blog/611561下载一个jar包,该包对源代码做了稍加修改.

下面只是一个小的测试案例,如果项目中使用到了该组件可以参考API完成项目组中相应的功能!

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("htmlPUBLIC/"-//W3C//DTDXHTML1.0Transitional//EN/"/"/TR/xhtml1/DTD/xhtml1-transitional.dtd/">");

html.append("").append("

")

.append("")

.append("

body{font-family:SimSun;}

-->")

.append("")

.append("

");

html.append("

支持中文!");

html.append("");

renderer.setDocumentFromString(html.toString());

//解决图片的相对路径问题

//renderer.getSharedContext().setBaseURL("file:/F:/teste/html/");

renderer.layout();

renderer.createPDF(os);

os.close();

}

}

(三)PD4ML

依赖jar包:pd4ml_demo.jar、pd4ml__css2.jar、fonts.jar

下面只是一个小的测试案例,如果项目中使用到了该组件可以参考API完成项目组中相应的功能!

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("")

.append("

")

.append("")

.append("")

.append("

")

.append("")

.append("显示中文")

.append("")

.append("");

StringReaderstrReader=newStringReader(html.toString());

converter.generatePDF_1(pdfFile,strReader);

}

//手动构造HTML代码

publicvoidgeneratePDF_1(FileoutputPDFFile,StringReaderstrReader)throwsException{

FileOutputStreamfos=newFileOutputStream(outputPDFFile);

PD4MLpd4ml=newPD4ML();

pd4ml.setPageInsets(newInsets(20,10,10,10));

pd4ml.setHtmlWidth(950);

pd4ml.setPageSize(pd4ml.changePageOrientation(PD4Constants.A4));

pd4ml.useTTF("java:fonts",true);

pd4ml.setDefaultTTFs("KaiTi_GB2312","KaiTi_GB2312","KaiTi_GB2312");

pd4ml.enableDebugInfo();

pd4ml.render(strReader,fos);

}

//HTML代码来自于HTML文件

publicvoidgeneratePDF_2(FileoutputPDFFile,StringinputHTMLFileName)throwsException{

FileOutputStreamfos=newFileOutputStream(outputPDFFile);

PD4MLpd4ml=newPD4ML();

pd4ml.setPageInsets(newInsets(20,10,10,10));

pd4ml.setHtmlWidth(950);

pd4ml.setPageSize(pd4ml.changePageOrientation(PD4Constants.A4));

pd4ml.useTTF("java:fonts",true);

pd4ml.setDefaultTTFs("KaiTi_GB2312","KaiTi_GB2312","KaiTi_GB2312");

pd4ml.enableDebugInfo();

pd4ml.render("file:"+inputHTMLFileName,fos);

}

}

参考资料:

生成PDF文档的方案大致就这些了,希望能够给大家带来帮助!如果上面的三种方案都还不能满足项目组的需求哪就只有去买商业软件了。

转载自--/zdtwyjp/article/details/5769353#

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。