在运行我的R-package(via devtools::check()
)的检查时,我面临警告''qpdf' is needed for checks on size reduction of PDFs
.我发现这个问题是建议(如果我理解答案正确)运行Sys.which(Sys.getenv("R_QPDF", "qpdf"))
,看看是否找到qpdf.在我的情况下,这只是返回
qpdf
""
所以,我想我没有正确安装qpdf.不幸的是,在Windows上安装qpdf似乎相当复杂.我的第一个问题是:为Windows安装qpdf真的是如此痛苦和复杂吗?还是有一个简单的解决方案?
我按照说明进行操作,直到将C:\ MinGW-w64\bin和C:\ MinGW-w64\lib\mingw添加到PATH变量中.但是后来我没有找到安装 qpdf的更多具体说明,只是关于如何用不同的其他程序构建 qpdf.第二个问题是:我的假设是正确的,在我构建 qpdf之后它已经安装了吗?但真正的问题是:构建qpdf的最佳方法是什么?我试过./config-mingw32
和./config-mingw64
从部分"建设与MinGW的"命令,在我的C:\ MinGW的\ MSYS\1.0\BIN\bash.exe,但得到的错误信息./config-mingw32: No such file or directory
,而且不知道如何解决这个问题.
我正在使用Windows 10,R版本3.3.2 Patched(2017-01-07 r71934) - "真诚的南瓜补丁"和RStudio 1.0.136.
我正在下载一些 PDF 格式的报纸(供后代使用)。一个标题很麻烦,它在 pdf 本身中包含 URI 链接,如果您不小心单击这些链接,它会打开一个浏览器选项卡,指向一个长达 500 秒的页面。在台式电脑上这还不算太糟糕,但如果有人用平板电脑阅读它,那就很痛苦了。每期大约有 200 个此类链接。
对于不同的标题,就像使用 QPDF 一样简单,如下所示:
qpdf --qdf --object-streams=disable file temp-file
Run Code Online (Sandbox Code Playgroud)
这会将临时版本置于后记模式或其他模式下,我可以使用如下方式来取消链接:
s/obj\n<<\n( \/A <<\n \/S \/URI.+?)>>\nendobj/"obj\n<<\n" . " " x length($1). ">>\nendobj"/sge
Run Code Online (Sandbox Code Playgroud)
这仍然有效。然而,15 兆的原始 pdf 现在变成了 108 兆的“固定”pdf。我可以接受一些膨胀,但 720% 有点荒谬(我认为这更像是另一个标题的 10%)。每当我用 google 搜索如何执行此操作时,我都会得到 Acrobat Reader 的结果以及如何在 20 个菜单中单击来执行此操作...难道没有使用 Adobe 产品的人想要自动化执行此操作吗?每期典型期刊有 180 到 300 个链接,分布在 45-150 页(周日版)。
有什么工具可以做到这一点吗?qpdf 是否有任何巧妙的论据可以使这变得更加合理?
PS 是的,我知道用空格覆盖 URI 是很糟糕的,但我从来没有设法弄清楚如何完全删除对象,因为它们的引用也必须删除。
在pdftk
我可以看到三个选项:
1$ pdftk input.pdf output protected-userpw.pdf userpw very_secret
2$ pdftk input.pdf output protected-ownerpw.pdf ownerpw very_secret
3$ pdftk input.pdf input_pw very_secret output protected-input.pdf
Run Code Online (Sandbox Code Playgroud)
当我打开protected-ownerpw.pdf
和protected-input.pdf
我不要求输入密码。只protected-userpw.pdf
给出预期的结果。做什么ownerpw
和input_pw
做什么?
我用来qpdf
从受保护的文件中创建不受保护的文件。现在我想知道这是否总是有效。PDF格式支持哪些密码保护机制?以及什么qpdf
支持。
我正在使用 qpdf 合并目录中的所有 pdf 文件,并且我想仅合并多个输入文件的第一页。根据页面选择的 qpdf 文档,这应该是可能的。我尝试过几种变体但没有运气:
qpdf --empty --pages *.pdf 1-1 -- "output.pdf"
qpdf --empty --pages *.pdf 1 -- "output.pdf"
Run Code Online (Sandbox Code Playgroud)
我能做些什么?
我正在处理一个处理 PDF 文件的 python 脚本,尽管其中一些包含将使用限制为仅打印的加密,我必须在处理它们之前手动删除它们。
为此,我一直在手动使用QPDF在运行脚本之前删除对单个 PDF 文件的这些限制(qpdf 的命令非常简单......在命令提示符中 -> qpdf --decrypt input.pdf output.pdf)
我的问题是 - 是否可以在我的 Python 脚本中执行 QPDF 可执行文件并运行命令,而不是手动执行此操作?我还没有找到任何专门用于控制 QPDF 的 python 模块,所以我不抱太大希望。