我需要从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;
}
答案 0 :(得分:1)
我对你的要求感到有些困惑。 我没有使用Apache Fop,但会尝试回答这个问题。
如果要将PDF文件作为字节数组读取,请改用输入流。
但是如果你想使用写字节的ByteArrayOutputStream你基本上回答了你自己的问题,尝试使用你最初创建的现有BAOS,并在FileOutputStream中使用,假设字节数组输出流通过某些InputStream读取字节或其他一些来源。第二个假设是BAOS和FOS能够正确地编写您正在谈论的PDF文件。 你可以这样做:
byte[] b = outStream.toByteArray();
String str = Base64.getEncoder().encodeToString(b);