使用 com.Lowagie.itext 导出html的内容到 pdf

学习了使用com.Lowagie.itext导出html的内容到word,导出pdf的话,会是什么情况?可以直接用吗? 有什么不同呢?

处理:

引入itext:

<dependency><groupId>com.lowagie</groupId><artifactId>itext</artifactId><version>2.0.8</version>
</dependency>

直接引用:

public static void main(String[] args) throws Exception {OutputStream out = new FileOutputStream("d://exportFile//f"+System.currentTimeMillis()+".pdf");Document document = new Document(PageSize.A4);PdfWriter.getInstance(document, out);document.open();String content = "<p>图片导出</p>\n<p>&nbsp;</p>\n<p>啦啦</p>\n<p>&nbsp;</p>\n<p>&nbsp;</p>\n<p><img src=\"F://temp//back1.jpg\" alt=\"\" width=\"640\" height=\"640\" /></p>\n<p>&nbsp;</p>\n<p>发放</p>\n<p>&nbsp;</p>\n<p><img src=\"F://temp//back2.jpg\" alt=\"\" width=\"300\" height=\"108\" /></p>\n<p>第三方</p>\n<p>&nbsp;</p>";StyleSheet styleSheet = new StyleSheet();List htmlList = HTMLWorker.parseToList(new StringReader(content), styleSheet);Paragraph context = new Paragraph();for (Object aHtmlList : htmlList) {Element e = (Element) aHtmlList;context.add(e);}document.add(context);document.close();System.out.println("ok");
}

PS: 字符里面的图片,根据实际的进行替换。大小要合适,不然会显示不出来。

结果:

出现的问题:

1,只出现了两张图片,没出现字符;

2,中文字符没有展示

3,展示的内容出现重叠

处理中文:

BaseFont bfChinese = BaseFont.createFont(ResourceUtils.getFile("classpath:static/Fonts/simfang.ttf").getAbsolutePath(), BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

在resources下,添加对应的fonts,fonts文件下载

根据类型添加:

在输出其类型的时候,发现字符和图片的是一样的,表格的类型不同,根据类型不同,进行添加

代码:

private final static int FONT_NORMAL = Font.NORMAL;public static void main(String[] args) {String value = "<p>图片导出</p>\n<p>&nbsp;</p>\n<p>啦啦</p>\n<p>&nbsp;</p>\n<p>&nbsp;</p>\n<p><img src=\"https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fn.sinaimg.cn%2Fsinacn%2F20170105%2Fb01b-fxzkfuk2266724.png&refer=http%3A%2F%2Fn.sinaimg.cn&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1623917122&t=0eef227b3c5f25073c174523fd5410c7\" alt=\"\" width=\"640\" height=\"640\" /></p>\n<p>&nbsp;</p>\n<p>发放</p>\n<p>&nbsp;</p>\n<table style=\"border-collapse: collapse; width: 100%;\" border=\"1\">\n<tbody>\n<tr>\n<td style=\"width: 16.6667%;\">大丰收</td>\n<td style=\"width: 16.6667%;\">阿凡达</td>\n<td style=\"width: 16.6667%;\">执行</td>\n<td style=\"width: 16.6667%;\">打算</td>\n<td style=\"width: 16.6667%;\">阿道夫</td>\n<td style=\"width: 16.6667%;\">展旭</td>\n</tr>\n<tr>\n<td style=\"width: 16.6667%;\">安抚</td>\n<td style=\"width: 16.6667%;\">啊</td>\n<td style=\"width: 16.6667%;\">的</td>\n<td style=\"width: 16.6667%;\">大</td>\n<td style=\"width: 16.6667%;\">&nbsp;发</td>\n<td style=\"width: 16.6667%;\">发送到</td>\n</tr>\n<tr>\n<td style=\"width: 16.6667%;\">阿道夫</td>\n<td style=\"width: 16.6667%;\">ad</td>\n<td style=\"width: 16.6667%;\">答复</td>\n<td style=\"width: 16.6667%;\">阿斯蒂芬</td>\n<td style=\"width: 16.6667%;\">&nbsp;发多少</td>\n<td style=\"width: 16.6667%;\">发的</td>\n</tr>\n<tr>\n<td style=\"width: 16.6667%;\">啊</td>\n<td style=\"width: 16.6667%;\">的</td>\n<td style=\"width: 16.6667%;\">更舒服的</td>\n<td style=\"width: 16.6667%;\">国防生的</td>\n<td style=\"width: 16.6667%;\">&nbsp;萨芬的</td>\n<td style=\"width: 16.6667%;\">阿斯蒂芬</td>\n</tr>\n<tr>\n<td style=\"width: 16.6667%;\">啊</td>\n<td style=\"width: 16.6667%;\">是大法官</td>\n<td style=\"width: 16.6667%;\">十多个</td>\n<td style=\"width: 16.6667%;\">杀伐果断</td>\n<td style=\"width: 16.6667%;\">杀伐果断</td>\n<td style=\"width: 16.6667%;\">用复合弓的</td>\n</tr>\n</tbody>\n</table>\n<p>&nbsp;</p>\n<p><img src=\"F://temp//back2.jpg\" alt=\"\" width=\"300\" height=\"108\" /></p>\n<p>第三方</p>\n<p>&nbsp;</p>";htmlToPdf(value, "d://exportFile//g"+System.currentTimeMillis()+".pdf");
}public static void htmlToPdf(String content, String pdfPath) {Document document = new Document();try {BaseFont bfChinese = BaseFont.createFont(ResourceUtils.getFile("classpath:static/Fonts/simfang.ttf").getAbsolutePath(),BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);StyleSheet styleSheet = new StyleSheet();styleSheet.loadTagStyle("body", "leading", "16,0");PdfWriter.getInstance(document, new FileOutputStream(pdfPath));document.open();List htmlList = HTMLWorker.parseToList(new StringReader(content), styleSheet);Paragraph context = new Paragraph();context.setKeepTogether(false);Font FontChinese = new Font(bfChinese, 10, FONT_NORMAL);for (Object aHtmlList : htmlList) {Element e = (Element) aHtmlList;System.out.println(e.type() + e.getChunks().toString() + ": "+ e.toString());int type = e.type();if(type == 12){ // 文本和图片List chunks = e.getChunks();if(CollectionUtils.isEmpty(chunks)){continue;}for (Object object : chunks) {Chunk chunk = (Chunk) object;HashMap attributes = chunk.getAttributes();if (MapUtils.isEmpty(attributes)) {context = addParagraph(chunk.getContent());context.setIndentationLeft(50);context.setIndentationRight(50);} else {context = addParagraph("");context.setIndentationLeft(50);Image image = chunk.getImage();context.add(image);}document.add(context);}}else if( type == 23){ // 表格PdfPTable table = (PdfPTable) aHtmlList;document.add(table);}}document.close();System.out.println("ok");}catch(Exception e) {e.printStackTrace();}
}

这边表格导出来的内容,只有表格,没有实际的内容。这个是老问题了。对于表格的内容,要拎出来,然后放到PdfPTable里面,一个一个设置PdfCell。这个后面再添加。

总结:

使用 com.Lowagie.itext 导出html内容到pdf上,就没word那么简单,要根据实际的类型一一处理, 要处理好中文。带表格也得额外处理了,需要手动拼接。后面试试其它的方式,看看有没有不用特殊处理表格的。

Lowagie 导出html的内容到 pdf相关推荐

  1. Ureport2导出内容加入PDF文件

    Ureport2导出内容加入PDF文件 处理ureport导出的内容(不需要ureport生成文件) ureport导出内容时会生成一个xml文件,我们需要拿到这个文件. 如果想让导出内容本身做为一个 ...

  2. Java实现导出内容为PDF格式

    先看一下导出的PDF效果图简单版 导出内容为PDF格式基本流程: 先创建一个word文档,我这边命名为:mytest,并写好你要输出内容的固定信息. 再将此word文档另存为pdf格式,我放到了我本地 ...

  3. 使用jspdf插件将网页中的内容导出为高保真的pdf文件

    文章目录 使用jspdf插件将网页中的内容导出为高保真的pdf文件 1. 将网页中的内容导出为pdf文件的四种方式比较 2. 第一种方式:html2canvas + jspdf 导出网页内容 2.1 ...

  4. 使用html2canvas+jspdf导出iframe内容到pdf文件

    使用html2canvas+jspdf导出iframe内容到pdf文件 工具如下: html2canvas.js html2canvas.min.js jspdf.debug.js 代码如下: < ...

  5. 富文本编辑器导出html静态页面和pdf格式文件

    在这里记录的都是在项目开发中遇到的问题,都是自己查找网上资料,经过测试总结出来的,就是希望有同样需求的人可以少走弯路. 本人当前使用的是若依框架自带的富文本编辑器,附上相关图片,具体的代码可以查看若依 ...

  6. vue项目导出页面指定dom为pdf

    1.安装html2canvas npm install --save html2canvas 2.安装pdfjs npm install --save pdfjs 3.新建一个js文件,比如叫 pdf ...

  7. Vue3 实现导出 Word、Excel、PDF

    Vue3 实现导出 Word.Excel.PDF 前言 一.导出 Excel 1.按装依赖 2.方法 3.在本文中的使用示例 二.导出 Word 1.按装依赖 2.方法 3.在本文中的使用示例 三.导 ...

  8. Python使用matplotlib可视化绘制并导出可视化结果图表到PDF文件中

    Python使用matplotlib可视化绘制并导出可视化结果图表到PDF文件中 目录 Python使用matplotlib可视化绘制并导出可视化结果图表到PDF文件中

  9. 如何修改PDF内容,PDF怎么旋转页面

    在编辑PDF文件的时候总会遇到各种各样的问题,编辑PDF文件是需要用到PDF编辑器的,在使用PDF编辑器修改文件的时候,文件中的页面不是正常显示的,该如何将页面进行旋转呢,不会的话,就一起看看下面的文 ...

  10. 如何修改PDF文件内容,PDF怎么编辑页眉页脚

    在大家的工作中越来越多的回使用到PDF文件.对于PDF文件,想要在文件中添加页眉页脚或者是编辑文件中就有的页眉页脚怎么去修改,是大家常常苦恼的事情,众所周知PDF文件的编辑是需要PDF编辑器的,那么P ...

最新文章

  1. hadoop配置文件聚集功能(设置日志可以查看)
  2. php向ldap插入数据,给LDAP添加用户,构造用户文件,然后使用phpLadpadmin导入
  3. Qt中多线程间的同步
  4. monkeyrunner Can't open specified script file
  5. 云原生时代|分布式系统设计知识图谱(内含 22 个知识点)
  6. STM32开发 -- Ublox GPS之设置PUBX
  7. boost::adjacency_list用法的测试程序
  8. C++之再探参数绑定bind、bind1st、bind2nd、placeholders占位符
  9. java char character_Java char 与 Character
  10. 一个网络传输框架——zeroMQ 调研笔记
  11. [转]Linux平台下的service程序编写指南
  12. typecast java_Delphi设置无效的Typecast
  13. 数学建模—多元回归分析
  14. 旋转式直流无刷Maxon电机与copley驱动器调试
  15. Android Unable to find source java class:<File>because it does not belong to any of the source dirs:
  16. ASML即将陷入困境,该对中国市场下定决心了
  17. 工作内存与主内存是什么,硬件层面的存储架构是什么样,线程的实现原理是什么
  18. python win10 捕获 弹出窗口_[python爬虫] Selenium高级篇之窗口移动、弹出对话框自登录...
  19. python美元汇率兑换程序代码_如何实现python汇率转换代码
  20. 浅谈UML中常用的几种图——鲁棒图

热门文章

  1. 77GHz汽车防撞雷达信号处理设计与实现
  2. 【毕业设计】基于单片机的超声波雷达系统
  3. arcmap中图斑面积代表_arcmap计算面积_ArcMap怎么重计算图斑面积?arcmap使用手册_arcmap计算面积...
  4. Minecraft 1.12.2模组开发(三十七) 3D盔甲
  5. 对ichartjs基于基于HTML5的开源图形组件画图的心得
  6. drool 7.x 属性 : no-loop
  7. 微信支付H5完整版代码
  8. java svn插件_eclipse 安装SVN插件 subversive
  9. 有哪些毕设免费查重和降重的网站
  10. 一张图助你了解传统项目管理与敏捷项目管理的区别!