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文档相关推荐

  1. Apache PDFbox开发指南之PDF文档读取

    转载请注明来源:http://blog.csdn.net/loongshawn/article/details/51542309 相关文章: <Apache PDFbox开发指南之PDF文本内容 ...

  2. Office2007如何将Word文档转换PDF文档

    今天有需求将Word文档转换PDF文档,而公司安装的Office 2007自带没有另存PDF文档功能,所以我们要先给Office 2007 安装一个加载项,就能导出文件并将其保存为 PDF 或 XPS ...

  3. java实现word文档转换pdf文档并且添加水印功能使用插件Aspose.Words

    前段时间,项目需要自动生成word文档,用WordFreeMarker生成word文档后,又要求生成的文档能在浏览器浏览,思来想去,把word文档转成pdf就好了,于是乎研究了一下. 将word文档转 ...

  4. Java使用 PDFBox 2.0 从 PDF 文档中读取所有文本

    在本教程中,我们将学习在 Java 程序中使用 PDFBox 2.0 库从 pdf 文档中读取所有文本. PDF 文档可能包含文本.嵌入图像等作为其内容.PDFBox 中的 PDFTextStripp ...

  5. Python 技术篇-利用pdfkit库实现html格式文件转换PDF文档实例演示

    准备: 首先需要安装 pdfkit 库,使用 pip install pdfkit 命令就好了. 还需要安装 wkhtmltopdf 工具,本质就是利用这个工具来进行转换,pdfkit 库就是作为接口 ...

  6. pdfbox创建pdf_PDFBox创建PDF文档

    现在让我们了解如何使用PDFBox库创建PDF文档. 创建一个空的PDF文档 可以通过实例化PDDocument类来创建一个空的PDF文档.使用这个类的Save()方法将文档保存在所需的位置. 以下是 ...

  7. java实现Word文档转换PDF文档

    最近需要实现在java语言Word文档转成PDF文档的功能,做了一下调研,最后使用aspose-words实现了该功能. 注意,aspose-words 为商业软件,本文仅是使用方法的demo,使用的 ...

  8. unity 利用iTextSharp 开发doc转换pdf文档

    1:将iTextSharp插件导入到unity->Asset文件夹下面 2:新建一个脚本,取名为ExportPDF,此脚本用于配置pdf文档的前期工作,以及用于接收其他脚本递交过来的数据 < ...

  9. java调用libreoffice_JAVA实现LibreOffice转换PDF文档

    首先,安装LibreOffice服务 使用.LibreOfficeAndJodconverter.java package com.jalor.LibreOffice; import java.io. ...

  10. 在线ppt文件格式转换pdf文档文件

    在线共享文件转换器是非常具有使用价值的在线工具,它可以把不同属性的文件格式转变成为我们熟悉或喜欢的格式,以符合我们的习惯.该平台对我们这些不愿意安装大软件的人来说,无疑是一个便捷的转换工具. 迅捷在线 ...

最新文章

  1. MySQL EXPLAIN Extra列的信息
  2. VS2010Web默认的浏览器设置和VS里调试JavaScript代码的设置
  3. JavaScript基础8——弹窗案例
  4. 每日软件进度报告—12月6日
  5. 上传项目到gitHub,上传报错和删除gitHub上的项目
  6. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (四) —— ContentProvider...
  7. java holder 遍历_复合组件editableValueHolder与Bean验证不一致
  8. python的序列包括字符串列表和什么_Python基础:03序列:字符串、列表和元组
  9. linux 魔术分区,Parted Magic-Linux 中的分区魔术师
  10. HDU 3081Marriage Match II(二分法+并检查集合+网络流量的最大流量)
  11. 矿区无人机影像地物提取(语义分割)
  12. (4)数据结构-线性表补充
  13. 国产三维CAD/CAM软件SINOVATION10.2版本发布,亮点功能抢先看!
  14. oom killer lmkd killer
  15. 铺管家教育:拼多多如何提升星级
  16. 乱斗西游小白龙技能预设释放顺序
  17. 千岛湖自助游记--给力
  18. 行业了解——挂耳咖啡
  19. R mean() 函数 - 计算平均值
  20. John破解Linux哈希密码文件

热门文章

  1. OAuth2.0的refresh token
  2. java访问邮箱 apache,关于apache common-mail发邮件,部分邮箱无法接收有关问题
  3. java加密方案:Virbox Protector Java版-全新保护方案
  4. 智遥工作流是如何模拟并优化办公单据审批的
  5. MDCC为移动开发者服务:一看、一聊、一聚
  6. VMware ESX Server常用命令行
  7. 在嵌入式开发中如何提高自己的代码水平
  8. 牛客网暑期ACM多校训练营(第三场) J.Distance to Work 计算几何
  9. lending club 贷款逾期分析
  10. 百度AI开放平台,共建AI生态