java html 导出 pdf文件,Java HTML导出PDF (一)
转自:http://blog..net/zdtwyjp/article/details/5769353
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完成项目组中相应的功能!
[c-sharp] view
plaincopy
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;
publicclassTestIText{
publicstaticvoidmain(String[] args) {
TestIText ih = newTestIText();
ih.htmlCodeComeFromFile("D://Test//iText.html","D://Test//iText_1.pdf");
ih.htmlCodeComeString("Hello中文","D://Test//iText_2.pdf");
}
publicvoidhtmlCodeComeFromFile(String filePath, String pdfPath) {
Document document = newDocument();
try{
StyleSheet st = newStyleSheet();
st.loadTagStyle("body","leading","16,0");
PdfWriter.getInstance(document, newFileOutputStream(pdfPath));
document.open();
ArrayList p = HTMLWorker.parseToList(newFileReader(filePath), st);
for(intk = 0; k
document.add((Element)p.get(k));
}
document.close();
System.out.println("文档创建成功");
}catch(Exception e) {
e.printStackTrace();
}
}
publicvoidhtmlCodeComeString(String htmlCode, String pdfPath) {
Document doc = newDocument(PageSize.A4);
try{
PdfWriter.getInstance(doc, newFileOutputStream(pdfPath));
doc.open();
// 解决中文问题
BaseFont bfChinese = BaseFont.createFont("STSong-Light","UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font FontChinese = newFont(bfChinese, 12, Font.NORMAL);
Paragraph t = newParagraph(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完成项目组中相应的功能!
[c-sharp] view
plaincopy
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;
publicclassTestFlyingSauser {
publicstaticvoidmain(String[] args) throws Exception {
demo_1();
demo_2();
}
// 不支持中文
publicstaticvoiddemo_1() throws Exception {
String inputFile = "D:/Test/flying.html";
String url = newFile(inputFile).toURI().toURL().toString();
String outputFile = "D:/Test/flying.pdf";
OutputStream os = newFileOutputStream(outputFile);
ITextRenderer renderer = newITextRenderer();
renderer.setDocument(url);
renderer.layout();
renderer.createPDF(os);
os.close();
}
// 支持中文
publicstaticvoiddemo_2() throws Exception {
String outputFile = "D:/Test/demo_3.pdf";
OutputStream os = newFileOutputStream(outputFile);
ITextRenderer renderer = newITextRenderer();
ITextFontResolver fontResolver = renderer.getFontResolver();
fontResolver.addFont("C:/Windows/fonts/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
StringBuffer html = newStringBuffer();
// DOCTYPE 必需写否则类似于 这样的字符解析会出现错误
html.append("html PUBLIC /"-//W3C//DTD XHTML 1.0 Transitional//EN/" /"http://www.w3.org/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();
}
}
http://bettereveryday.javaeye.com/blog/611561
参考资料:http://yongboy.javaeye.com/blog/510976
http://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完成项目组中相应的功能!
[java] view
plaincopy
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 {
Converter converter = newConverter();
converter.generatePDF_2(newFile("D:/Test/demo_ch_pd4ml_a.pdf"),"D:/Test/a.htm");
File pdfFile = newFile("D:/Test/demo_ch_pd4ml.pdf");
StringBuffer html = newStringBuffer();
html.append("")
.append("
")
.append("")
.append("")
.append("
")
.append("")
.append("显示中文")
.append("")
.append("");
StringReader strReader = newStringReader(html.toString());
converter.generatePDF_1(pdfFile, strReader);
}
// 手动构造HTML代码
publicvoidgeneratePDF_1(File outputPDFFile, StringReader strReader)throwsException {
FileOutputStream fos = newFileOutputStream(outputPDFFile);
PD4ML pd4ml = 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(File outputPDFFile, String inputHTMLFileName)throwsException {
FileOutputStream fos = newFileOutputStream(outputPDFFile);
PD4ML pd4ml = 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);
}
}
参考资料:
http://www.pd4ml.com/examples.htm
http://www.pd4ml.com/api/index.html
http://pd4ml.com/reference.htm#7.1
http://pd4ml.com/support/html-pdf-faq-f1/double-byte-support-t195.html
http://pd4ml.com/support/pd4ml-html-css-pdf-tips-tricks-f7/ttf-embedding-t42.html
生成PDF文档的方案大致就这些了,希望能够给大家带来帮助!如果上面的三种方案都还不能满足项目组的需求哪就只有去买商业软件了。
java html 导出 pdf文件,Java HTML导出PDF (一)相关推荐
- java将多个pdf文件合并成一个pdf文件
需要下载jar:https://pan.baidu.com/s/1_wOUUAqWz_5jbfwzMP8ahg package com.skysz.framework.file;import java ...
- [PDF文件全攻略]-PDF二次开发(.NET开发 C++开发 Java PHP)
原文:http://www.cankau.cn/news/tech/2009112016.html [PDF文件全攻略]-PDF二次开发(.NET开发 C++开发 Java PHP) 2009-11- ...
- JAVA删除pdf空白页_如何编辑PDF文件,如何删除PDF文档中的空白页
时代在发展,科技在进步,我们现在日常使用的文件也发展了,以前只有Word跟TXT,现在还增加了一个PDF格式的文件,但PDF格式的文件跟Word和TXT文件不一样,Word跟TXT文件可以直接的打开编 ...
- asp.net中使用excel类导出Excel文件,并导出到web客户端中遇到的问题
asp.net中使用excel类导出Excel文件,并导出到web客户端中遇到错误: 检索Com类工厂中CLSID为{000245-0000-0000-C000-000000000046}的组件失败, ...
- pdf合到一起java_将多个PDF文件合并/转换为一个PDF
回答(16) 2 years ago 考虑到 pdfunite 是poppler的一部分,它有更高的安装机会,使用也比 pdftk 简单: pdfunite in-1.pdf in-2.pdf in- ...
- Python 实现office单个文件或整个文件夹(word,ppt,excel)转换成PDF文件,并获取PDF文件页数
Python 实现office单个文件或整个文件夹(word,ppt,excel)转换成PDF文件,并获取PDF文件页数 文件夹中获取需要转换的文件数,将其全部转换或可单独转换单个文件,并获取转成PD ...
- 网页中动态嵌入PDF文件/在线预览PDF内容
网页中动态嵌入PDF文件/在线预览PDF内容https://www.cnblogs.com/xgyy/p/6119459.html #网页中动态嵌入PDF文件/在线预览PDF内容# 摘要:在web开发 ...
- 如何编辑PDF文件,怎么修改PDF中的文字
相信大家都使用过PDF文件,那么有没有编辑过PDF文件呢,PDF文件的编辑是需要借助PDF编辑器的,PDF文件中的文字要怎么修改呢,Word文档的文字就直接编辑,而PDF文件并非这样,想知道怎么编辑吗 ...
- Py:利用pyautogui实现自动将pdf文件(需手动设定pdf总页数)自动翻页并截取另存为图片形式,或自动隔0.1秒自动截笔记本全屏保存到指定文件夹
Py:利用pyautogui实现自动将pdf文件(需手动设定pdf总页数)自动翻页并截取另存为图片形式,或自动隔0.1秒自动截笔记本全屏保存到指定文件夹 目录 实现步骤和结果 核心代码 实现步骤和结果 ...
- 电脑上怎么做pdf文件_怎么合并PDF文件?PDF合并软件哪个好?
怎么合并PDF文件?很多人现在在工作中都会使用到PDF格式的文件.在传输这些PDF文件时,如果一张一张的发送速度会很慢,也会给文件接收者造成麻烦.遇到这种情况时,我们最好将这些PDF文件先合并起来.P ...
最新文章
- 【Android 逆向】Android 进程简介 ( Android 应用启动流程 )
- centos不允许root直接登陆
- 21天舞动西浦报名失败的教训:先下手为强
- SecureCRT连接Linux的操作步骤
- 为了让开发者写MaxCompute SQL更爽,DataWorks 增强SQL 编辑器功能
- struts json序列化遇上replaceAll就出问题
- angularjs获取php数据类型,利用Angularjs从PHP读取后台数据
- Flutter进阶—质感设计之列表项
- 中国 App 出海“变形记”
- MySQL安装到mac还是linux_MySql在Linux下安装和Mac下的配置
- 复杂json解析(json里面嵌套json)
- 画质速度通吃 浅谈为游戏而生的SM3技术(Dx9的一些技术) -ok
- cookie httponly ajax,为什么jquery的.ajax()方法没有发送我的会话cookie?
- 双边功率谱密度和单边功率谱密度_以高斯信号为例,计算幅度谱、相位谱、双边功率谱、双边功率谱密度、单边功率谱、单边功率谱密度。...
- (程序员/软件工程师/开发者)编程——计算机专业英语学习指引
- Java开发-空指针(NullPointException)
- java 国家法定节假日和双休日判断工具类
- pygame实现动态小鸟飞行 + 打包发布
- c语言tab什么意思_我的C语言入门笔记。
- 微信漫画小程序全开源商业版