java poi html转PDF_实现word转pdf,HTML转pdf(探索篇)
笔者找依赖的jar包,找的好辛苦。
ITextRenderer、
ITextFontResolver这两个类依赖的jar包到底是哪个,还有怎么下载?苦苦纠结了3个小时。
终于找到你了!
记录个网址:
http://www.java2s.com/Code/Jar/c/Downloadcorerendererr8pre2jar.htm
上测试代码:
/*
* html转图片
*/
public static boolean convertHtmlToPdf(String inputFile,
String outputFile, String imagePath)
throws Exception {
OutputStream os = new FileOutputStream(outputFile);
ITextRenderer renderer = new ITextRenderer();
String url = new File(inputFile).toURI().toURL().toString();
renderer.setDocument(url);
// 解决中文支持问题
ITextFontResolver fontResolver = renderer.getFontResolver();
fontResolver.addFont("C:/Windows/Fonts/simsunb.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//解决图片的相对路径问题
renderer.getSharedContext().setBaseURL("file:/" + imagePath);//D:/test
renderer.layout();
renderer.createPDF(os);
os.flush();
os.close();
return true;
}
调用+走你!
这里笔者结合上一篇poi将word转html,结合使用。
/**doc
转html
*/
String tagPath = "D:\red_ant_file\20180915\image\";
String sourcePath = "D:\red_ant_file\20180915\RedAnt的实验作业.doc";
String outPath = "D:\red_ant_file\20180915\123.html";
try {
AllServiceIsHere.docToHtml(tagPath, sourcePath, outPath);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String pdfPath = "D:\\red_ant_file\\20180915\\456.pdf";
try {
AllServiceIsHere.convertHtmlToPdf(outPath , pdfPath, tagPath);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
【注意】
(值得注意的地方是IText 根据html生成pdf文件的时候,会验证html文件是否标准,例如通过poi转换的出来的html文件的一些标签会缺少标签闭合 ” / “ :
否则,你会遇到
Can't load the XML resource (using TRaX transformer). org.xml.sax.SAXParseException; lineNumber: 23; columnNumber: 3; 元素类型 "meta" 必须由匹配的结束标记 "" 终止。
笔者尝试,使用第三方 jar 包Jsoup, 直接调用 parse方法,笔者认为html就标准啦!
这个坑,让笔者苦恼了,1个小时。
为此,笔者不得不重写,word转html代码:
再次记录个网址:下载第三方 jar 包Jsoup使用
https://jsoup.org/download
上重写word转html代码:
// word 转 html
public static void convert2Html(String fileName, String outPutFile) throws Exception {
HWPFDocument wordDocument = new HWPFDocument(new FileInputStream(fileName));// WordToHtmlUtils.loadDoc(new
// 兼容2007 以上版本
WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(
DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument());
wordToHtmlConverter.setPicturesManager(new PicturesManager() {
public String savePicture(byte[] content, PictureType pictureType, String suggestedName, float widthInches,
float heightInches) {
return "test/" + suggestedName;
}
});
wordToHtmlConverter.processDocument(wordDocument);
// save pictures
List pics = wordDocument.getPicturesTable().getAllPictures();
if (pics != null) {
for (int i = 0; i < pics.size(); i++) {
Picture pic = (Picture) pics.get(i);
System.out.println();
try {
pic.writeImageContent(new FileOutputStream("D:/test/" + pic.suggestFullFileName()));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
Document htmlDocument = wordToHtmlConverter.getDocument();
ByteArrayOutputStream out = new ByteArrayOutputStream();
DOMSource domSource = new DOMSource(htmlDocument);
StreamResult streamResult = new StreamResult(out);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer serializer = tf.newTransformer();
serializer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
serializer.setOutputProperty(OutputKeys.INDENT, "yes");
serializer.setOutputProperty(OutputKeys.METHOD, "HTML");
serializer.transform(domSource, streamResult);
out.close();
writeFile(new String(out.toByteArray()), outPutFile);
}
//输出html文件
public static void writeFile(String content, String path) {
FileOutputStream fos = null;
BufferedWriter bw = null;
org.jsoup.nodes.Document doc = Jsoup.parse(content);
content=doc.html();
try {
File file = new File(path);
fos = new FileOutputStream(file);
bw = new BufferedWriter(new OutputStreamWriter(fos,"UTF-8"));
bw.write(content);
} catch (FileNotFoundException fnfe) {
fnfe.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
} finally {
try {
if (bw != null)
bw.close();
if (fos != null)
fos.close();
} catch (IOException ie) {
}
}
}
准备个文件,测试一下。
String source = "D:\\red_ant_file\\20180915\\1303\\RedAnt的实验作业.doc";
String out = "D:\\red_ant_file\\20180915\\1303\\789.html";
try {
AllServiceIsHere.convert2Html(source, out);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
word转html,规范化代码后的转换结果。
接下来,html转pdf
【后话】
虽然笔者,最终调试出来了。使用这种方法转pdf。
但是使用中,会遇到各种各样的奇葩坑!因此笔者在这里不推荐使用这种方法。
原因就是,html的规则也在变化之中,写法也在变化之中。html转pdf会在后续报各种各样的标签错误。
笔者之所以粘出,这些代码。完全是因为,笔者对自己的尝试,有个明确的结果。亦或是,再优化这些代码,找到合适的解决办法。
java poi html转PDF_实现word转pdf,HTML转pdf(探索篇)相关推荐
- 一、后端:针对用JAVA POI解决已知路径WORD文件增加自定义页眉,灵活设置页眉字体部分样式@2019
一.获取添加页眉doc文件 我的项目文件路径: String reportSavePath= "****************"; DOCX文件一: changer.setAcc ...
- java poi 上传与下载word文件
java编程要实现对word的操作没有vb那种编程语言来得容易,得借助一些开源组件,其中就包括jacob.poi等, 而poi应用得最为广泛,对word2003和2007的读和写word操作都十分方便 ...
- java poi doc转docx_Java 插入Word分页符、分节符
在Word文档中,插入分页符或分节符是一种规范文档内容布局的有效方式.特别是对于一些文档格式要求严格,排版布局严谨的文档,如论文.书籍.期刊等等,通过插入的分页符或分节符可以将每部分内容加以合理区分, ...
- java poi 设置标题_poi生成Word时指定文本样式,如“正文”,“标题1”,“标题2”等...
POI生成Word时,设置段落的样式 String style = "2"; //标题2的样式 XWPFParagraph xwpfParagraph = doc.insertNe ...
- Java (POI) 解析不同版本的word(doc、docx)
所需依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifa ...
- java poi html转PDF_word和.txt文件转html 及pdf文件, 使用poi jsoup itext心得
word和.txt文件转html 及pdf文件, 使用poi jsoup itext心得 本人第一次写博客,有上面不足的或者需要改正的希望大家指出来,一起学习交流讨论. 由于在项目中遇到了这一个问题 ...
- JAVA POI处理WORD
JAVA POI处理WORD 转载:http://w26.iteye.com/blog/974442 JavaApacheSVN 关键字:POI WORD HWPF WORD文本组成:文本.图.表和宏 ...
- java poi 操作word遇到的问题
java poi 操作word文本,图表,遇到的问题 直接上问题 模板字段匹配问题 图表问题 图表导出 问题:模板找不到对应图表 问题:数据填充后效果不达目标 图表中为零的数值去掉(!!!模板层面解决 ...
- 【项目实战】Java POI之Word导出经典案例一
最近项目中需要用到数据的导出到Word,本在项目中使用POI将数据导入到Word,和Excel导出类似,先将jar包导入进去(我这里就省去导jar包啦),我直接上实现过程吧! 1.导入POI jar包 ...
- java POI对word中的表格动态插入固定数据,以及插入不确定数量的的数据
java POI对word中的表格动态插入固定数据,以及插入不具体的数据 遇到个项目本来是用Execl导出的,相对简单,客户要求用Word导出,并按照他们给的模板进行导出: 从网上百度了一下,然后自己 ...
最新文章
- 多个矩形,求覆盖面积,周长,及交点
- 飞机上一般是什么操作系统?
- linux安装后硬盘变小,Linux硬盘安装步骤
- odoo开发笔记:前端显示强制换行
- Kafka MirrorMaker 跨集群同步工具
- 牛客练习赛74 E CCA的期望(算概率的技巧+floyd处理)
- 论文浅尝 | 基于开放世界的知识图谱补全
- python面试题之Fibonacci数列
- pandas 读取csv_「技巧」Pandas常见的性能优化方法
- [ Problem 1 ] 数独游戏
- Codeforces Round #243 (Div. 2) Problem B - Sereja and Mirroring 解读
- leetcode[541]反转字符串II/reverse string II 反转字符串考察对代码的掌控能力
- python相关参考地址收藏
- Windows Server 2008 R2入门之FTP服务器
- 计算机软考论文分数,信息系统项目管理师论文37分等得分低原因、不及格原因...
- 称重仪表显示ol怎么解决_地磅称重时仪表显示出现跳数如何解决?
- 数据库文档生成工具-markdown格式
- python绘制图像频谱_python傅里叶变换FFT绘制频谱图
- 内存带宽测试工具 mbw
- h2o flow初探