在Java中构建PDF,导出到文件夹

时间:2013-08-12 14:46:00

标签: java pdf xsl-fo apache-fop

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

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

Apache FOP XML - XLS-FO generates invalid 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文件?

1 个答案:

答案 0 :(得分:1)

我之前遇到过关于FopFactory和MIME_CONSTANTS的关于通过我的IDE捕获错误的问题,但最终它无论IDE的声明如何都能正常工作。您添加到路径中的一些罐子之间可能存在相互矛盾的定义,但如果您使用FOP的稳定版本并且只添加了随附的罐子,则不应该存在问题。至于如何使用你的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提供的示例,以便更好地了解您已经发生的事情。