pdfbox / XSL + FOP 转换 PDF文档
Posted ejinxian
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pdfbox / XSL + FOP 转换 PDF文档相关的知识,希望对你有一定的参考价值。
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
6、了解XML、XSL、XSLT、Cascading Style Sheets、XHTML
x-easypdf: 一个用搭积木的方式构建pdf的框架(基于pdfbox/fop)
以上是关于pdfbox / XSL + FOP 转换 PDF文档的主要内容,如果未能解决你的问题,请参考以下文章