Return 作为 ByteArrayOutputStream 而不是 FileOutputStream

Return as ByteArrayOutputStream instead of FileOutputStream

我需要从 JSON 个对象生成 PDF 文件,并且能够使用 Apache FOP 和 Java 生成 PDF 文档。但我想 return PDF 文件为 ByteArrayOutputStream 然后我必须像这样编码 Base64.getEncoder().encodeToString(baos.toByteArray()).

请在下面的代码中找到能够生成 PDF 文件的代码,而不是 FileOutputStream 我想 return 为 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;
        }

我对你的问题有点困惑。 我没有使用过 Apache Fop,但会尝试回答这个问题。

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

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

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