我正在使用 Linux 服务器并尝试安装 Pdftk,但我在试图弄清楚到底要做什么时遇到了问题。
我找到了有关如何安装它的以下文档,但它们主要指的是在本地 Windows 机器上安装它。
它们是: http ://www.andrewheiss.com/blog/2009/07/29/installing-pdftk-php/
http://www.accesspdf.com/pdftk/#packages
有人可以帮我弄清楚我需要将哪些文件放在我的服务器上以便我可以参考 pdftk 吗?
我正在使用 Linux 服务器并尝试安装 Pdftk,但我在试图弄清楚到底要做什么时遇到了问题。
我找到了有关如何安装它的以下文档,但它们主要指的是在本地 Windows 机器上安装它。
它们是: http ://www.andrewheiss.com/blog/2009/07/29/installing-pdftk-php/
http://www.accesspdf.com/pdftk/#packages
有人可以帮我弄清楚我需要将哪些文件放在我的服务器上以便我可以参考 pdftk 吗?
Pdftk 是 iText 的一个版本,它已从 Java 转换为 c++,并使用命令行桥重新构建,以便从 PHP 应用程序轻松访问。
要在 Redhat / CentOS 上构建 pdftk,请按照以下说明进行操作。
ssh [server to install pdftk on]
现在我们在服务器中,我们需要创建目录来存储 pdftk。
cd /
sudo mkdir extra
cd extra
sudo mkdir src
cd src
sudo wget http://www.pdfhacks.com/pdftk/pdftk-1.41.tar.gz
sudo tar zxvf pdftk-1.41.tar.gz
cd pdftk-1.41/pdftk
现在我们需要安装 gcj 库。
sudo yum install java-1.4.2-gcj-compat-devel.i386
gcc-c++ 库没有与 gcj 包一起安装,所以我们现在就安装它,这样我们就不会在编译过程中遇到错误。
sudo yum install gcc-c++
如果您现在编译应用程序,您将收到一条警告,指出 tmpnam 使用起来很危险,您应该使用 mkstemp。
sudo vi report.cc
在 VI 中运行它来搜索和替换 tmpnam 方法。
:%s/tmpnam(/mkstemp(/g
按退出并保存更改
:wq!
现在我们已经安装了所有的包,我们将开始编译 pdftk-1.41
从 /extra/src/pdftk-1.41/pdftk 运行以下命令
sudo make -f Makefile.RedHat
这将启动编译并将 java 文件转换为 c++ 的构建过程。将 iText 转换为 c++ 可能需要几分钟。去休息室从我们新的玛格丽塔机器上拿一杯玛格丽塔酒 :)。
现在创建了 pdftk 文件,我们希望将其复制到 /bin 目录,以便我们可以从任何地方运行它。
sudo cp pdftk /usr/local/bin
让我们确保构建成功并运行
pdftk --version
到了 2020 年,现在情况有所不同。CentOS 6 即将退出,pdftk 只能支持CentOS 5/6。CentOS 7 上的 GCJ 已被删除,因此从源代码安装也不容易。但是我们现在有 docker:
FROM centos:centos6
RUN yum install -y https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/pdftk-2.02-1.el6.x86_64.rpm
然后构建docker build . -t pdftk并运行为:
docker run -it --rm -v $PWD:/data --workdir /data pdftk pdftk ./input.pdf output ./output.pdf
如果幸运的话,上面的例子可以修复一个丢失十几 KB 数据的 pdf 文件。
截至 2021 年,有pdftk-java:原始基于 GCJ 的 PDFtk 到 Java 的端口,目前正在向Fedora 33+ 和 EPEL 7+(后者用于 CentOS、RHEL 或 Rocky)的存储库发送,允许yum install pdftk-java成功(一旦包到达稳定的存储库)。
编辑:自昨天 2021 年 10 月 29 日起,pdftk-java 包就在稳定的存储库中。
正如@rsc 所说,pdftk-java 将可用于 Rocky Linux,但目前(2021.10.28)仍无法通过yum.
幸运的是,有一个针对 x86_64 GNU/Linux 系统的内置命令,它不需要任何运行时依赖项。所以我们可以如下使用它
# the version number might be updated, check https://gitlab.com/pdftk-java/pdftk
wget https://gitlab.com/pdftk-java/pdftk/-/jobs/1527259632/artifacts/raw/build/native-image/pdftk
chmod +x pdftk
./pdftk ...
它在具有以下系统信息的服务器中运行良好,
$ lsb_release -a
LSB Version: :core-4.1-amd64:core-4.1-noarch
Distributor ID: Rocky
Description: Rocky Linux release 8.4 (Green Obsidian)
Release: 8.4
Codename: GreenObsidian