本例可将xml格式数据按xsl模板转化为PDF
1.首先,程序结构如下:
2.FopReport.java
3.拼接xml文件
4.生成PDF文档
5.附字体配置fop.xml
6.效果图如下:
1.首先,程序结构如下:
2.FopReport.java
- // Step 1: Construct a FopFactory
- private static final FopFactory fopFactory = FopFactory.newInstance();
- /**
- * 根据xsl模板及xml数据文件生成pdf
- * @param xsltFile xsl模板
- * @param xmlFile xml数据文件
- * @return ReportData
- * @throws Exception
- * @author bin.yin 2012/12/25
- */
- public static ReportData createReport(String xsltFile, String xmlFile) throws Exception {
- ReportData reportData = new ReportData();
- reportData.setContentType("application/pdf");
- fopFactory.setUserConfig("conf/fop.xml");
- // Step 2: Set up output stream.
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- try {
- // Step 3: Construct fop with desired output format
- Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out);
- // Step 4: Setup XSLT using identity transformer
- TransformerFactory factory = TransformerFactory.newInstance();
- Transformer transformer = factory.newTransformer(new StreamSource(new File(xsltFile)));
- // Step 5: Setup input and output for XSLT transformation
- Source src = new StreamSource(new File(xmlFile));
- // Source src = new StreamSource(new StringReader(myString));
- // Step 6: Resulting SAX events (the generated FO) must be piped through to FOP
- Result res = new SAXResult(fop.getDefaultHandler());
- // Step 7: Start XSLT transformation and FOP processing
- transformer.transform(src, res);
- reportData.setData(out.toByteArray());
- } catch(Exception e) {
- throw e;
- } finally {
- out.close();
- }
- return reportData;
- }
- /**
- * 根据xsl模板及xml字节数组生成pdf
- * @param xsltFile xsl模板
- * @param bXmlData xml字节数组 eg. StringBuffer buf = new StringBuffer(); buf.getBytes("UTF-8");
- * @return ReportData
- * @throws Exception
- * @author bin.yin 2012/12/25
- */
- public static ReportData createReport(String xsltFile, byte[] bXmlData) throws Exception {
- ReportData reportData = new ReportData();
- try {
- // convert xml bytes to a temp file
- File xmlFile = File.createTempFile("FOP", ".tmp");
- FileOutputStream fos = new FileOutputStream(xmlFile);
- fos.write(bXmlData);
- fos.close();
- reportData = createReport(xsltFile, xmlFile.getAbsolutePath());
- // delete temp file
- xmlFile.delete();
- } catch (Exception e) {
- throw e;
- }
- return reportData;
- }
3.拼接xml文件
- StringBuffer buf = new StringBuffer();
- buf.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
- buf.append("<ItemListReport>");
- buf.append(" <ReportHeader>");
- buf.append(" <Title>附加条款</Title>");
- buf.append(" <PartyA>上海信息技术有限公司B</PartyA>");
- buf.append(" <PartyB>上海信息技术有限公司B</PartyB>");
- buf.append(" </ReportHeader>");
- buf.append(" <ReportBody>");
- buf.append(" <Table>");
- buf.append(" <TableRow>");
- buf.append(" <ItemName>附加条款1</ItemName>");
- buf.append(" <ItemTime>2012-12-23 09:03</ItemTime>");
- buf.append(" </TableRow>");
- buf.append(" <TableRow>");
- buf.append(" <ItemName>上海信息技术有限公司附加条款1</ItemName>");
- buf.append(" <ItemTime>2012-12-23 09:03</ItemTime>");
- buf.append(" </TableRow>");
- buf.append(" </Table>");
- buf.append(" </ReportBody>");
- buf.append(" <ReportFooter>");
- buf.append(" <PrintDate>2012-12-12</PrintDate>");
- buf.append(" <ReportNo>010123456789</ReportNo>");
- buf.append(" </ReportFooter>");
- buf.append("</ItemListReport>");
4.生成PDF文档
- ReportData data = FopReport.createReport("report\\sample\\Sample.xsl", buf.toString().getBytes("UTF-8"));
- FileOutputStream fos = new FileOutputStream("D:/sample.pdf");
5.附字体配置fop.xml
- <font metrics-url="conf/fonts/SimSun.xml" kerning="yes" embed-url="conf/fonts/SimSun.ttc">
- <font-triplet name="SimSun" style="normal" weight="normal" />
- <font-triplet name="SimSun" style="normal" weight="bold" />
- <font-triplet name="SimSun" style="italic" weight="normal" />
- <font-triplet name="SimSun" style="italic" weight="bold" />
- </font>
6.效果图如下:
相关推荐
总的来说,Fop生成pdf(xsl)涉及的知识点涵盖了XML、XSL-FO、XSLT、PDF格式以及Apache FOP的使用。掌握这些技术,可以帮助开发者创建高质量的、版式固定的PDF文档,尤其适用于报表、手册、书籍等需要精确定位布局的...
4. **使用FOP生成PDF**:最后,FOP插件读取XSL-FO文件,根据其中的格式化指令将其转换成PDF文档。你可以通过编程接口(API)或命令行工具来调用FOP执行这个任务。 在提供的压缩包文件“Fop2Pdf”中,可能包含了XML...
总结起来,"FOP生成PDF"是一个涉及XML、XSL-FO和PDF转换的关键技术,它在Java环境中尤为实用,尤其对于需要生成高质量、多语言PDF报告的业务场景。通过理解和掌握这一技术,开发者可以提升他们的文档生成能力,为...
总之,配置FOP以支持中文显示涉及对字体文件的管理、FOP配置文件的修改以及XSL-FO文档的编写。理解这些步骤和相关概念对于在FOP中成功呈现中文文档至关重要。通过以上介绍,你应该能更好地应对这一挑战,并为你的...
Apache FOP(Formatting Objects Processor)是Apache软件基金会开发的一个开源项目,主要功能是将XSL-FO(XML标记语言,用于格式化文档)转换成PDF(Portable Document Format)或者其他输出格式,如SVG、PS等。...
可以使用FOP的日志功能,或者在生成PDF前先将XSL-FO输出,方便检查和调试。 9. **进阶使用** - 支持图片:FOP支持多种图片格式,如JPEG、PNG等,可以通过`<fo:image>`标签插入。 - 复杂布局:除了基本的文本和...
2. **使用FOP处理XSL-FO**:接下来,使用Apache FOP库读取这个XSL-FO文件,进行解析并生成PDF。你可以通过Java API或者命令行工具来调用FOP。 3. **配置和定制**:FOP允许用户自定义字体、颜色、页面大小等,以满足...
通过将XML数据转换成XSL-FO,然后用Fop解析这个FO文件,最终生成PDF。以下是一些关键知识点: 1. **XSL-FO**: XSL-FO是一种XML方言,用于描述文档的外观和布局,如字体、颜色、页面大小、列布局等。它是XSL...
`serializer-2.7.0.jar`包含了XML序列化相关的类,用于将XML树结构输出为流格式,这在FOP生成PDF的过程中可能需要用到。 `servlet-api.jar`虽然不是直接与FOP转换有关,但可能在Web环境中使用FOP时需要,它包含了...
使用FOP生成PDF** 有了XSL-FO文件后,可以通过FOP命令行工具将其转换为PDF: ```bash fop -xml your_file.fo -pdf output.pdf ``` 这将在当前目录下生成一个名为`output.pdf`的PDF文件。 **5. 示例代码** 在实际...
Apache FOP( Formatting Objects Processor)是Apache XML Graphics项目的一部分,主要用于将XSL-FO(XSL格式化对象)转换为各种输出格式,包括PDF。如果你的模板是基于XSL-FO,那么FOP是一个很好的选择。不过,XSL...
描述中提到的流程涉及到了XML、XSLT和XSL-FO,这些都是在生成PDF文档时常见的技术组件。 XML(Extensible Markup Language)是一种标记语言,常用于存储和传输结构化数据。它以易于解析的方式定义数据结构,适用于...
总结起来,使用`java.concurrent`调用XMLP API生成PDF涉及的关键技术包括Java并发编程、XML处理(XSLT和XSL-FO)、以及Apache FOP的使用。理解这些知识点并熟练应用,可以帮助你在开发高并发、高性能的PDF生成系统时...
Apache FOP是一个开源的XML文档格式转换工具,主要用于将XSL-FO(XSL Formatting Objects)转换为PDF或者其他格式的文档。在处理中文文档时,正确配置FOP以显示中文字符是非常关键的。 **Windows配置** 在Windows...
4. **API集成**:FOP还提供了一个Java API,允许开发者在应用程序中直接集成FOP,以便于在处理XML数据时动态生成PDF。 5. **支持的输出格式**:除了PDF,FOP1.1还可以生成PS、PNG、JPEG、TIFF、SVG和AFP等格式的...
ITextRenderer是Apache FOP项目的一部分,它允许我们将XSL-FO(一种XML格式,用于布局和排版)转换为各种输出格式,包括PDF。下面我们将详细探讨如何使用ITextRenderer将HTML转换为PDF,并介绍相关的Java编程知识。 ...
这些都是中文排版中不可或缺的基础字体,涵盖了简体中文和繁体中文的主要样式,确保了在生成PDF或其他输出格式时,中文字符可以被正确且美观地呈现。 4. **字体集成**:在使用FOP处理包含中文的XSL-FO文档时,这些...
Apache FOP(Formatting Objects Processor)是Apache软件基金会开发的一个开源项目,主要用于将XSL-FO(XML样式表语言格式化对象)转换成各种输出格式,如PDF、PS、SVG、XML、HTML等。FOP 1.0是该项目的早期版本,...
4. **Html2Pdf.java**:这是一个Java源代码文件,很可能包含了一个程序,用于将HTML文件转换成XSL-FO文件,然后使用FOP库生成PDF。它可能使用了诸如`Transformer`和`TransformerFactory`等Java的XSLT处理类。 5. **...
1. **PDF生成**:FOP是最早支持生成PDF的处理器之一,能够生成高质量、符合PDF/A标准的文档,适用于电子文档分发和打印。 2. **PostScript支持**:FOP可以生成可打印的PostScript文件,这在需要专业打印服务的场景...