0

我正在使用 APACHE FOP (v. 1.0) 和 XSL-FO 模板来构建 PDF。我想要做的是将此 PDF 导出到一个外部文件(最终是一个服务器文件,但现在只是我桌面上的一个文件夹)。

我知道的 XSL 代码工作正常,但问题是它目前只呈现由 servlet 处理的 Web PDF(使用 . 我想要创建的是一个独立的文件。

Apache FOP XML - XLS-FO 生成无效的 pdf

这个先前的问题为我提供了一些指导,但我似乎无法将 FopFactory 或 MimeConstsants 导入我的代码。是否有一些我可能缺少的先决条件导入?还是我们的 FOP 版本没有我希望的那么强大?

到目前为止的代码(从包含适当 xsl-fo 代码的 StringBuffer 开始)

String stringReadFromReader = buff.toString();

File tmp = new File("[Desktop Directory]" );
FileOutputStream stream = new FileOutputStream(tmp);

stream.write(stringReadFromReader.getBytes());
stream.close();

StringReader reader = new StringReader(buff.toString());

InputSource isource = new InputSource(reader);
InputSourceDocument isDoc = new InputSourceDocument();

isDoc.setMimeType("application/pdf");
isDoc.setInputSource(isource);

总而言之:如何获取原始 xsl-FO 代码并生成 PDF 文件?

4

1 回答 1

1

我之前在通过我的 IDE 捕获有关 FopFactory 和 MIME_CONSTANTS 的错误时遇到了问题,但最终它不管 IDE 的声明如何都能正常工作。您添加到路径中的一些 jar 之间的定义也可能存在冲突,但如果您使用的是 FOP 的稳定版本并且只是添加了其中包含的 jar,则应该没有问题。至于如何使用您的 java 代码生成 PDF 来调用 FOP 并传入您的 xsl-fo 文件,这应该让您开始......

File xmlfile = new File(xmlFile);
File xsltfile = new File(xslFile);
File pdffile = new File(outDir, outputPDF);
//make your fop factory
final FopFactory fopFactory = FopFactory.newInstance(new File(".").toURI());


FOUserAgent foUserAgent = fopFactory.newFOUserAgent();


// Setup output
OutputStream out = new java.io.FileOutputStream(pdffile);
out = new java.io.BufferedOutputStream(out);

try {
            // Construct fop with desired output format
            Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out);

            // Setup XSLT
            TransformerFactory factory = TransformerFactory.newInstance();
            Transformer transformer = factory.newTransformer(new StreamSource(xsltfile));


            transformer.setParameter("versionParam", "2.0");

            // Setup input for transformations to take effect upon
            Source src = new StreamSource(xmlfile);

            // Generated FO file needs to be passed along to FOP
            Result res = new SAXResult(fop.getDefaultHandler());

            // Start XSLT transformation and FOP processing
            transformer.transform(src, res);
   } finally {
            out.close();
   }

上面的代码显示了如何设置工厂并将参数输入到 FOP,其中 xmlFile、outputPDF 和 xslFile 是文件的路径。希望这会有所帮助...

我强烈建议您查看 Apache 提供的示例,以便更好地了解正在发生的事情(如果您还没有的话)。

于 2013-08-14T20:30:14.380 回答