Java实现HTML代码生成PDF文档
Java实现HTML代码生成PDF文档
本文来自CSDN博客,转载请标明出处http://blog.csdn.net/zdtwyjp/archive/2010/07/27/5769353.aspx
1、IText实现html2pdf,速度快,纠错能力差,支持中文(要求HTML使用unicode编码),但中支持一种中文字体,开源。
2、Flying Sauser实现html2pdf,纠错能力差,支持多种中文字体(部分样式不能识别),开源。
3、PD4ML实现html2pdf,速度快,纠错能力强,支持多种中文字体,商业。
(一)IText
官网:http://www.itextpdf.com/测试案例:TestIText.java依赖jar包:iText-2.0.8.jar、iTextAsian.jar(支持中文)下面只是一个小的测试案例,如果项目中使用到了该组件可以参考API完成项目组中相应的功能!
view plaincopy to clipboardprint?
import java.io.FileOutputStream;
import java.io.FileReader;
import java.util.ArrayList;
import com.lowagie.text.Document;
import com.lowagie.text.Element;
import com.lowagie.text.Font;
import com.lowagie.text.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.html.simpleparser.HTMLWorker;
import com.lowagie.text.html.simpleparser.StyleSheet;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfWriter;
public class TestIText{ public static void main(String[] args) { TestIText ih = new TestIText();ih.htmlCodeComeFromFile("D:\\Test\\iText.html", "D:\\Test\\iText_1.pdf");ih.htmlCodeComeString("Hello中文", "D:\\Test\\iText_2.pdf");} public void htmlCodeComeFromFile(String filePath, String pdfPath) { Document document = new Document();try { StyleSheet st = new StyleSheet();st.loadTagStyle("body", "leading", "16,0");PdfWriter.getInstance(document, new FileOutputStream(pdfPath));document.open();ArrayList p = HTMLWorker.parseToList(new FileReader(filePath), st);for(int k = 0; k < p.size(); ++k) {document.add((Element)p.get(k));} document.close();System.out.println("文档创建成功");}catch(Exception e) { e.printStackTrace();} } public void htmlCodeComeString(String htmlCode, String pdfPath) { Document doc = new Document(PageSize.A4);try { PdfWriter.getInstance(doc, new FileOutputStream(pdfPath));doc.open();// 解决中文问题 BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);Font FontChinese = new Font(bfChinese, 12, Font.NORMAL);Paragraph t = new Paragraph(htmlCode, FontChinese);doc.add(t);doc.close();System.out.println("文档创建成功");}catch(Exception e) { e.printStackTrace();} }
}
import java.io.FileOutputStream;
import java.io.FileReader;
import java.util.ArrayList;
import com.lowagie.text.Document;
import com.lowagie.text.Element;
import com.lowagie.text.Font;
import com.lowagie.text.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.html.simpleparser.HTMLWorker;
import com.lowagie.text.html.simpleparser.StyleSheet;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfWriter;
public class TestIText{
public static void main(String[] args) {
TestIText ih = new TestIText();
ih.htmlCodeComeFromFile("D:\\Test\\iText.html", "D:\\Test\\iText_1.pdf");
ih.htmlCodeComeString("Hello中文", "D:\\Test\\iText_2.pdf");
}
public void htmlCodeComeFromFile(String filePath, String pdfPath) {
Document document = new Document();
try {
StyleSheet st = new StyleSheet();
st.loadTagStyle("body", "leading", "16,0");
PdfWriter.getInstance(document, new FileOutputStream(pdfPath));
document.open();
ArrayList p = HTMLWorker.parseToList(new FileReader(filePath), st);
for(int k = 0; k < p.size(); ++k) {
document.add((Element)p.get(k));
}
document.close();
System.out.println("文档创建成功");
}catch(Exception e) {
e.printStackTrace();
}
}public void htmlCodeComeString(String htmlCode, String pdfPath) {
Document doc = new Document(PageSize.A4);
try {
PdfWriter.getInstance(doc, new FileOutputStream(pdfPath));
doc.open();
// 解决中文问题
BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font FontChinese = new Font(bfChinese, 12, Font.NORMAL);
Paragraph t = new Paragraph(htmlCode, FontChinese);
doc.add(t);
doc.close();
System.out.println("文档创建成功");
}catch(Exception e) {
e.printStackTrace();
}
}
}
(二)Flying Sauser
项目主页:https://xhtmlrenderer.dev.java.net/依赖jar包:iText-2.0.8.jar、iTextAsian.jar、core-renderer.jar默认情况下,core-renderer.jar对中文是不能进行换行的,如果想解决换行问题可以去http://bettereveryday.javaeye.com/blog/611561下载一个jar包,该包对源代码做了稍加修改.下面只是一个小的测试案例,如果项目中使用到了该组件可以参考API完成项目组中相应的功能!
view plaincopy to clipboardprint?
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream; import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer; import com.lowagie.text.pdf.BaseFont; public class TestFlyingSauser { public static void main(String[] args) throws Exception { demo_1(); demo_2(); } // 不支持中文 public static void demo_1() throws Exception { String inputFile = "D:/Test/flying.html"; String url = new File(inputFile).toURI().toURL().toString(); String outputFile = "D:/Test/flying.pdf"; OutputStream os = new FileOutputStream(outputFile); ITextRenderer renderer = new ITextRenderer(); renderer.setDocument(url); renderer.layout(); renderer.createPDF(os); os.close(); } // 支持中文 public static void demo_2() throws Exception { String outputFile = "D:/Test/demo_3.pdf"; OutputStream os = new FileOutputStream(outputFile); ITextRenderer renderer = new ITextRenderer(); ITextFontResolver fontResolver = renderer.getFontResolver(); fontResolver.addFont("C:/Windows/fonts/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); StringBuffer html = new StringBuffer(); // DOCTYPE 必需写否则类似于 这样的字符解析会出现错误 html.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">"); html.append("<html xmlns=\"http://www.w3.org/1999/xhtml\">").append("<head>") .append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />") .append("<mce:style type=\"text/css\"><!--
body {font-family: SimSun;}
--></mce:style><style type=\"text/css\" mce_bogus="1">body {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(); }
}
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;import com.lowagie.text.pdf.BaseFont;public class TestFlyingSauser {
public static void main(String[] args) throws Exception {
demo_1();
demo_2();
}// 不支持中文
public static void demo_1() throws Exception {
String inputFile = "D:/Test/flying.html";
String url = new File(inputFile).toURI().toURL().toString();
String outputFile = "D:/Test/flying.pdf";
OutputStream os = new FileOutputStream(outputFile);
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(url);
renderer.layout();
renderer.createPDF(os);
os.close();
}// 支持中文
public static void demo_2() throws Exception {
String outputFile = "D:/Test/demo_3.pdf";
OutputStream os = new FileOutputStream(outputFile);
ITextRenderer renderer = new ITextRenderer();
ITextFontResolver fontResolver = renderer.getFontResolver();
fontResolver.addFont("C:/Windows/fonts/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
StringBuffer html = new StringBuffer();
// DOCTYPE 必需写否则类似于 这样的字符解析会出现错误
html.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">");
html.append("<html xmlns=\"http://www.w3.org/1999/xhtml\">").append("<head>").append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />").append("<mce:style type=\"text/css\"><!--
body {font-family: SimSun;}
--></mce:style><style type=\"text/css\" mce_bogus="1">body {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();
}
}
http://bettereveryday.javaeye.com/blog/611561参考资料:http://yongboy.javaeye.com/blog/510976http://www.51itsns.com/sns/space.php?uid=4&do=blog&id=582关于Flying Sauser的一篇非常不错的文章:http://today.java.net/pub/a/today/2007/06/26/generating-pdfs-with-flying-saucer-and-itext.html
(三)PD4ML
官网下载:http://pd4ml.com/downloads.htm依赖jar包:pd4ml_demo.jar、pd4ml__css2.jar、fonts.jar下面只是一个小的测试案例,如果项目中使用到了该组件可以参考API完成项目组中相应的功能!view plaincopy to clipboardprint?
import java.awt.Insets;
import java.io.File;
import java.io.FileOutputStream;
import java.io.StringReader;
import org.zefer.pd4ml.PD4Constants;
import org.zefer.pd4ml.PD4ML;
public class Converter {
public static void main(String[] args) throws Exception {
Converter converter = new Converter();
converter.generatePDF_2(new File(“D:/Test/demo_ch_pd4ml_a.pdf”), “D:/Test/a.htm”);
File pdfFile = new File(“D:/Test/demo_ch_pd4ml.pdf”);
StringBuffer html = new StringBuffer();
html.append(““)
.append(““)
.append(“”)
.append(““)
.append(““)
.append(““)
.append(“显示中文“)
.append(“”)
.append(““);
StringReader strReader = new StringReader(html.toString());
converter.generatePDF_1(pdfFile, strReader);
}
// 手动构造HTML代码
public void generatePDF_1(File outputPDFFile, StringReader strReader) throws Exception {
FileOutputStream fos = new FileOutputStream(outputPDFFile);
PD4ML pd4ml = new PD4ML();
pd4ml.setPageInsets(new Insets(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文件
public void generatePDF_2(File outputPDFFile, String inputHTMLFileName) throws Exception { FileOutputStream fos = new FileOutputStream(outputPDFFile); PD4ML pd4ml = new PD4ML(); pd4ml.setPageInsets(new Insets(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);
}
}
import java.awt.Insets;
import java.io.File;
import java.io.FileOutputStream;
import java.io.StringReader;
import org.zefer.pd4ml.PD4Constants;
import org.zefer.pd4ml.PD4ML;
public class Converter {
public static void main(String[] args) throws Exception {
Converter converter = new Converter();
converter.generatePDF_2(new File(“D:/Test/demo_ch_pd4ml_a.pdf”), “D:/Test/a.htm”);
File pdfFile = new File(“D:/Test/demo_ch_pd4ml.pdf”);
StringBuffer html = new StringBuffer();
html.append(““)
.append(““)
.append(“”)
.append(““)
.append(““)
.append(““)
.append(“显示中文“)
.append(“”)
.append(““);
StringReader strReader = new StringReader(html.toString());
converter.generatePDF_1(pdfFile, strReader);
}
// 手动构造HTML代码
public void generatePDF_1(File outputPDFFile, StringReader strReader) throws Exception {
FileOutputStream fos = new FileOutputStream(outputPDFFile);
PD4ML pd4ml = new PD4ML();
pd4ml.setPageInsets(new Insets(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文件
public void generatePDF_2(File outputPDFFile, String inputHTMLFileName) throws Exception {
FileOutputStream fos = new FileOutputStream(outputPDFFile);
PD4ML pd4ml = new PD4ML();
pd4ml.setPageInsets(new Insets(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);
}
}
参考资料:http://www.pd4ml.com/examples.htmhttp://www.pd4ml.com/api/index.htmlhttp://pd4ml.com/reference.htm#7.1http://pd4ml.com/support/html-pdf-faq-f1/double-byte-support-t195.htmlhttp://pd4ml.com/support/pd4ml-html-css-pdf-tips-tricks-f7/ttf-embedding-t42.html
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zdtwyjp/archive/2010/07/27/5769353.aspx
Java实现HTML代码生成PDF文档相关推荐
- 【PDF】java使用Itext生成pdf文档--详解
[API接口] 一.Itext简介 API地址:javadoc/index.html:如 D:/MyJAR/原JAR包/PDF/itext-5.5.3/itextpdf-5.5.3-javadoc/i ...
- Aspose.PDF for Java系列5-转化PDF文档为Word
Aspose.PDF for Java系列5-转化PDF文档 DocFormat枚举类提供了DOCX格式的文件输出格式选项.如果你想要将PDF转化为DOCX格式,请参考本文下面的内容. PDF转化为D ...
- Java:iText生成pdf文档
依赖 <!-- pdf:start --> <dependency><groupId>com.itextpdf</groupId><artifac ...
- Java和iText导出pdf文档
一:工程截图: 二:项目运行截图: 三:源代码: Book.java package com.iText.bean;public class Book {private int bookId;// 图 ...
- java拆分_Java 拆分 PDF 文档
在办公过程中,我们有时会遇到需要将一个比较大的PDF文档拆分成多个文档的情况, 今天这篇文章就将介绍两种使用Free Spire.PDF for Java来拆分PDF文档的方法. 方法一:将一个PDF ...
- Java调用打印机打印PDF文档的两种方法
最近,由于项目需求,需要增加系统调用打印机打印PDF文档功能.以前在Asp.Net项目中做过套打,但是现在的需求直接文档打印,下面是实现代码调用打印机的两种方法. 1.Java Print Servi ...
- java 绘制pdf_Java 在PDF文档中绘制图形
本篇文档将介绍通过Java编程在PDF文档中绘制图形的方法.包括绘制矩形.椭圆形.不规则多边形.线条.弧线.曲线.扇形等等.针对方法中提供的思路,也可以自行变换图形设计思路,如菱形.梯形或者组合图形等 ...
- java使用iText生成pdf文档的对齐方式
一.前言 在企业的信息系统中,报表处理一直占比较重要的作用,本文将介绍一种生成PDF报表的Java组件--iText.通过在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超级连接显示或 ...
- java对office、pdf文档在线预览解析(融合进项目中)
最近在项目中要做一个文档的预览,在网上搜了好多demo,都可以实现其功能,但是放在自己的项目中有点复杂. 先说明本人的开发环境(win7+tomcat7+maven+svn+myeclipse),接下 ...
- Java动态数据生成PDF文档及下载
查了很多资料都没有我想要的pdf,于是根据iText基础知识(这里是看了宝爷的笔记点击打开链接)自行编辑了一个简单的表格pdf文档 运用spring.mybatis.CXF框架 SSM框架打印pdf: ...
最新文章
- python—迭代器
- 【IneliJ 】使用IneliJ IDEA 2016将Java Web项目导出为War包
- SAP CRM Fiori my task应用是如何在My Account应用里加载的
- JIRA-6.3.6安装与破解
- Java——类加载机制
- 梦幻,MySQL视图,虚实表,完整详细可收藏
- poj 2503 Trie树
- 文件与用户管理linux实验,实验03 Linux用户和权限管理
- java 中的 什么意思啊_JAVA 中的 - 是什么意思?
- 小米2系列板砖自救行动
- 3d 模型后缀 互转 和名词解释
- 入门物联网需要服务器
- mac 锁屏及锁屏快捷键设置
- 如何找到浏览器扩展的安装位置
- NLP初学-文本预处理
- 访问www.baidu.com的过程
- minidump详细介绍及其windbg的使用
- 移动端调试HTML页面-weinre
- GitHub开源:升讯威 SQLite 增强组件 Sheng.SQLite.Plus
- iOS WebCore的wak目录
热门文章
- Linux x86-64 IOMMU详解(三)——Intel IOMMU(硬件IOMMU)的功能与基本原理
- 21年,周杰伦越发孤独
- 虚拟机VMware14安装教程以及搭建openEuler-20.03-LTS-x86_64-dvd.iso系统教程(网盘中也包含了Ubuntu 16.04的.ios文件)
- 使用成捷讯软件制作简单的通信工程预算----以高速4G新建站为例
- python菜鸟教程 | 字典(Dictionary)
- bing翻译接口appID申请教程【TranslateApiException: AppId is over the quota 】
- Win7 SP1 安装python 3.8时,提示 KB2533623 update is required to continue
- 水星usb无线网卡linux驱动下载,水星USB无线网卡mw150us苹果macOS系统驱动成功
- kali使用rz sz命令
- C#编程VS开发工具安装Nupkg包