pdfbox / XSL + FOP 转换 PDF文档

news2025/5/16 9:43:34

XSL-FO是XSL Formatting Objects的缩写,它是一种用于文档格式的XML 置标语言。XSL-FO是XSL的一部分,而XSL是一组定义XML数据转换与格式的W3C技术。XSL的其他部分有XSLT与XPath。

XSL-FO是用于格式化XML数据的语言,全称为Extensible Stylesheet Language Formatting Objects(格式化对象的可扩展样式表语言),是W3C参考标准。通常叫做XSL

XSL-FO文档结构

        XSL-FO文档是XML文档,但是不必遵循DTD或其模型规范。相反,它们遵循XSL-FO规范中定义的语法。
        XSL-FO文档包括两个必须部分。第一部分列出页面布局的细节,第二部分是带有置标的文档数据,根据不同的页面布局确定如何在不同的页面上摆放内容。

XSL-FO 区域

        XSL 格式化模型定义了一系列的矩形区域(框)来显示输出区域

  • Pages(页面)

  • Regions(区)

  • Block areas(块区域)

  • Line areas(行区域)

  • Inline areas(行内区域)

XSL-FO Pages(页面)

        XSL-FO 输出会被格式化到页面中。打印输出通常会分为许多分割的页面。浏览器输出经常会成为一个长的页面。

        XSL-FO Pages(页面)包含区(Region)

XSL-FO Regions(区)

        每个 XSL-FO 页面均包含一系列的 Regions(区):

  • region-body(页面的主体)

  • region-before(页面的页眉)

  • region-after(页面的页脚)

  • region-start(左侧栏)

  • region-end(右侧栏)

        XSL-FO Regions(区)包含块区域(Block Area)

XSL-FO Block Areas(块区域)

        XSL-FO Block Areas(块区域)定义了小的块元素(通常由一个新行开始),比如段落、表格以及列表。

        XSL-FO Block Areas(块区域)包含其他的块区域,不过大多数时候它们包含的是行区域(Line Area)

XSL-FO Line Areas(行区域)

        XSL-FO Line Areas(行区域)定义了块区域内部的文本行。

        XSL-FO Line Areas(行区域)包含行内区域(Inline Area)。

XSL-FO Inline Areas(行内区域)

XSL-FO Inline Areas(行内区域)定义了行内部的文本(着重号、单字符、图像,等等)。

XSL-FO 文档

XSL-FO 文档是带有输出信息的 XML 文件。
XSL-FO 文档是带有输出信息的 XML 文件。它们包含着有关输出布局以及输出内容的信息。
XSL-FO 文档存储在以 .fo 或 .fob 为后缀的文件中。以 .xml 为后缀存储的 XSL-FO 文档也很常见,这样做的话可以使 XSL-FO 文档更易被 XML 编辑器存取。

 FOP是由xsl 格式化对象(XSL-FO)推动世界第一个打印格式化程序

1、第二部分被称做xsl -FO,或者简单地说,格式化对象(FO)。

2、xsl格式化对象(XSL - FO)标准是XSL标准中最鲜为人知的部分之一(人们更熟悉的部分是XSLT)。

 3、XSL-FO是一种XML格式,可以被任何用户代理用于严格按照开发者给定的规范呈现内容。 

 4、n —用于整数位,以告知格式化程序将此Number对象转变成一个数字。  

 5、要将这段摘录格式化为两边缩进的段,可使用以下XSL - fo标记。  

一、将 XML 文档转换为 PDF 文件需要两个基本步骤:
1)用 XSLT 样式表将 XML 文档转换为由 XSL-FO 元素构成的文件。要执行这一转换,只需用调用 XSLT 处理器。
2)用某种显示引擎将 XSL-FO 元素转换为 PDF 文件

二、XSL-FO 文档定义了制作高质量可打印文档时非常重要的几件事情:
1)有关页面的实际大小的信息(信纸和 A4 等等)
2)有关页边距(顶部、左边、底部和右边)、页眉和页脚和页面其它特性的信息
3)有关文本的字体、字体大小、颜色和其它特征的信息
4)要打印的实际文本,由描述段落、突出显示、表等类似物的元素来标记

三、XSL-FO文档结构

<fo:root> 元素包含 <fo:layout-master-set> 和 <fo:page-sequence>。
<fo:layout-master-set> 通常包含关于页面布局的信息,而 <fo:page-sequence> 包含您正在格式化的实际内容

四、示例讲解

sample.fo说明
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">根元素<fo:root>,fo为命名空间前缀,包含一个 <fo:layout-master-set>,然后是一个或多个 <fo:page-sequence>。
  <fo:layout-master-set>指定页面定义,可以使用 <fo:simple-page-master> 元素来定义所需的每一种页面布局.
    <fo:simple-page-master master-name="main" 定义某个特定页面的布局, maste-name是该页面master的名称。
      margin-top="36pt" margin-bottom="36pt" 页面顶底边距
      page-width="8.5in" page-height="11in" 页面实际宽高
      margin-left="72pt" margin-right="72pt">页面左右边距
      <fo:region-body margin-bottom="50pt" margin-top="50pt"/>为 region-body 区域定义了长度为 50 点的顶部和底部页边距,页面上还有region-before/region-after/region-start/region-end四区域。
    </fo:simple-page-master>
  </fo:layout-master-set>
  <fo:page-sequence master-reference="main"><fo:page-sequence> 定义文档内使用的页面布局的序列,此处将main用于所有页面
    <fo:flow flow-name="xsl-region-body"><fo:flow>定义在指定区域内显示的内容, 由于显示引擎(如fop)可以自动或据指定规则计算换行、分栏、分页符, 故称之为流。
      <fo:block font-size="14pt" line-height="17pt"><fo:block> 是最基本的元素,用于格式化一个文本块, 它类似于 HTML 中的 p 元素<fo:block> 元素总是会产生一个换行。此处定义字体大小和行高,有行间距为3,此值一般为3-6。
        This is a paragraph of text.  Notice that as 
        <fo:inline font-style="italic">this meaningless <fo:inline> 在现有 <fo:block> 内定义一些新的文本特性.
          prose</fo:inline> drones on and on, the FOP 
        software automatically calculates line breaks for us.  
        Isn't that fascinating?
      </fo:block>
    </fo:flow>
  </fo:page-sequence>
</fo:root>

参考文献:
        1、FOP主页:Apache(tm) FOP - a print formatter driven by XSL formatting objects (XSL-FO) and an output independent formatter.
       2、 XSL 格式化对象(XSL-FO)基础知识
http://www-900.ibm.com/developerWorks/cn/cnedu.nsf/xml-onlinecourse-bytitle/3B308072632F949FC8256D320006CA3F?OpenDocument
       3、 XSL规范:Extensible Stylesheet Language (XSL) Version 1.1

       4、XSL-FO 教程: XSL-FO 教程 | 菜鸟教程

        5、pdfbox:Apache PDFBox | A Java PDF Library

PDFBox - 快速指南_学习PDFbox|WIKI教程

         6、了解XML、XSL、XSLT、Cascading Style Sheets、XHTML

x-easypdf: 一个用搭积木的方式构建pdf的框架(基于pdfbox/fop)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/135559.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python基础讲解 02

人工智能学习基础四剑客&#xff08;库&#xff09;Numpy ( Numerical Python)使用创建随机数组查看数组的属性数组与标量之间的计算四剑客&#xff08;库&#xff09; Python被大量应用在数据挖掘和深度学习领域,其中使用极其广泛的是Numpy&#xff08;N维数组对象和向量运算&…

Nessus学习

攻击主机&#xff1a; Kali 192.168.11.106靶机&#xff1a;windows server 2008 r2 192.168.11.134 x64 32位nessus实验原理&#xff1a;利用漏洞扫描器能够自动应用漏洞扫描原理&#xff0c;对目标主机安全漏洞进行检测&#xff0c;附带识别主机漏洞的特征库的功能&#xf…

使用客户端证书登录MySQL

使用客户端证书登录MySQL登录MySQL具有安全性高、不用输入密码的优点&#xff0c;这里说明生成证书和登录的过程。 实验环境是Linux上的的MySQL 8.0.31社区版。 生成证书 使用openssl req创建X.509证书&#xff0c;下面的命令创建有效期10年的私钥&#xff0c;使用man req可…

Kali Linux中shutdown指令的用法3-3

3 TIME介绍 TIME是shutdown指令的第二个参数&#xff0c;用来表示实现关机计划的时间&#xff0c;如果不指定TIME&#xff0c;则默认是1分钟之后实现关机计划。 3.1 通过hh:mm格式指定时间 可以通过hh:mm格式指定关机的具体时间&#xff0c;其中hh表示小时&#xff0c;mm表示…

CredSSP加密数据库修正

新部署的机器&#xff0c;远程登录时&#xff0c;提示如下&#xff1a; 原因是注册表里面缺少东西&#xff0c;新建一个文本文件&#xff0c;复制如下内容保存&#xff0c;然后将保存的文本文件保存为后缀为reg的可执行文件 Windows Registry Editor Version 5.00[HKEY_LOCAL_…

【Django项目开发】权限相关的模型设计(五)

文章目录一、什么是权限二、RBAC模型三、权限模型类设计1、需要设计那些字段2、特别注意四、角色模型类设计1、需要定义的字段有2、 多对多模型类设计(重点)五、用户模型类设计(前面已经设计好了)六、菜单模型类设计(前面已经设计好了)七、总结:上面4个表的关联关系为:如下八、…

Spring注解详解(使用注解的方式完成IOC)

补充&#xff1a;xml配置 最开始(Spring 1.x)&#xff0c;Spring都是通过xml配置控制层(controller)--业务逻辑层(service)--dao层--数据源的关系&#xff0c;但是比较复杂 Spring 2.x的时候&#xff0c;随着JDK1.5支持注解的方式&#xff0c;实现了 "xml 注解" 的开…

Vue自定义指令,自定义插件,过滤器,混入,nextTick

自定义指令&#xff1a;自己定义类似指令的技术。V-开关的特殊属性&#xff0c;是一个对象&#xff0c;自己定义其作用。 指令: v-特殊属性 * vue内置指令: v-html v-text v-pre * v-bind v-on v-if v-show v-for …

我的前端学习经历

我最近在开发一个NFT相关的Saas&#xff0c;部分截图如下&#xff1a;这是我一段时间前&#xff0c;朋友圈发的图&#xff0c;现在Saas在页面上有点变化&#xff0c;但懒得再截图了。客观而言&#xff0c;布局还可以&#xff0c;这一套的技术栈是&#xff1a;React TailwindCs…

​无线数据终端DTU的电路防护元器件推荐产品型号

​无线数据终端DTU是专门用于将串行数据转换为IP数据或将IP数据转换为串行数据通过无线通信网络传输的无线终端设备&#xff0c;因此对于它来说ESD静电放电及雷击浪涌的防护显得尤其重要。 DTU已广泛应用于电力、环保、LED信息发布、物流、水文、气象等行业&#xff0c;其硬件…

【人工智能原理自学】方差代价函数:知错

&#x1f60a;你好&#xff0c;我是小航&#xff0c;一个正在变秃、变强的文艺倾年。 &#x1f514;笔记来自B站UP主Ele实验室的《小白也能听懂的人工智能原理》。 &#x1f514;本文讲解一元一次函数感知器&#xff1a;如何描述直觉&#xff0c;一起卷起来叭&#xff01; 目录…

[oeasy]python0037_字符画艺术_asciiview_自制小动物_imagick_asciiart

牛说(cowsay) 回忆上次内容 我们狂飙了一路 从用shell 直接执行 python程序到用shell 循环执行 python程序 循环体中 把 python的 输出结果 用管道 交给了 figlet 把 figlet的 输出结果 用管道 交给了 cowsay 把 cowsay的 输出结果 用管道 交给了 lolcat 最后 提权 直接运行 s…

课程设计 | 学生成绩管理系统

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…

减小 Go 代码编译后的二进制体积

1 基线用例 减小编译后的二进制的体积&#xff0c;能够加快程序的发布和安装过程。接下来呢&#xff0c;我们分别从编译选项和第三方压缩工具两方面来介绍如何有效地减小 Go 语言编译后的体积。 我们采用同一个测试工程来测试不同方式的效果。 使用的测试工程如下&#xff0…

SQL全自动化检查神器

介绍 Yearning MYSQL 是一个SQL语句审核平台。提供查询审计&#xff0c;SQL审核等多种功能&#xff0c;支持Mysql&#xff0c;可以在一定程度上解决运维与开发之间的那一环&#xff0c;功能丰富&#xff0c;代码开源&#xff0c;安装部署容易&#xff01; 功能介绍 SQL查询查询…

Prometheus配合 alertmanager 使用邮箱报警

部署Prometheus 和 Alertmanager略 安装包部署prometheusGrafananode_exporter_争取不加班&#xff01;的博客-CSDN博客 prometheus监控报警部署Alertmanager_争取不加班&#xff01;的博客-CSDN博客 编辑Alertmanager配置文件 vim alertmanager/alertmanager.yml global: res…

MySQL高可用之主备同步:MySQL是如何保证主备一致的

&#x1f3c6;今日学习目标&#xff1a; &#x1f340;MySql是如何保证主备一致的 ✅创作者&#xff1a;林在闪闪发光 ⏰预计时间&#xff1a;30分钟 &#x1f389;个人主页&#xff1a;林在闪闪发光的个人主页 &#x1f341;林在闪闪发光的个人社区&#xff0c;欢迎你的加入:…

【Java编程进阶】封装继承多态详解

推荐学习专栏:Java 编程进阶之路【从入门到精通】 文章目录 1. 封装2. 继承2.1 继承的语法2.2 子类重写父类的方法2.3 子类隐藏父类的方法2.4 super 关键字2.5 final 关键字2.6 父类子类类型转换3. 多态4. 总结Java 是一门面向对象程序设计语言,其具有封装,继承和多态三大特…

面向对象的特征之三:多态性

文章目录一、理解多态性二、什么是多态性三、多态性的使用——虚拟方法调用四、多态性使用前提五、适用范围六、虚拟方法调用详细介绍多态性是编译期的还是运行期的&#xff1f;举例每日一考七、instanceof关键字的使用引入&#xff1a;关于多态性的讨论向下转型&#xff1a;in…

Linux-7 文本编辑vi/vim

Linux-7 文本编辑vi/vim vim介绍 什么是vim&#xff1f; vi和vim是Linux下的一个文本编辑工具。&#xff08;可以李姐为Windows的记事本或word文档&#xff09; 为什么要使用vim&#xff1f; 因为Linux系统一切皆为文件&#xff0c;而我们工作最多的就是修改某个服务的配置&a…