笔者找依赖的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(探索篇)相关推荐

  1. 一、后端:针对用JAVA POI解决已知路径WORD文件增加自定义页眉,灵活设置页眉字体部分样式@2019

    一.获取添加页眉doc文件 我的项目文件路径: String reportSavePath= "****************"; DOCX文件一: changer.setAcc ...

  2. java poi 上传与下载word文件

    java编程要实现对word的操作没有vb那种编程语言来得容易,得借助一些开源组件,其中就包括jacob.poi等, 而poi应用得最为广泛,对word2003和2007的读和写word操作都十分方便 ...

  3. java poi doc转docx_Java 插入Word分页符、分节符

    在Word文档中,插入分页符或分节符是一种规范文档内容布局的有效方式.特别是对于一些文档格式要求严格,排版布局严谨的文档,如论文.书籍.期刊等等,通过插入的分页符或分节符可以将每部分内容加以合理区分, ...

  4. java poi 设置标题_poi生成Word时指定文本样式,如“正文”,“标题1”,“标题2”等...

    POI生成Word时,设置段落的样式 String style = "2"; //标题2的样式 XWPFParagraph xwpfParagraph = doc.insertNe ...

  5. Java (POI) 解析不同版本的word(doc、docx)

    所需依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifa ...

  6. java poi html转PDF_word和.txt文件转html 及pdf文件, 使用poi jsoup itext心得

    word和.txt文件转html 及pdf文件, 使用poi jsoup  itext心得 本人第一次写博客,有上面不足的或者需要改正的希望大家指出来,一起学习交流讨论. 由于在项目中遇到了这一个问题 ...

  7. JAVA POI处理WORD

    JAVA POI处理WORD 转载:http://w26.iteye.com/blog/974442 JavaApacheSVN 关键字:POI WORD HWPF WORD文本组成:文本.图.表和宏 ...

  8. java poi 操作word遇到的问题

    java poi 操作word文本,图表,遇到的问题 直接上问题 模板字段匹配问题 图表问题 图表导出 问题:模板找不到对应图表 问题:数据填充后效果不达目标 图表中为零的数值去掉(!!!模板层面解决 ...

  9. 【项目实战】Java POI之Word导出经典案例一

    最近项目中需要用到数据的导出到Word,本在项目中使用POI将数据导入到Word,和Excel导出类似,先将jar包导入进去(我这里就省去导jar包啦),我直接上实现过程吧! 1.导入POI jar包 ...

  10. java POI对word中的表格动态插入固定数据,以及插入不确定数量的的数据

    java POI对word中的表格动态插入固定数据,以及插入不具体的数据 遇到个项目本来是用Execl导出的,相对简单,客户要求用Word导出,并按照他们给的模板进行导出: 从网上百度了一下,然后自己 ...

最新文章

  1. 吴恩达等ML大神对话:如何用机器学习应对气候变化 | NeurIPS 2019
  2. JavaScript中Object.prototype.toString方法的原理
  3. python百度百科api-Python即时网络爬虫:API说明
  4. 【POJ】【2975】Nim
  5. mysql 最大并发连接数
  6. boost::sort模块实现提供多种分布的灵活随机数生成器的测试程序
  7. iOS Hacker Xcode玩转arm64汇编基础
  8. 天津大学计算机在线作业答案,天大19秋《计算机应用基础》在线作业二【满分答案】...
  9. html中日期格式化函数,JavaScript日期时间格式化函数分享
  10. linux sudo提权
  11. python控制安捷伦频谱仪_频谱仪远程操作Python类
  12. 互联网运营常用8大数据分析模型
  13. 【毕业设计】基于 stm32 的病房呼叫系统 - 物联网 嵌入式 单片机
  14. 单独的html怎么实现微信分享,html静态页面实现微信分享思路
  15. 基于单片机的多功能数字时钟设计
  16. 阿里达摩院发布2019十大科技趋势:AI、区块链等入选-千氪
  17. ftp服务器文件服务器,ftp服务器和文件服务器的区别
  18. [PKUSC2022]撸猫——Hall定理
  19. IBM系列企业云计算产品和服务正式亮相
  20. IDEA的接口测试工具

热门文章

  1. 毕业论文中期报告PPT模板
  2. python提取格式化日志
  3. 淘宝技术这十年 -- 目录
  4. 金蝶K3与IMS系统搭建销售订单交期回复系统
  5. 【博学谷学习记录】超强总结,用心分享|Java基础语法week2
  6. 吾爱破解“凉”了之后,还能去哪儿下载软件?
  7. 蜂鸣器驱动电路中二极管的作用
  8. 计算机做游戏软件视频,游戏主播用什么视频剪辑软件
  9. 如何强制升级索尼sony tablet s android 4.0,【S丶Tablet】教你root Tablet S 4.0.3 R5
  10. photoshop保存里没有html,PS中为什么没有存储为web格式?