`
samwong
  • 浏览: 287605 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

fop生成PDF支持中文(xml & xsl)

 
阅读更多
本例可将xml格式数据按xsl模板转化为PDF 
1.首先,程序结构如下: 
 
2.FopReport.java 
Java代码  收藏代码
  1. // Step 1: Construct a FopFactory  
  2.     private static final FopFactory fopFactory = FopFactory.newInstance();  
  3.   
  4.     /** 
  5.      * 根据xsl模板及xml数据文件生成pdf 
  6.      * @param xsltFile xsl模板 
  7.      * @param xmlFile xml数据文件 
  8.      * @return ReportData 
  9.      * @throws Exception 
  10.      * @author bin.yin 2012/12/25 
  11.      */  
  12.     public static ReportData createReport(String xsltFile, String xmlFile) throws Exception {  
  13.         ReportData reportData = new ReportData();  
  14.         reportData.setContentType("application/pdf");  
  15.         fopFactory.setUserConfig("conf/fop.xml");  
  16.   
  17.         // Step 2: Set up output stream.  
  18.         ByteArrayOutputStream out = new ByteArrayOutputStream();  
  19.         try {  
  20.             // Step 3: Construct fop with desired output format  
  21.             Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out);  
  22.   
  23.             // Step 4: Setup XSLT using identity transformer  
  24.             TransformerFactory factory = TransformerFactory.newInstance();  
  25.             Transformer transformer = factory.newTransformer(new StreamSource(new File(xsltFile)));  
  26.   
  27.             // Step 5: Setup input and output for XSLT transformation  
  28.             Source src = new StreamSource(new File(xmlFile));  
  29.             // Source src = new StreamSource(new StringReader(myString));  
  30.   
  31.             // Step 6: Resulting SAX events (the generated FO) must be piped through to FOP  
  32.             Result res = new SAXResult(fop.getDefaultHandler());  
  33.   
  34.             // Step 7: Start XSLT transformation and FOP processing  
  35.             transformer.transform(src, res);  
  36.   
  37.             reportData.setData(out.toByteArray());  
  38.         } catch(Exception e) {  
  39.             throw e;  
  40.         } finally {  
  41.             out.close();  
  42.         }  
  43.         return reportData;  
  44.     }  
  45.   
  46. /** 
  47.      * 根据xsl模板及xml字节数组生成pdf 
  48.      * @param xsltFile xsl模板 
  49.      * @param bXmlData xml字节数组 eg. StringBuffer buf = new StringBuffer(); buf.getBytes("UTF-8"); 
  50.      * @return ReportData 
  51.      * @throws Exception 
  52.      * @author bin.yin 2012/12/25 
  53.      */  
  54.     public static ReportData createReport(String xsltFile, byte[] bXmlData) throws Exception {  
  55.         ReportData reportData = new ReportData();  
  56.         try {  
  57.             // convert xml bytes to a temp file  
  58.             File xmlFile = File.createTempFile("FOP"".tmp");  
  59.             FileOutputStream fos = new FileOutputStream(xmlFile);  
  60.             fos.write(bXmlData);  
  61.             fos.close();  
  62.               
  63.             reportData = createReport(xsltFile, xmlFile.getAbsolutePath());  
  64.             // delete temp file  
  65.             xmlFile.delete();  
  66.         } catch (Exception e) {  
  67.             throw e;  
  68.         }  
  69.         return reportData;  
  70.     }  

3.拼接xml文件 
Java代码  收藏代码
  1. StringBuffer buf = new StringBuffer();  
  2.             buf.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");  
  3.             buf.append("<ItemListReport>");  
  4.             buf.append("    <ReportHeader>");  
  5.             buf.append("        <Title>附加条款</Title>");  
  6.             buf.append("        <PartyA>上海信息技术有限公司B</PartyA>");  
  7.             buf.append("        <PartyB>上海信息技术有限公司B</PartyB>");  
  8.             buf.append("    </ReportHeader>");  
  9.             buf.append("    <ReportBody>");  
  10.             buf.append("        <Table>");  
  11.             buf.append("            <TableRow>");  
  12.             buf.append("                <ItemName>附加条款1</ItemName>");  
  13.             buf.append("                <ItemTime>2012-12-23 09:03</ItemTime>");  
  14.             buf.append("            </TableRow>");  
  15.             buf.append("            <TableRow>");  
  16.             buf.append("                <ItemName>上海信息技术有限公司附加条款1</ItemName>");  
  17.             buf.append("                <ItemTime>2012-12-23 09:03</ItemTime>");  
  18.             buf.append("            </TableRow>");  
  19.             buf.append("        </Table>");  
  20.             buf.append("    </ReportBody>");  
  21.             buf.append("    <ReportFooter>");  
  22.             buf.append("        <PrintDate>2012-12-12</PrintDate>");  
  23.             buf.append("        <ReportNo>010123456789</ReportNo>");  
  24.             buf.append("    </ReportFooter>");  
  25.             buf.append("</ItemListReport>");  

4.生成PDF文档 
Java代码  收藏代码
  1. ReportData data = FopReport.createReport("report\\sample\\Sample.xsl", buf.toString().getBytes("UTF-8"));  
  2.             FileOutputStream fos = new FileOutputStream("D:/sample.pdf");  

5.附字体配置fop.xml 
Java代码  收藏代码
  1. <font metrics-url="conf/fonts/SimSun.xml" kerning="yes" embed-url="conf/fonts/SimSun.ttc">  
  2.           <font-triplet name="SimSun" style="normal" weight="normal" />  
  3.           <font-triplet name="SimSun" style="normal" weight="bold" />  
  4.           <font-triplet name="SimSun" style="italic" weight="normal" />  
  5.           <font-triplet name="SimSun" style="italic" weight="bold" />  
  6.         </font>  

6.效果图如下: 
 
分享到:
评论

相关推荐

    Fop生成pdf(xsl)

    总的来说,Fop生成pdf(xsl)涉及的知识点涵盖了XML、XSL-FO、XSLT、PDF格式以及Apache FOP的使用。掌握这些技术,可以帮助开发者创建高质量的、版式固定的PDF文档,尤其适用于报表、手册、书籍等需要精确定位布局的...

    XML+XSL/FO生成PDF文件Demo

    4. **使用FOP生成PDF**:最后,FOP插件读取XSL-FO文件,根据其中的格式化指令将其转换成PDF文档。你可以通过编程接口(API)或命令行工具来调用FOP执行这个任务。 在提供的压缩包文件“Fop2Pdf”中,可能包含了XML...

    fop生成PDF

    总结起来,"FOP生成PDF"是一个涉及XML、XSL-FO和PDF转换的关键技术,它在Java环境中尤为实用,尤其对于需要生成高质量、多语言PDF报告的业务场景。通过理解和掌握这一技术,开发者可以提升他们的文档生成能力,为...

    fop转pdf中文字体配置文件

    总之,配置FOP以支持中文显示涉及对字体文件的管理、FOP配置文件的修改以及XSL-FO文档的编写。理解这些步骤和相关概念对于在FOP中成功呈现中文文档至关重要。通过以上介绍,你应该能更好地应对这一挑战,并为你的...

    Apache FOP 将Java对象转换为pdf文件

    Apache FOP(Formatting Objects Processor)是Apache软件基金会开发的一个开源项目,主要功能是将XSL-FO(XML标记语言,用于格式化文档)转换成PDF(Portable Document Format)或者其他输出格式,如SVG、PS等。...

    fopdf:从头开始使用Apache FOP生成PDF的教程代码

    可以使用FOP的日志功能,或者在生成PDF前先将XSL-FO输出,方便检查和调试。 9. **进阶使用** - 支持图片:FOP支持多种图片格式,如JPEG、PNG等,可以通过`&lt;fo:image&gt;`标签插入。 - 复杂布局:除了基本的文本和...

    XML转PDF的FOP包和代码

    2. **使用FOP处理XSL-FO**:接下来,使用Apache FOP库读取这个XSL-FO文件,进行解析并生成PDF。你可以通过Java API或者命令行工具来调用FOP。 3. **配置和定制**:FOP允许用户自定义字体、颜色、页面大小等,以满足...

    Apache Fop1.0 Pdf demp

    通过将XML数据转换成XSL-FO,然后用Fop解析这个FO文件,最终生成PDF。以下是一些关键知识点: 1. **XSL-FO**: XSL-FO是一种XML方言,用于描述文档的外观和布局,如字体、颜色、页面大小、列布局等。它是XSL...

    fop转pdf依赖的jar包

    `serializer-2.7.0.jar`包含了XML序列化相关的类,用于将XML树结构输出为流格式,这在FOP生成PDF的过程中可能需要用到。 `servlet-api.jar`虽然不是直接与FOP转换有关,但可能在Web环境中使用FOP时需要,它包含了...

    FOP PDF作成手順、例子

    使用FOP生成PDF** 有了XSL-FO文件后,可以通过FOP命令行工具将其转换为PDF: ```bash fop -xml your_file.fo -pdf output.pdf ``` 这将在当前目录下生成一个名为`output.pdf`的PDF文件。 **5. 示例代码** 在实际...

    基于java根据模板动态生成PDF文件

    Apache FOP( Formatting Objects Processor)是Apache XML Graphics项目的一部分,主要用于将XSL-FO(XSL格式化对象)转换为各种输出格式,包括PDF。如果你的模板是基于XSL-FO,那么FOP是一个很好的选择。不过,XSL...

    Fop2PDF_TEAM-AG_4.15_CodingPark.zip

    描述中提到的流程涉及到了XML、XSLT和XSL-FO,这些都是在生成PDF文档时常见的技术组件。 XML(Extensible Markup Language)是一种标记语言,常用于存储和传输结构化数据。它以易于解析的方式定义数据结构,适用于...

    使用java concurrent调用xmlp api生成pdf

    总结起来,使用`java.concurrent`调用XMLP API生成PDF涉及的关键技术包括Java并发编程、XML处理(XSLT和XSL-FO)、以及Apache FOP的使用。理解这些知识点并熟练应用,可以帮助你在开发高并发、高性能的PDF生成系统时...

    fop中文配置 (windows和Ubuntu)操作系统

    Apache FOP是一个开源的XML文档格式转换工具,主要用于将XSL-FO(XSL Formatting Objects)转换为PDF或者其他格式的文档。在处理中文文档时,正确配置FOP以显示中文字符是非常关键的。 **Windows配置** 在Windows...

    fop1.1相关资源

    4. **API集成**:FOP还提供了一个Java API,允许开发者在应用程序中直接集成FOP,以便于在处理XML数据时动态生成PDF。 5. **支持的输出格式**:除了PDF,FOP1.1还可以生成PS、PNG、JPEG、TIFF、SVG和AFP等格式的...

    fop-2.4_cn.zip

    这些都是中文排版中不可或缺的基础字体,涵盖了简体中文和繁体中文的主要样式,确保了在生成PDF或其他输出格式时,中文字符可以被正确且美观地呈现。 4. **字体集成**:在使用FOP处理包含中文的XSL-FO文档时,这些...

    java 使用ITextRenderer将html模块生成pdf文件工具类

    ITextRenderer是Apache FOP项目的一部分,它允许我们将XSL-FO(一种XML格式,用于布局和排版)转换为各种输出格式,包括PDF。下面我们将详细探讨如何使用ITextRenderer将HTML转换为PDF,并介绍相关的Java编程知识。 ...

    Apache-fop

    1. **PDF生成**:FOP是最早支持生成PDF的处理器之一,能够生成高质量、符合PDF/A标准的文档,适用于电子文档分发和打印。 2. **PostScript支持**:FOP可以生成可打印的PostScript文件,这在需要专业打印服务的场景...

    fop1.0及依赖jar包

    Apache FOP(Formatting Objects Processor)是Apache软件基金会开发的一个开源项目,主要用于将XSL-FO(XML样式表语言格式化对象)转换成各种输出格式,如PDF、PS、SVG、XML、HTML等。FOP 1.0是该项目的早期版本,...

    fop.zip_fop

    4. **Html2Pdf.java**:这是一个Java源代码文件,很可能包含了一个程序,用于将HTML文件转换成XSL-FO文件,然后使用FOP库生成PDF。它可能使用了诸如`Transformer`和`TransformerFactory`等Java的XSLT处理类。 5. **...

Global site tag (gtag.js) - Google Analytics