对比了很多生成pdf的方案,最终还是决定使用flying saucer,网上能搜出N多相关文章,但是照着做了会出现各种问题,还是得自己一点点摸索,前后花了两天时间才达到自己的目标,下面把过程中的经验总结一下,希望对大家能有所帮助:

1)jar包选择

小小抱怨一下,各种开源产品给了我们极大帮助,但是通常版本管理较为混乱,也给我们带来了不小的麻烦,因为jar包兼容性问题花了很长时间,尤其是itext,下载了最新的5.5.0 5.5.1版本居然里面都有错误的!最后试了各种版本,终于选定5.0.6版本。貌似无法上传附件,否则可以将jar上传,免得大家找起来麻烦。注意一下,我也是网上下载了一个别人修改过支持中文的jar包。

2)中文支持

首先需要添加中文字库,也就是你的页面中用到的所有字体:

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);

上面这个很简单,到处都能找到示例代码,但是注意点来了:页面中字体不能使用中文,需要使用英文名称,而且是大小写敏感的!例如宋体的英文名称是 SimSun(注意不是simsun!,首字母都是大写的)

错误写法:font-family:宋体 或者  font-family:simsun

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

如果生成的pdf中文不显示或者乱码,请确认如下信息:

确保页面中所有内容都指定了字体,最好能指定 body {font-family:....},以防止漏网之鱼。

确保上述所有字体均通过addFont加入,字体名称错误或者字体不存在会抛出异常,很方便,但是没导入的字体不会有任何提示。

确保字体名称正确,不使用中文,大小写正确。

确保html标签都正确,简单的方法是所有内容都去掉,随便写几个中文看看能否正常生成,如果可以,在认真检查html标签,否则再次检查上述几条。

还有就是中文换行的问题了,带有中文而且文字较多存在换行情况时,需要给table加入样式:

table-layout:fixed,然后表格中的td使用%还指定td的宽度。

3)加密及权限

加密方法较为简单:

ITextRenderer renderer = new ITextRenderer();

renderer.setPDFEncryption(getEncryption());

private PDFEncryption getEncryption()

{

PDFEncryption encrypt = new PDFEncryption(new String("a").getBytes(), new String("b").getBytes(), PdfWriter.ALLOW_SCREENREADERS);

return encrypt;

}

但是注意点来了,需要引入jar包!bcprov-jdk16-145.jar,百度一下很多的。

两个参数:两个都是密码,不同的是第一个密码是浏览密码,输入该密码打开pdf后根据设置的权限进行控制,第二个密码属于所有者密码,使用该密码打开pdf权限不受控制。

pdf的操作权限根据例子中写就行了

4)css样式

其实flying saucer对很多css都支持得不好,这个得自己慢慢试了,相当痛苦的过程,不过只要成功一个,其他的就简单了。

‍注意点:大写标签不识别!比如

等等统统不识别!,说到底就是大小写敏感。‍

5)多页面生成pdf

其实很简单,第一个页面不变,从第二个起:

for(int i = 1; i

{

renderer.setDocument(new File(root, inputFile[i]));

renderer.layout();

renderer.writeNextDocument();

}

renderer.finishPDF();

6)标签

其实就是在页面中增加锚点,然后在head中加入bookmark即可,但是注意点来了,如果你是将多个页面生成到一个pdf中,那么只要在最后一个页面中加入bookmark就可以了!否则会重复哦。

itext转html为pdf 锚点,flying saucer html转pdf经验分享相关推荐

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

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

  2. iTextRenderer(Flying Saucer) HTML转PDF

    iTextRenderer(Flying Saucer) HTML转PDF iTextRenderer 在依赖 iText 的基础上,单独实现了HTML渲染PDF,基本上能实现 CSS 2.1的整体性 ...

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

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

  4. freemark与flying saucer生成PDF

    freemark与flying saucer生成PDF 1.导入flying saucer与freemark的包. 2.利用freemark生成html文件. 3.利用flying saucer进行p ...

  5. 使用flying saucer将html文件转成PDF

    使用flying saucer生成PDF文件之前,先要使用freemarker生成html文件,然后将html文件转成pdf.生成html文件的东东网上一搜一大堆,大家找找就成. 当然"使用 ...

  6. 使用Flying Saucer生成pdf

    使用Flying Saucer生成pdf 实现思路: 利用FreeMarker编写HTML模板,通过Flying Saucer生成pdf. 一.maven添加依赖 本项目使用maven构建,基于spr ...

  7. 使用JasperReport 引擎PDF报表,因为iText版本升级,由原来的包名com.lowagie.text.pdf.fonts转化为com.itextpdf.text.pdf.fonts

    使用JasperReport 引擎PDF报表,因为iText版本升级,由原来的包名com.lowagie.text.pdf.fonts转化为com.itextpdf.text.pdf.fonts,如果 ...

  8. Flying Saucer生成pdf报表

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

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

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

最新文章

  1. usaco Shaping Regions
  2. android 获取存储卡,Android获取存储卡路径的方式
  3. Guns 编辑功能实现_入门试炼06
  4. @AspectJ中的几种通知方式详解
  5. 设计模式之美 - 64状态模式
  6. Halcon 二维码
  7. Unicode与GBK互转
  8. 加密狗破解原理和破解方法介绍
  9. Django作为微信小程序后端实践
  10. 关于IDM的使用相关教程
  11. VTN系列多通道振弦模拟信号采集仪常规操作
  12. linux 如何清理垃圾文件,Linux系统怎样清理垃圾文件
  13. ictclas java_ICTCLAS50 基于中科院分词作的java 工具,内容详细各个函数都有实现 含有word解析文档 Develop 238万源代码下载- www.pudn.com...
  14. 【Excel】在单元格中插入换行符
  15. kaggle验证手机收不到验证码
  16. 计算机的四屏故障维修,计算机应用之显卡故障维修技巧
  17. 双臂机器人驱动板(LM324运放电流检测、PCF8591外置ADC)
  18. python判断三角形程序_python三角形判定怎么做
  19. 3.13 小红书笔记怎样带话题,才能增加曝光?【玩赚小红书】
  20. LED屏显示驱动简述与类型

热门文章

  1. 【转】欧盟物联网研究战略路线图(3)
  2. 怎样保留应届生身份?应届生的身份有多重要?
  3. [悦读] 让听得见炮声的人来决策——《赋能》读书笔记
  4. python二级考试难不难_计算机二级python考试难吗
  5. 第11届蓝桥杯本科组校赛
  6. 记录docker修改mysql映射端口
  7. POS、银联密钥体系
  8. 学习日志-勉励自己-自律
  9. 中蜂几月份自然分蜂_蜜蜂一年自然分蜂几次?
  10. PHP万能小偷程序源码