PDF 的编码问题

Encoding problems with PDF

我有一个(非常简单的)java Spring Boot/REST 服务,它从输入中呈现 PDF 并使用 IntelliJ 对其进行测试。

我使用 pdfbox 作为创建此类 pdf 的工具。

一个特点是,除了它想要的常规内容之外,客户还可以 byte[] 提供附件。

问题

当用户试用该服务时,最终文档只有附件部分有空白页

调查

当我注意到 postman 运行良好时,我更改了生成的响应文件的 IntelliJ 默认文件编码(从 UTF-8 到 ISO-8859-1),然后后续文档清晰正确。 .. 不要忘记这个问题似乎只影响附件。常规内容总是没问题。

问题

其他信息

我尝试了很多字节转换都没有成功,例如:

new String(annexe, StandardCharsets.ISO_8859_1).getBytes(StandardCharsets.UTF_8);

但每次我都遇到异常:

java.io.IOException: java.util.zip.DataFormatException: invalid stored block lengths

文档作为 byte[] 发回,如下所示:

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
pdfDocument.save(outputStream);
pdfDocument.close();
return outputStream.toByteArray();

将文档保存到文件中的代码完全相同,只是给出了一个 FileOutputStream

附件是这样添加到文档中的:

for(byte[] content : annexes) {
    PDDocument annex = PDDocument.load(content);
    for (PDPage page : annex .getPages()) {
        pdfDocument.importPage(page);
    }
}

我也试过 PDFMergerUtility 但得到了相同的结果(附件空白页)

感谢 Tilman Hausherr 的建议,我尝试用 Base64.getEncoder().encode(...)byte[] 进行编码,这成功了!

客户端现在必须处理 Base64 编码的字符串,但它至少可以工作。

谢谢!