返回ByteArrayOutputStream而不是FileOutputStream

时间:2018-05-07 02:42:04

标签: java xsl-fo fileoutputstream apache-fop bytearrayoutputstream

我需要从JSON Objects生成PDF文件,并且能够使用Apache FOP和Java生成PDF文档。但我想将PDF文件作为ByteArrayOutputStream返回,然后我必须像Base64.getEncoder().encodeToString(baos.toByteArray())一样进行编码。

请在下面的代码中找到能够生成PDF文件的代码,而不是FileOutputStream我想要返回ByteArrayOutputStream

ByteArrayOutputStream outStream = new ByteArrayOutputStream();

        Transformer xslfoTransformer;
        try
        {
            xslfoTransformer = getTransformer(transformSource);
                Fop fop;
            try
            {
                fop = fopFactory.newFop
                    (MimeConstants.MIME_PDF, outStream);

                        Result res = new SAXResult(fop.getDefaultHandler());

                        ITextRenderer renderer = new ITextRenderer();

                try
                {
                    xslfoTransformer.transform(source, res);
                    File pdffile = new File("Result.pdf");
                    OutputStream out = new java.io.FileOutputStream(pdffile);
                                out = new java.io.BufferedOutputStream(out);
                                FileOutputStream str = new FileOutputStream(pdffile);
                                str.write(outStream.toByteArray());
                                str.close();
                                out.close();

                }
                catch (TransformerException e) {
                    throw e;
                }
            }
            catch (FOPException e) {
                throw e;
            }
        }
        catch (TransformerConfigurationException e)
        {
            throw e;
        }
        catch (TransformerFactoryConfigurationError e)
        {
            throw e;
        }

1 个答案:

答案 0 :(得分:1)

我对你的要求感到有些困惑。 我没有使用Apache Fop,但会尝试回答这个问题。

如果要将PDF文件作为字节数组读取,请改用输入流。

但是如果你想使用写字节的ByteArrayOutputStream你基本上回答了你自己的问题,尝试使用你最初创建的现有BAOS,并在FileOutputStream中使用,假设字节数组输出流通过某些InputStream读取字节或其他一些来源。第二个假设是BAOS和FOS能够正确地编写您正在谈论的PDF文件。 你可以这样做:

byte[] b = outStream.toByteArray();
String str = Base64.getEncoder().encodeToString(b);