当前位置: 首页 > news >正文

关于使用flying-saucer-pdf,实现xhtml2pdf

@author Guoguo 2013.11.24

关于flying-saucer-pdf

是一个XML/CSS渲染器,flying-saucer-pdf工具以XML标准文件作为输入,CSS进行排版、样式修饰,输出a Swing Panel、图片、PDF格式文档。支持XHTML 1.0 (strict)、HTML格式,CSS 2.1 。谈到CSS,要注意屏幕样式和平面媒体样式(即打印样式)的区别;

flying-saucer-pdf依赖于itext

 

应用场景

在网站上即时下载PDF

 

局限问题

资源加载与布局是单线程的。
支持XHTML比XML + CSS,并不是所有的XHTML、HTML标签,如不支持<object>。
不支持传统的HTML或“sheet”。
支持摆动打印,但质量不足。在邮件列表上询问详情。
不支持增量布局(仅适用于屏幕媒体)。
它不能用于用户可编辑的内容;输出是只读的。
不支持HTML插件,如applet、flash程序等。
不支持脚本(如JavaScript)。
对内容的动态更改需要重新加载文档(快速但明显),不能动态地更改DOM并查看结果。
不支持JavaScript DOM回调(onload,onclick事件等)。

 

转PDF

1.加载字体,如黑体、宋体等中文字体。其它支持字体可以查看 com.lowagie.text.pdf.BaseFont类

import com.lowagie.text.pdf.BaseFont;

ITextRenderer renderer = new ITextRenderer();
FontResolver resolver = renderer.getFontResolver();
resolver.addFont (
    "C:\\WINNT\\Fonts\\ARIALUNI.TTF",
    BaseFont.IDENTITY_H,
    BaseFont.NOT_EMBEDDED
);

 

2.关于PDF每页大小,请参照CSS3打印样式https://www.w3.org/TR/css3-page/

3.关于PDF每页页边距,页眉页脚,请参照CSS3打印样式https://www.w3.org/TR/css3-page/

4.关于PDF分页

渲染时,FS有默认分页。

当然需要强制分页的,可使用

page-break-before

page-break-after

强制不分页,可使用

page-break-inside

 

5.支持bookmarks\图片

 

其它

还可以给PDF加水印、加密等制定文件属性

 

参考

官方文档:http://flyingsaucerproject.github.io/flyingsaucer/r8/guide/users-guide-R8.html

 

转载于:https://www.cnblogs.com/gsyun/p/7324316.html

相关文章:

  • 做了一个小游戏,结项目,数数坑(animate,移动端长按出现菜单,touchmove,禁止微信上下滑屏)...
  • 黑客查理·米勒:用一个按键黑掉一辆车
  • php之变量
  • 12、sed、awk、数组 学习笔记
  • MapGuide Fusion viewer中如何用Google Map/Yahoo Map/Bing Map做底图
  • RTX——第14章 信号量
  • Ubuntu12.04编译android4.3源码问题集锦
  • Android零基础入门第12节:熟悉Android Studio界面,开始装逼卖萌
  • 1570. [POJ3461]乌力波
  • ios学习之旅--oc对象的关系
  • 自己写的分页器,BOOTSTRAP+JQUERY(非完全版,后续完善)
  • spring data jpa的update操作
  • 详解java定时任务
  • day7回顾
  • Get和Post的参数传值
  • 10个确保微服务与容器安全的最佳实践
  • bearychat的java client
  • C++类的相互关联
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • fetch 从初识到应用
  • Laravel Telescope:优雅的应用调试工具
  • MD5加密原理解析及OC版原理实现
  • miaov-React 最佳入门
  • rabbitmq延迟消息示例
  • React as a UI Runtime(五、列表)
  • SSH 免密登录
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 给初学者:JavaScript 中数组操作注意点
  • 技术发展面试
  • 京东美团研发面经
  • 使用 @font-face
  • 译自由幺半群
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • 湖北分布式智能数据采集方法有哪些?
  • 交换综合实验一
  • # Panda3d 碰撞检测系统介绍
  • #Linux(帮助手册)
  • $.ajax,axios,fetch三种ajax请求的区别
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (接口自动化)Python3操作MySQL数据库
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (未解决)macOS matplotlib 中文是方框
  • (转)ObjectiveC 深浅拷贝学习
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • ***通过什么方式***网吧
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET Framework .NET Core与 .NET 的区别
  • .NET单元测试
  • .NET的微型Web框架 Nancy
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • /dev/sda2 is mounted; will not make a filesystem here!
  • [1525]字符统计2 (哈希)SDUT
  • [2015][note]基于薄向列液晶层的可调谐THz fishnet超材料快速开关——
  • [Angular 基础] - 自定义指令,深入学习 directive