Вернуть как ByteArrayOutputStream вместо FileOutputStream - PullRequest
0 голосов
/ 07 мая 2018

У меня есть требование для создания PDF-файла из объектов JSON, и я могу создавать PDF-документы, используя Apache FOP и Java. Но я хочу вернуть файл 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 голосов
/ 07 мая 2018

Я немного смущен тем, что вы спрашиваете. Я не использовал Apache Fop, но постараюсь ответить на этот вопрос.

Если вы хотите прочитать файл PDF в виде байтового массива, используйте вместо этого входные потоки.

Но если вы хотите использовать ByteArrayOutputStream, который записывает байты, вы в основном ответили на свой вопрос, попробуйте использовать существующий BAOS, который вы создали изначально и используете в FileOutputStream, при условии, что выходной поток байтового массива читает байты через некоторый InputStream или какой-то другой источник. Второе предположение заключается в том, что BAOS и FOS смогли правильно написать PDF-файл, о котором вы говорили. Вы можете просто сделать:

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