使用flying-saucer 实现 html转pdf实现input框select,textarea

使用flying-saucer 实现 html转pdf实现input框select,textarea checkbox等的显示

为什么80%的码农都做不了架构师?>>>

昨天研究html转pdf,使用itextpdf 5.5.9版本(上一篇博客:https://my.oschina.net/u/1778261/blog/809757)

com.itextpdf

itextpdf

${itextpdf.version}

com.itextpdf

itext-asian

${itext.asian.version}

中文显示问题解决了,当时碰到了打印表单中input框等不显示的问题。

今天换了个方案使用flying-saucer 实现html转pdf

org.xhtmlrenderer

flying-saucer-pdf-itext5

9.1.1

实现代码如下:

public void html2pdf(String html, File file, String fontDir) throws I18NIllegalArgumentException {

try (OutputStream os = new FileOutputStream(file); ){

ITextRenderer renderer = new ITextRenderer();

ITextFontResolver fontResolver = (ITextFontResolver) renderer.getSharedContext().getFontResolver();

//添加字体库 begin

File f = new File(fontDir);

if (f.isDirectory()) {

File[] files = f.listFiles(new FilenameFilter() {

@Override

public boolean accept(File dir, String name) {

String lower = name.toLowerCase();

return lower.endsWith(".otf") || lower.endsWith(".ttf") || lower.endsWith(".ttc");

}

});

for (int i = 0; i < files.length; i++) {

fontResolver.addFont(files[i].getAbsolutePath(), BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

}

}

//添加字体库end

renderer.setDocumentFromString(html);

renderer.layout();

renderer.createPDF(os);

} catch (Exception e) {

throw new I18NIllegalArgumentException(e);

}

}

网上查的都是添加字体的方法都是这样实现的:

ITextFontResolver fontResolver = renderer.getFontResolver();

fontResolver.addFont("C:/Windows/Fonts/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

fontResolver.addFont("C:/Windows/Fonts/simhei.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

fontResolver.addFont("C:/Windows/Fonts/simkai.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

这样实现有个缺陷:字体的路径都是系统的目录,不同系统(windows,Linux)字体目录不同,对系统依赖太高。

为了解决这个问题:找到字体库文件,复制到项目的目录中,在代码中直接遍历这个目录,添加所有的字体。

注意:页面中字体不能使用中文,需要使用英文名称,而且是大小写敏感的!例如宋体的英文名称是 SimSun(注意不是simsun!,首字母都是大写的)

错误写法:font-family:'宋体' 或者  font-family:'simsun'  或者  font-family: '微软雅黑'

正确写法:font-family:'SimSun' 或者 font-family:'SimHei'或者  font-family:  'Microsoft YaHei'

另外: html的格式要求符合xml格式(即必须有结束标签)

测试:

测试用html代码:

我是标题

*{font-family: 'SimSun';}

我是内容

asdfsdf今晚打老虎

运动睡觉

html浏览器显示结果:

生成的pdf:

转载于:https://my.oschina.net/u/1778261/blog/810277

使用flying-saucer 实现 html转pdf实现input框select,textarea相关教程

flyingsaucer转换多个html,使用flying-saucer 实现 html转pdf实现input框select,textarea相关推荐

  1. flyingsaucer转换多个html,用 flying saucer 生成pdf文件 Css及html的问题

    我用  flying saucer  生成PDF文件,因为要生成文章,而文章是由tinymce发布的.可能有些文章发布出去后格式有问题,比如说标签不规范,有的没有闭合. 这样 flying sauce ...

  2. itextpdf将带复选框的html_使用flying-saucer 实现 html转pdf实现input框select,textarea checkbox等的显示...

    com.itextpdf itextpdf ${itextpdf.version} com.itextpdf itext-asian ${itext.asian.version} 中文显示问题解决了, ...

  3. php stream_select w3c,使用flying-saucer 实现 html转pdf实现input框select,textarea checkbox等的显示...

    com.itextpdf itextpdf ${itextpdf.version} com.itextpdf itext-asian ${itext.asian.version} 中文显示问题解决了, ...

  4. flyingsaucer转换多个html,Flying Saucer实现html转pdf(一些有关问题,持续更新)

    Flying Saucer实现html转pdf(一些问题,持续更新) Flying Saucer实现html转pdf(及一些问题,持续更新) 关于FlyingSaucer的使用官网上有详细的介绍. 官 ...

  5. Flying Saucer实现html转pdf(一些问题,持续更新)

    Flying Saucer实现html转pdf(及一些问题,持续更新) 关于FlyingSaucer的使用官网上有详细的介绍. 官网地址: https://today.java.net/pub/a/t ...

  6. iText和flying saucer结合生成pdf的技术

    原博文地址 http://blog.csdn.net/shanliangliuxing/article/details/6833471 下面是我自己利用flying saucer技术生成pdf文档的实 ...

  7. flying saucer做导PDF踩过的坑~

    最近公司要求做一个导出PDF报表的功能.由于时间比较紧张,而且导出的内容暂时为一个报表而已,所以我采用了flying saucer+freemaker来做. flying sauce源码:https: ...

  8. Flying Saucer 不支持中文,换行,粗体,CheckBox多选框的解决方案

    最近要生成打印版的保单信息,内容比较多,也比较复杂,iText直接生成的话,想必花很多时间,而且可能也很难维护,偶然看到了HTML 在 Fly Saucer的帮助下能转换成PDF,解析CSS还不错,顿 ...

  9. Flying Saucer生成pdf报表

    使用Flying Saucer生成pdf报表: 1.首先看一下Flying Saucer的官方介绍: https://github.com/flyingsaucerproject/flyingsauc ...

最新文章

  1. .ajax get获取案例,$.ajax GET请求案例
  2. web 点击劫持 X-Frame-Options
  3. socket接收的消息怎么更新到页面_spring boot 集成 websocket 实现消息主动
  4. pyDash : Linux 性能监测工具
  5. 颠沛流离的Arcsight,辉煌不再
  6. Java 调用树莓派硬件资源
  7. 注册刷短信验证码的问题
  8. spring核心功能包中已经包含了cglib功能
  9. ActionContextCleanUp作用
  10. Direct2D 如何关闭抗锯齿
  11. C++ string字符串的增删改查
  12. IDEA的创建javaWeb工程以及修改默认的class文件输出
  13. 修改表名的sql语句_SQL第一关——入门
  14. java ajax 进度条_java使用ajax实现进度条
  15. PHP代码审计工具RIPS
  16. 企业实现均衡生产,车间管理系统来支持
  17. CentOS7.6 部署 Snipe-it 资产管理系统
  18. 一个P9告诉你为什么某电商怕了拼多多
  19. 在linux文件下执行.kjb文件和trans文件
  20. css控制文本超出省略(单行、两行、多行)

热门文章

  1. Java 6-2:收放自如,融汇贯通,让线程不再疯癫——线程的阻塞和关闭
  2. 读取文件时内容乱码解决方法
  3. Java控制鼠标和键盘的方法
  4. 2019款Mac Pro到底有多强
  5. 【3Dsmax】入门
  6. 双碳绿色风中,乘势而起了哪些新能源?
  7. 中国农业会计杂志中国农业会计杂志社中国农业会计编辑部2022年第12期目录
  8. R语言基础数据分析—单因素方差分析
  9. Keras : 利用卷积神经网络CNN对图像进行分类,以mnist数据集为例建立模型并预测
  10. WPS删除粘贴后的[]中括号痕迹