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

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

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

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

以上是关于pdfbox / XSL + FOP 转换 PDF文档的主要内容,如果未能解决你的问题,请参考以下文章

x-easypdf 基于pdfbox/fop 封装的框架

在 XSLT 中有 URL 时使用 fop 和 XSL 生成 PDF

XSL:FO / Apache FOP 中的内联图像数据

使用 FOP 生成 PDF 表单?

FOP XSL-FO 锚定在外部目的地

XSL FO 表中的粗边框线问题 - 使用 Apache FOP 创建 PDF