我已经pdftk
在 Ubuntu 18.04 中使用 snap 进行了安装:
sudo snap install pdftk
在我的主文件夹中pdftk
运行良好:
root@localhost:/home# a.pdf output secure.128.pdf owner_pw 123456
root@localhost:/home# ls
a.pdf secure.128.pdf
但在/var/www
文件夹中它不起作用:
root@localhost:/var/www/multi/pdfs# ls
a.pdf
root@localhost:/var/www/multi/pdfs# pdftk a.pdf output secure.128.pdf owner_pw 123456
Error: Unable to find file.
Error: Failed to open PDF file:
a.pdf
Errors encountered. No output created.
Done. Input errors, so no output created.
答案1
作为steeldriver 评论道,这可能与pdftk
作为 snap 应用程序安装有关。如果您愿意,可以检查帖子 steeldriver 链接看看该pdftk
snap 程序是否支持访问外部文件~
。
我建议你使用非 snap 版本的pdftk
。不幸的是,Ubuntu 18.04 的默认存储库中没有包含它pdftk
(幸运的是,20.04 有它),因此必须从源代码构建它。我引用了David Foerster 的回答有关如何构建它:
安装构建工具和依赖项:
sudo apt install git default-jdk-headless ant \ libcommons-lang3-java libbcprov-java
当然,您可以使用与 提供的 JDK 不同的受支持的 JDK
default-jdk-headless
。git clone https://gitlab.com/pdftk-java/pdftk.git cd pdftk
将所需库的符号链接放入
lib
文件夹中:mkdir lib ln -st lib /usr/share/java/{commons-lang3,bcprov}.jar
构建JAR包:
ant jar
运行JAR包:
java -jar build/jar/pdftk.jar --help
(可选)要运行 JAR 包,例如当您将其分发到其他系统时,您至少需要一个可以正常工作的(无头)JRE(类似于包中的)
default-jre-headless
以及 Java 库libcommons-lang3-java
和libbcprov-java
:sudo apt install default-jre-headless libcommons-lang3-java libbcprov-java
再次强调,您可以使用与 不同的 JRE
default-jre-headless
。此 pdftk fork 还支持旧 JRE 版本(根据文档,≥ 7)的构建。(可选)您可以通过以下方式教 Linux 执行 JAR(Java 存档)文件
update-binfmts(8)
. Deb 包中附带的大多数 JRE(包括 Canonical 包存储库中的 JRE)在安装过程中都会处理这个问题,尽管在某些 OpenJDK 包中它似乎存在缺陷。