![在 Linux 上查看超大 PDF 文件](https://linux22.com/image/1507131/%E5%9C%A8%20Linux%20%E4%B8%8A%E6%9F%A5%E7%9C%8B%E8%B6%85%E5%A4%A7%20PDF%20%E6%96%87%E4%BB%B6.png)
我有一个通过 matplotlib 生成的 18000x18000px PDF 文件。打印之前,我想预览它,至少缩放 20%。遗憾的是,到目前为止,我尝试过的所有方法都不起作用:
- evince 只会在最大缩放级别 1.3% 时打开它。这是在我将缓存大小(通过 dconf 编辑器)增加到 ~500MB 之后 - 进一步增加(我尝试过增加到 8 GB)并不能改善最大缩放。我相信还有其他一些我不知道的瓶颈。
- mupdf 失败
malloc of array (153904 x 615616 bytes) failed (integer overflow)
- Inkscape 占用了我所有的 RAM(16 GB)然后冻结了。
我也曾尝试将其导出为 SVG 并使用 inkscape 打开它,但是这也会填满我的 RAM 然后冻结(但速度较慢)。
另外,我尝试将文件划分为互补的图块,第一次迭代如下:
pdfcrop --verbose --margins "10 10 10000 10000" --clip g.pdf out1.pdf
这已经花了几个小时了,但似乎没有取得太大的进展,从好的方面来说,它并没有耗尽我所有的 RAM。
Matplotlib 也具有导出 PS 的能力 - 但考虑到 PS 的规模较大,我怀疑情况会变得更糟。
你能帮我找到一种在 Linux 下预览文件的方法吗?
如果你想尝试一下这个文件,你可以找到它这里。
答案1
正如评论中指出的那样,迄今为止最好的解决方案是将 PDF 裁剪为 PNG 图块。使用 ghost 脚本执行此操作的基本命令是:
gs -o out.png -sDEVICE=pngalpha -g2000x2000 -dLastPage=1 -c "<</Install {-1000 -10000 translate}>> setpagedevice" -f in.pdf
我继续编写了一个脚本,该脚本可以将 PDF 的名称和分辨率以及图块大小作为输入,并输出编号的图块。它相当基础,假设图像和图块是正方形。你可以找到它在 GitHub 上。