删除 PDF 中的屏幕 reader 数据以便 Microsoft Edge 可以打开它?

Removing screen reader data in PDF so Microsoft Edge can open it?

我遇到了一个存在很长时间的 Microsoft Edge 错误,似乎没有引起任何注意:Microsoft Edge doesn’t open some PDF files if they have data for screen readers

我有一个应用程序可以生成 PDF,然后打印出来。为了支持 Microsoft Edge 并解决该错误,我正在考虑打开并删除任何使用 PDFBox 给 Edge 带来麻烦的数据。但是,这个问题的细节很少,我找不到任何关于具体触发 Edge 问题的信息。有没有人有这方面的经验,可以建议我应该删除哪些内容才能在 Edge 中打开 PDF?

[编辑]:补充一下,目前如果我下载 PDF 并在 Edge 中打开 PDF,即使我在 Chrome、IE11 或 IE11 中打开相同的本地 PDF,它仍然无法打开火狐,它工作正常。

该文件有些奇怪,如果用NOTEPAD++打开它会显示有一些数据在%%EOF之后。无论如何,试试这个代码,它删除了一些不需要的东西。

PDDocument doc = PDDocument.load(new File("myfile.pdf"));
PDDocumentCatalog cat = doc.getDocumentCatalog();
cat.getCOSObject().removeItem(COSName.PAGE_MODE);
cat.getCOSObject().removeItem(COSName.VIEWER_PREFERENCES);
PDPageTree pageTree = cat.getPages();
pageTree.getCOSObject().removeItem(COSName.PARENT);
doc.save("myfile2.pdf");

可能三个"removeItem"调用都不需要,或者只需要其中的一部分,我自己测试不了

如果还是不行,请再ping我一下,我再试试(在页面级别设置mediabox)。