为什么我收到警告消息 "Removed /IDTree from /Names dictionary, doesn't belong there"?
Why i get the warning message "Removed /IDTree from /Names dictionary, doesn't belong there"?
我的代码可以正常工作,但我在控制台上收到这条警告消息:
“从 /Names 字典中删除了 /IDTree,不属于那里”
我刚刚搜索过它,但我没有找到任何东西。
有人知道是什么导致了这条警告消息吗?
我的代码:
public static void abrirArquivoZipPdfCompleto(HttpServletResponse response, String fileName, List<ByteArrayInputStream[]> conteudosZIP)
throws Exception {
response.setContentType("application/zip");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName.replaceAll("\u0020", "_").replaceAll(",", "_") + ".zip");
ServletOutputStream out = response.getOutputStream();
ZipOutputStream zout = new ZipOutputStream(out);
Integer cont = 1;
for(ByteArrayInputStream[] conteudoArray : conteudosZIP ) {
try(PDDocument result = new PDDocument()){
PDFMergerUtility ut = new PDFMergerUtility();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
for(ByteArrayInputStream conteudo : conteudoArray) {
try (PDDocument conteudoPDDocument = PDDocument.load(conteudo)){
ut.appendDocument(result, conteudoPDDocument);
}finally {
conteudo.close();
}
}
result.save(byteArrayOutputStream);
ZipEntry ze = new ZipEntry(fileName + '_' + cont++ + ".pdf");
zout.putNextEntry(ze);
zout.write(byteArrayOutputStream.toByteArray());
zout.closeEntry();
byteArrayOutputStream.close();
}
}
zout.close();
out.close();
FacesContext.getCurrentInstance().getRenderResponse();
FacesContext.getCurrentInstance().responseComplete();
}
tl;dr:别打扰了。
该消息表明 /Name 字典中有一个 /IDTree(它是 PDF 结构树的一部分),PDFBox 删除了那个,因为它不属于这个地方。然而,这是 PDFBox 中的一个错误,它根本不检查 IDTree 是否存在。
如果 /IDtree 真的存在那么它就不会有害,唯一要做的就是检查创建该 PDF 的软件并检查它是否是最新的,然后尝试联系供应商并指向 PDF 规范。
该错误已在 PDFBOX-5100 中修复,并将在 2.0.23 中。
我已经解决了这个警告问题,包括这一行:
pmu.setDocumentMergeMode(PDFMergerUtility.DocumentMergeMode.OPTIMIZE_RESOURCES_MODE);
pmu 是 PDFMergerUtility 的一个实例。
顺便说一句,我使用的是 2.0.22 版
我的代码可以正常工作,但我在控制台上收到这条警告消息:
“从 /Names 字典中删除了 /IDTree,不属于那里”
我刚刚搜索过它,但我没有找到任何东西。 有人知道是什么导致了这条警告消息吗?
我的代码:
public static void abrirArquivoZipPdfCompleto(HttpServletResponse response, String fileName, List<ByteArrayInputStream[]> conteudosZIP)
throws Exception {
response.setContentType("application/zip");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName.replaceAll("\u0020", "_").replaceAll(",", "_") + ".zip");
ServletOutputStream out = response.getOutputStream();
ZipOutputStream zout = new ZipOutputStream(out);
Integer cont = 1;
for(ByteArrayInputStream[] conteudoArray : conteudosZIP ) {
try(PDDocument result = new PDDocument()){
PDFMergerUtility ut = new PDFMergerUtility();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
for(ByteArrayInputStream conteudo : conteudoArray) {
try (PDDocument conteudoPDDocument = PDDocument.load(conteudo)){
ut.appendDocument(result, conteudoPDDocument);
}finally {
conteudo.close();
}
}
result.save(byteArrayOutputStream);
ZipEntry ze = new ZipEntry(fileName + '_' + cont++ + ".pdf");
zout.putNextEntry(ze);
zout.write(byteArrayOutputStream.toByteArray());
zout.closeEntry();
byteArrayOutputStream.close();
}
}
zout.close();
out.close();
FacesContext.getCurrentInstance().getRenderResponse();
FacesContext.getCurrentInstance().responseComplete();
}
tl;dr:别打扰了。
该消息表明 /Name 字典中有一个 /IDTree(它是 PDF 结构树的一部分),PDFBox 删除了那个,因为它不属于这个地方。然而,这是 PDFBox 中的一个错误,它根本不检查 IDTree 是否存在。
如果 /IDtree 真的存在那么它就不会有害,唯一要做的就是检查创建该 PDF 的软件并检查它是否是最新的,然后尝试联系供应商并指向 PDF 规范。
该错误已在 PDFBOX-5100 中修复,并将在 2.0.23 中。
我已经解决了这个警告问题,包括这一行:
pmu.setDocumentMergeMode(PDFMergerUtility.DocumentMergeMode.OPTIMIZE_RESOURCES_MODE);
pmu 是 PDFMergerUtility 的一个实例。
顺便说一句,我使用的是 2.0.22 版