Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

还有打开会失败退出的pdf类型 #39

Closed
vincentaxhe opened this issue Jun 25, 2024 · 7 comments
Closed

还有打开会失败退出的pdf类型 #39

vincentaxhe opened this issue Jun 25, 2024 · 7 comments
Labels

Comments

@vincentaxhe
Copy link

链接: https://pan.baidu.com/s/1JHQJhhiE109cG4I5GIjPMg?pwd=tm9q 提取码: tm9q

@chroming chroming added the bug label Jun 25, 2024
@chroming
Copy link
Owner

试了下确实会退出,似乎还不是简单的读取类型报错,只能周末有空再看了

@vincentaxhe
Copy link
Author

我安装pdf.tocgen,用pdftocio -H perl-cookbook.pdf是能读取出来的,它用mupdf库,可以参考下,可能也能加印刷页,mupdf可能功能更全面些。但用它制作pdf大纲不太容易,有三个命令通过管道互传的,没你的工具直观。

@vincentaxhe
Copy link
Author

vincentaxhe commented Jun 30, 2024

我使用了新的,读取不出来目录但没有失败,但写入时会失败。用'gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.5 -o out.pdf perl-cookbook.pdf' 输出1.5标准的pdf,就能读取出目录也能写入,用pdfinfo -rawdates perl-cookbook.pdf看了下转换前的pdf是1.3标准的,看来操作pdf的库适应的pdf标准是有下限的,可以测试下适应标准的范围,当失败时提供类似'pdf标准不满足1.5'之类的信息,或者做得更多,内部把它转换成更新的pdf标准。

@chroming
Copy link
Owner

chroming commented Jul 1, 2024

感谢反馈以及提供建议,最新版本确实还没修复这个问题,只是读取失败不会退出了

需要时间研究下怎么修复

@chroming
Copy link
Owner

chroming commented Jul 1, 2024

目前发现的兼容性问题:pypdf在处理这个文件的annotations时未考虑ByteStringObject类型导致合并annotations失败
不过即使我改了这部分代码能正常导出了,但pdf本身图片却丢失了...

还需要研究下转换格式为什么能修复这个问题

@vincentaxhe
Copy link
Author

好了,能读取,能输出,也不用限制pdf版本,厉害了

@chroming
Copy link
Owner

感谢反馈~

这个问题应该是某些pdf的annotations存在编码问题,pypdf库没有处理这种读取失败的情况导致拷贝pdf失败,我用桌面端pdf阅读软件也同样读取不了这些annotations。
现在的解决方法是如果遇到拷贝失败就fallback成不拷贝annotations的方法,避免这个问题。
至于为什么转换pdf版本之后可以了,我猜测是软件转换版本之后丢弃了这些存在问题的annotations,就可以正常处理了。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants