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);
我需要从 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);