fop包中提供了很多example,以最简单的一个开始学习。
simple.fo
<?xml version="1.0" encoding="utf-8"?> <!-- XSL-FO 文档属于 XML 文档,因为也需要以 XML 声明来起始: --> <!-- fo:root 元素是 XSL-FO 文档的根元素。这个根元素也要声明 XSL-FO 的命名空间 --> <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> <!-- fo:layout-master-set 元素含有一个或多个页面模板 --> <fo:layout-master-set> <!-- layout information --> <fo:simple-page-master master-name="simple" #每个模板须有一个唯一的名称(master-name) page-height="29.7cm" #页面高度 page-width="21cm" #页面宽度 margin-top="1cm" #页面上边距 margin-bottom="2cm" #页面下边距 margin-left="2.5cm" #页面左边距 margin-right="2.5cm"> #页面右边距 <fo:region-body margin-top="3cm"/> #主体区 <fo:region-before extent="3cm"/> #页眉 <fo:region-after extent="1.5cm"/> #页脚 </fo:simple-page-master> </fo:layout-master-set> <!-- end: defines page layout --> <!-- 页面,关联到定义好的page-master --> <fo:page-sequence master-reference="simple"> <fo:flow flow-name="xsl-region-body"> <!-- this defines a title --> <fo:block font-size="18pt" #字号 font-family="sans-serif" #字体 line-height="24pt" #行高 space-after.optimum="15pt" #块间距 background-color="blue" #背景颜色 color="white" #字体颜色 text-align="center" #文本对齐 padding-top="3pt"> #内容区域与边框之间的区域 Extensible Markup Language (XML) 1.0 </fo:block> <!-- this defines normal text --> <fo:block font-size="12pt" #字号 font-family="sans-serif" #字体 line-height="15pt"#行高 space-after.optimum="3pt" #块间距 text-align="justify"> #内容自动调整,拉伸填满行 The Extensible Markup Language (XML) is a subset of SGML that is completely described in this document. Its goal is to enable generic SGML to be served, received, and processed on the Web in the way that is now possible with HTML. XML has been designed for ease of implementation and for interoperability with both SGML and HTML. </fo:block> <!-- this defines normal text --> <fo:block font-size="12pt" #字号 font-family="sans-serif" #字体 line-height="15pt" #行高 space-after.optimum="3pt" #块间距 text-align="justify"> #内容自适应,按空间自动调节间隔大小 The Extensible Markup Language (XML) is a subset of SGML that is completely described in this document. Its goal is to enable generic SGML to be served, received, and processed on the Web in the way that is now possible with HTML. XML has been designed for ease of implementation and for interoperability with both SGML and HTML. </fo:block> </fo:flow> <!-- closes the flow element--> </fo:page-sequence> <!-- closes the page-sequence --> </fo:root>
使用FOP将XSL-FO转换为PDF
import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.sax.SAXResult; import javax.xml.transform.stream.StreamSource; import org.apache.fop.apps.Fop; import org.apache.fop.apps.FopFactory; import org.apache.fop.apps.MimeConstants; public class FopService { /** * * @param src fo文件路径 * @param dest 将要生成的pdf路径和文件名 * @throws Exception * >>Step 1: 创建一个新的FopFactory实例。 FopFactory实例保存配置信息和缓存数据的引用。如果你打算在一个JVM运行期间渲染多个文件,重用该实例对象是非要重要的。 * * >>Step 2: 为将要生成的文件设置一个输出流,使用缓冲区来处理流数据是一个不错的方式 * * >>Step 3:通过FopFactory的工厂方法创建Fop实例,你需要为FopFactory指定需要得到的文件类型,可以通过MIME类型来进行指定,可以使用MimeConstants定义好的常量进行说明。第2个参数是Setp2中所指定的输出流对象 * * >>Step 4: [JAXP:Java API for XML Processing] 获取JAXP的转换对象 * * >>Step 5: 为JAXP准备输入和输出参数 * * >>Step 6: JAXP与FOP合作,将输出流传递给FOP,由FOP来生成PDF,当transform()执行完成后,pdf也生成完毕 * * 最后,关闭流。 */ public static void convertFO2PDF(String src, String dest) throws Exception{ InputStream fo = new FileInputStream(src); File pdf = new File(dest); // Step 1: Construct a FopFactory // (reuse if you plan to render multiple documents!) FopFactory fopFactory = FopFactory.newInstance(); // Step 2: Set up output stream. // Note: Using BufferedOutputStream for performance reasons (helpful with FileOutputStreams). OutputStream out = new BufferedOutputStream(new FileOutputStream(pdf)); try { // Step 3: Construct fop with desired output format //根据fopFactory工厂创建fop实例。指定需要的类型,以及最后生成的文件存放目录 Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out); // Step 4: Setup JAXP using identity transformer TransformerFactory factory = TransformerFactory.newInstance(); Transformer transformer = factory.newTransformer(); // Step 5: Setup input and output for XSLT transformation // Setup input stream Source xmlSource = new StreamSource(fo); // Resulting SAX events (the generated FO) must be piped through to FOP Result outputTarget = new SAXResult(fop.getDefaultHandler()); // Step 6: Start XSLT transformation and FOP processing transformer.transform(xmlSource, outputTarget); } finally { //Clean-up out.close(); } } }
测试
public class Test { @org.junit.Test public void test() throws Exception{ String base = System.getProperty("user.dir")+"/resource/"; String src = base+"simple.fo"; String dest = src+".pdf"; FopService.convertFO2PDF(src, dest); } }
生成的PDF:
相关推荐
XSL-Format Object(XSL-FO)是W3C推荐的一种格式化对象语言,它用于将XML文档转换为各种呈现媒介,如PDF、HTML、RTF等。本篇文章将深入探讨XSL-FO的高级技术,帮助读者掌握如何利用这一强大的工具进行复杂的文档...
有了XSL-FO文件后,可以通过FOP命令行工具将其转换为PDF: ```bash fop -xml your_file.fo -pdf output.pdf ``` 这将在当前目录下生成一个名为`output.pdf`的PDF文件。 **5. 示例代码** 在实际开发中,可能需要...
7. XSL-FO(XSL Formatting Objects):用于创建打印和屏幕上的布局。 8. XLink(XML Linking Language):用于创建XML文档之间的链接。 9. XPointer:用于引用XML文档内的部分或片段。 SOAP(Simple Object Access...
6. XSL (Extensible Stylesheet Language):XSL包括两部分,XSLT(转换)和XSL-FO(格式化对象)。XSLT用于将XML文档转换成其他XML文档、HTML或纯文本等格式。试卷中提到的<xsl:template>,<xsl:copy>,<xsl:value-...
在“XSL.rar”压缩包中,包含了一份名为“XSL参考.pdf”的详细教程,这可能是XML和XSL技术的深入学习资料。这份手册通常会涵盖XSL的基础概念,如选择器(selectors)、模板(templates)、变量(variables)、函数...
5. XSL-FO和PDF生成:了解如何使用XSL-FO创建打印友好的文档,以及如何生成PDF。 6. 实际项目开发:通过实例练习,将所学应用于实际的Web页面或应用程序开发,提高综合运用能力。 在Web编程实作教程中,读者将逐步...
2. **XSL的组成**:包括XSL Transformations (XSLT)用于转换,XSL Formatting Objects (XSL-FO)用于格式化输出,以及XPath用于在XML文档中查找数据。 3. **XSLT的语法**:介绍模板规则、选择符、模式匹配、变量和...
"06表现与转换2-XSLT.doc"和"06表现与转换3-XSL-FO.doc"涉及到了XSL(Extensible Stylesheet Language),特别是XSLT(XSL Transformations)和XSL-FO(XSL Formatting Objects)。XSLT用于转换XML文档,可以将XML...
- **XSL-FO(XSL Formatting Objects)**: - 用于控制XML文档输出格式的语言。 - 通常用于生成高质量的打印文档。 ### XML与Web服务 - **SOAP(Simple Object Access Protocol)**: - 是一种基于XML的协议,...
- XSL-FO(XSL Formatting Objects)是XSL的一部分,用于定义页面布局和呈现,常用于生成PDF或其他打印输出。 4. XML Schema与DTD: - DTD(Document Type Definition)是XML的早期验证机制,用于定义元素、属性...
3. **XSL-FO(XSL Formatting Objects)**:XSL-FO是一种专门用于控制XML文档输出格式的语言,如字体、颜色、布局等,主要用于生成PDF等固定格式的文档。 ##### 2. 基于XML的数据处理 基于XML的数据处理主要涉及...
XSLT用于将XML文档转换成其他格式,如HTML或PDF,而XSL-FO则定义了如何将XML数据打印或呈现出来。 五、XML在业务中的应用 1. 数据交换:XML常用于不同系统间的接口数据交换,如Web服务(Web Services)的SOAP协议...
XSLT用于将XML文档转换为其他形式的文档,XPath则提供了一种在XML文档中定位节点的方法,而XSL-FO定义了XML的呈现方式。 【基于 XML 的数据处理】 1. XML 解析:XML解析包括SAX(Simple API for XML)和DOM...
9. XSL-FO(XSL Formatting Objects): XSL-FO是用于生成打印和屏幕呈现的格式化对象。它可以结合XSLT将XML转换为符合印刷标准的格式。 10. 易语言XML支持模块: 易语言是一款国产的编程语言,其XML支持模块提供...
XSL-FO可以转换为PDF、HTML等格式,使得XML数据能以打印友好的方式呈现。 在高级编程方面,我们还将学习如何使用DOM(Document Object Model)和SAX(Simple API for XML)解析XML文档。DOM将整个XML文档加载到内存...
XSL-FO用于将XML数据转换为页面布局格式,如PDF、PostScript等。 12. XML在Web服务中的应用 XML与SOAP(Simple Object Access Protocol)和WSDL(Web Services Description Language)一起构成了Web服务的基础,使...
以上是基于《XML入门》.pdf文件信息整理出来的关键知识点,这些知识点涵盖了XML的基本概念、文档结构、命名规则以及与XSLT、XSL、数据库和命名空间的关系,对于初学者来说,是理解XML及其应用的重要基础。
4. **XSLT与XSL-FO**:XSLT用于转换XML文档,而XSL-FO用于将XML数据格式化为可打印的布局。它们在数据转换和呈现方面的作用。 5. **XML与Web服务**:XML在SOAP(Simple Object Access Protocol)和REST...
语法分析器Simple Text Markup Language Parser 是一个自定义 HTML 解析器,用于将用户输入的文本转换为格式化的 XHTML 文档,该文档可以转换为 XSL-FO,最终转换为 PDF 或 RTF。 它解析类似于标签的标签以及与生成...