我正在尝试使用ApacheFop从使用xlst样式表格式化的xml文件创建一个PDF文档,以将原始xml文件转换为xml-fo格式的xml文件。作为一个简单的例子,我试图创造一个新的世界。
生成过程似乎成功(没有例外),但由于某些原因,生成的pdf文件无效。文件大小为4.8KB,当使用libreofficewriter打开时,数据肯定已写入文件,但文件不会在pdf阅读器中打开。
XML文件相当简单:
<rentalRequest>
<firstName>foo</firstName>
<lastName>bar</lastName>
<email>foo@bar.com</email>
<street>foo street</street>
<houseNo>42</houseNo>
<postalCode>4242</postalCode>
<city>bar city</city>
</rentalRequest>
XSL文件,仅尝试打印Hello World!:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="xml" indent="yes" />
<xsl:template match="/">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="all">
<fo:region-body />
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="all">
<fo:flow flow-name="xsl-region-body">
<fo:block>
Hello World!
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
</xsl:stylesheet>
使用JAXP FOP生成pdf文件的java代码:
public void buildWithXSL(String xml) throws Exception {
OutputStream out = new BufferedOutputStream(new FileOutputStream(new File("rentalrequest.pdf")));
// setup xml input source
StreamSource xmlSource =
new StreamSource(new ByteArrayInputStream(xml.getBytes()));
File xslFile = new File("src/main/resources/xml/rentalrequest2fo.xsl");
FileInputStream xslFileStream = new FileInputStream(xslFile);
StreamSource xslSource = new StreamSource(xslFileStream);
TransformerFactory tfactory = TransformerFactory.newInstance();
Transformer transformer = tfactory.newTransformer(xslSource);
FopFactory fopFactory = FopFactory.newInstance();
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out);
// perform transformation
Result res = new SAXResult(fop.getDefaultHandler());
transformer.transform(xmlSource, res);
}
生成的pdf文件可在以下位置找到:http://www.filedropper.com/rentalrequest
您得到的PDF文件不完整,因为您忘记正确地关闭
输出流
。打开OutputStream
(或InputStream
)时,请始终使用以下模式:
java prettyprint-override">OutputStream out = new [Something]OutputStream([something]);
try {
//write to the OutputStream
} finally {
out.close();
}
FO PDF 是一款C#编写类似于ASP.NET服务器控件的控件。它接受DataTable 和一些其它参数来创建XSL FO,并使用NFOP (Apache FOP Port in J#) PDF Formatter来绘制一个类似PDF Report 的DataGrid 。今后将会增加更多的标签来可以生成XSL FO 。
这篇文档阐述了如何通过使用Django视图动态输出PDF。这可以通过一个出色的、开源的Python PDF库ReportLab来实现。 动态生成PDF文件的优点是,你可以为不同目的创建自定义的PDF -- 这就是说,为不同的用户或者不同的内容。 例如,Django在kusports.com上用来为那些参加March Madness比赛的人,生成自定义的,便于打印的 NCAA 锦标赛晋级表作为PDF
问题内容: 我知道以前曾有人问过这个问题,但是我仍不确定我当前项目要使用哪种PDF生成框架。 我的要求 快速生成PDF文档(主要是订单,发票) 基于Java 易于布置 应该是开源的 易于更改布局 很多人似乎都在使用 iText ,但是除了关注点更改之外,我还有其他关注点:在HTML上下文中,有很好的MVC支持,我通常会坚持使用SpringMVC和FreeMarker来分离逻辑和布局。我有点担心,使
我已经将Ruby on Rails(Version5.2.1)与RubyMine IDE一起用于一个项目,并且处于一个开发阶段,在这个阶段我想创建一些基于PDF的报告。为此,我抓取了Prawn(2.2.2版)宝石。我设置了一个从页面下载PDF的按钮: 它被路由到相应的控制器:
问题内容: 我有一个PHP应用程序,需要用查询结果生成PDF。被发现的最简单的方法是使用DOMPDF为我生成PDF。因此,做了一个为我生成HTML的函数,然后将其传递给DOMPDF。在开发和测试环境中,一切都很好,但是在生产环境中,我在内存使用方面存在一些问题。 因此,我想知道我的策略是最好的还是有更好更好的方法来做到这一点。 你会怎么做? 问题答案: 我曾经做过一个生成PDF的PHP项目。我使用
这是我第一个使用spring Boot的项目。因此我尝试用父级更新pom.xml,如下所示: 然而,我在行中出现了一个错误: 项目生成错误:com.in28minutes的父POM不可解析。springboot:first-springboot-project:0.0.1-snapshot:找不到项目org.springframework.boot:spring-boot-starter-pare