gpt4 book ai didi

java - PDF 的编码问题

转载 作者:行者123 更新时间:2023-12-02 09:36:00 25 4
gpt4 key购买 nike

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

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

其中一个功能是,除了所需的常规内容之外,客户端还可以以 byte[] 形式提供附件。

问题

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

调查

  • 尝试使用 IntelliJ 和 HTTP REST 客户端并遇到相同的问题
  • 将附件保存到单独的文件中可以得到清晰正确的文档
  • 将整个文档(常规内容 + 附件)保存到文件中也是正确的
  • 使用postman,文档没问题....

当我注意到 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 编码的字符串,但它至少可以工作。

谢谢!

关于java - PDF 的编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57520703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com