如何在Ubuntu 18.04及更高版本中安装pdftk?


105

有没有机会pdftk在Ubuntu 18.04中工作?我需要用它来在外壳中创建带有水印的PDF文件。

或者,有人知道pdftk在外壳中生成带有水印的PDF的可行选择吗?

我已经检查/尝试了所有这些:

sudo apt list pdf*
Listing... Done
pdf-presenter-console/bionic 4.1-2 amd64
pdf-redact-tools/bionic,bionic 0.1.2-1 all
pdf.js-common/bionic,bionic 1.5.188+dfsg-1 all
pdf2djvu/bionic 0.9.8-0ubuntu1 amd64
pdf2svg/bionic 0.2.3-1 amd64
pdfcrack/bionic 0.16-1 amd64
pdfcube/bionic 0.0.5-2build6 amd64
pdfcube-dbg/bionic 0.0.5-2build6 amd64
pdfgrep/bionic 2.0.1-1 amd64
pdfminer-data/bionic,bionic 20140328+dfsg-1 all
pdfmod/bionic,bionic 0.9.1-8 all
pdfmod-dbg/bionic,bionic 0.9.1-8 all
pdfposter/bionic,bionic 0.6.0-2 all
pdfresurrect/bionic 0.14-1 amd64
pdfsam/bionic,bionic 3.3.5-1 all
pdfsandwich/bionic 0.1.6-1 amd64
pdfshuffler/bionic,bionic 0.6.0-8 all
pdftoipe/bionic 1:7.2.7-1build1 amd64

但是没有找到工作工具。


3
和PDF链!这两个工具对我来说是无价的!
Joshp.18年

3
不要只写“您可以尝试...”,解释如何做以及为使答案更有用而必须执行的步骤
ADDB,

1
如果您自己解决了问题,请回答您自己的问题并接受您的回答。不要在您的问题或评论中添加答案!:-)我可以自由地恢复添加答案的更改,但是您始终可以通过其下面的链接查看帖子的历史记录。
大卫·佛斯特

5
仅供参考,pdftk已从存储库中删除,并且有功能要求将其重新添加。
大卫·佛斯特

2
遗憾的是,仅因为开发人员找不到可接受的解决方案而删除了这样一个好的工具
Daniel Alder

Answers:


92

由于依赖于现已弃用的GCJ运行时,因此删除了Ubuntu中pdftk软件包(及其上游Debian软件包)。我发现了一个依赖于OpenJDK或类似产品的叉子。

从将来的Ubuntu版本安装(推荐)

从Cosmic(Ubuntu 18.10)开始,Ubuntu会pdftk-java从以下相同的源代码附带发行作为替代。尝试安装pdftk将改为安装此软件包。早期版本的用户可以从软件包存储库中手动下载它,并使用自己喜欢的软件包管理器进行安装。

从PPA安装(过时)

我构建了一个Deb包(仅适用于Bionic),具有适当的依赖项:

sudo add-apt-repository ppa:malteworld/ppa
sudo apt update
sudo apt install pdftk

该软件包包含放在中的包装器脚本/usr/bin,因此您可以照常调用它:

pdftk <arguments> ...

从源安装

  1. 安装构建工具和依赖项:

    sudo apt install git default-jdk-headless ant \
        libcommons-lang3-java libbcprov-java
    

    当然,可以使用与JDK提供的JDK不同的受支持JDK default-jdk-headless

  2. 下载Marc Vinyal的pdftk fork

    git clone https://gitlab.com/pdftk-java/pdftk.git
    cd pdftk
    
  3. 将指向所需库的符号链接放入lib文件夹:

    mkdir lib
    ln -st lib /usr/share/java/{commons-lang3,bcprov}.jar
    
  4. 构建JAR包:

    ant jar
    
  5. 运行JAR包:

    java -jar build/jar/pdftk.jar --help
    
  6. (可选)要运行JAR程序包(例如,将其分发到其他系统时),至少需要一个有效的(无头)JRE,例如该default-jre-headless程序包以及Java库libcommons-lang3-javalibbcprov-java

    sudo apt install default-jre-headless libcommons-lang3-java libbcprov-java
    

    同样,您可以使用与JRE不同的JRE default-jre-headless。该pdftk分支还支持针对较旧的JRE版本(根据文档≥7)的构建。

  7. (可选)您可以通过教Linux如何执行JAR(Java归档)文件update-binfmts(8)。Deb软件包中提供的大多数JRE(包括Canonical软件包存储库中的JRE)在安装过程中都会解决此问题,尽管在某些OpenJDK软件包中似乎存在错误。

PS:我在Ubuntu Trusty中使用非无头OpenJDK 9进行了尝试,但是我几乎看不出为什么它不能与Bionic中的无头OpenJDK 10一起工作的原因。

取决于应用

评论者提出了一个有效的问题,即相关的PDF Chain应用程序是否会受到此更改的影响:

  • PDF Chain是C ++应用程序,不受GCJ的弃用直接影响。它需要一个可运行的pdftk可执行文件,但不在乎它是如何工作的。无论如何,PDF Chain都从Bionic以及pdftk删除。

我正在阅读有关安装另一个软件包的另一个问题,该软件包已从版本18.04的存储库中删除,一个用户建议使用gdebi安装.deb软件包,该软件包应处理依赖项。您认为这行得通还是会产生一些问题?这可能是一个愚蠢的问题,我只是想进一步了解软件包管理。

5
此答案中的两组指令都安装了Marc Vinyal的pdftk-java前叉。(非常可能)这将是pdftkDebian(请参阅参考资料)和Ubuntu(具有适用于18.10 的软件包)的正式替代品。因此,这似乎是最好的答案,因为它是“面向未来的”:从18.10开始,您将在官方存储库中获得与所提供软件相同的软件。
tanius

@DavidFoerster在上面。问题:是否有特别的理由建议ant使用apt而不是将Gradle用于构建来安装库?
拉斐尔

在关于所述伪包的后续问题上,人们对以下问题产生了疑问:对它们的依赖关系是否pdftk-java选择得当。您可能要检查一下。
拉斐尔

提供由SDKMAN安装的Java的设备创建了软件包描述!作为满足的依赖关系的软件包pdftk-java
拉斐尔

61

对于Ubuntu 18.04,只需安装pdftk snap软件包:

sudo snap install pdftk

1
符号链接对我不起作用,因为snap似乎需要脚本名称。但是最小的包装器脚本/snap/bin/pdftk-smoser.pdftk "$@"也可以很好地工作。
Boldewyn

什么版本的Ubuntu?我上面给出的确切说明对我有用。我从一些perl xml处理脚本中调用pdftk,而耐酸测试是这些脚本起作用并产生合并的pdf的工具。
pgoetz

3
我将上面的答案更新为仅使用“ pdftk”而不是“ pdftk”,因为我(smoser)已将名为“ pdftk”的快照上载到具有相同内容的商店。(snapcraft.io/pdftk
smoser

4
这似乎可以很好地安装,但是pdftk无法打开或无法处理任何文件(总是说“错误:找不到文件。错误:无法打开PDF文件:”),也没有手册页。最后,我用snap remove删除了它,并使用了上面的@abu_bua解决方案,它的工作原理非常完美。
scoobydoo

1
由于快照的设计要点,快照无法访问所有文件。有关此信息,请访问github.com/smoser/pdftk/issues/1。最简单的解决方案是将文件放在主目录中。
smoser

36

在Ubuntu 18.04 amd64上安装pdftk

我编写了一个小的bash脚本,该脚本可以自动在Ubuntu 18.04上进行安装。请注意,我下载了amd64软件包!

#!/bin/bash
#
# author: abu
# date:   July 3 2019 (ver. 1.1)
# description: bash script to install pdftk on Ubuntu 18.04 for amd64 machines
##############################################################################
#
# change to /tmp directory
cd /tmp
# download packages
wget http://launchpadlibrarian.net/340410966/libgcj17_6.4.0-8ubuntu1_amd64.deb \
 http://launchpadlibrarian.net/337429932/libgcj-common_6.4-3ubuntu1_all.deb \
 https://launchpad.net/ubuntu/+source/pdftk/2.02-4build1/+build/10581759/+files/pdftk_2.02-4build1_amd64.deb \
 https://launchpad.net/ubuntu/+source/pdftk/2.02-4build1/+build/10581759/+files/pdftk-dbg_2.02-4build1_amd64.deb


echo -e "Packages for pdftk downloaded\n\n"
# install packages 
echo -e "\n\n Installing pdftk: \n\n"
sudo apt-get install ./libgcj17_6.4.0-8ubuntu1_amd64.deb \
    ./libgcj-common_6.4-3ubuntu1_all.deb \
    ./pdftk_2.02-4build1_amd64.deb \
    ./pdftk-dbg_2.02-4build1_amd64.deb
echo -e "\n\n pdftk installed\n"
echo -e "   try it in shell with: > pdftk \n"
# delete deb files in /tmp directory
rm ./libgcj17_6.4.0-8ubuntu1_amd64.deb
rm ./libgcj-common_6.4-3ubuntu1_all.deb
rm ./pdftk_2.02-4build1_amd64.deb
rm ./pdftk-dbg_2.02-4build1_amd64.deb

该脚本将/tmp使用apt install命令将软件包下载到该软件包并从那里安装!之后,/tmp目录中的软件包将被删除。

要运行此脚本,请在编辑器中将其复制并保存,例如pdftk_installer。然后在终端中运行

chmod 755 pdftk_installer
./pdftk_installer

看起来像是pdftk-dbg_2.02-4build1_amd64.deb可选的
Jossef Harush

这比PPA的快照版本或基于Java的版本要好得多-谢谢!
西蒙

为了提供一些解释,这似乎是下载Ubuntu-artful(17.10)软件包。
兰德尔·惠特曼

3
所有链接都断开了
开发人员

1
链接现在更新!
abu_bua

10

您可以尝试使用安装了pdftk的Ubuntu 16.04的docker映像来运行pdftk:

  1. 安装docker:

    sudo apt install docker.io
  2. 拉Ubuntu 16.04并运行bash shell:

    sudo docker run -it ubuntu:16.04 bash
  3. 从容器提示符更新并安装pdftk:

    apt update
    apt install pdftk
    
  4. 在新的终端运行:

    sudo docker ps -a
  5. 使用ubuntu:16.04的容器ID将图像提交到已安装pdftk的新图像:

    sudo docker commit CONTAINER_ID ubuntu_pdftk

    (替换CONTAINER_ID为您的容器ID。)

  6. 创建一个名为文件pdftk/usr/bin,然后使其可执行使用chmod +x /usr/bin/pdftk

    #!/bin/sh
    set -eu
    docker run --name pdftk -it -v "$PWD:/workdir$PWD" -w "/workdir$PWD" ubuntu_pdftk pdftk "$@"
    docker rm pdftk
    

几乎就是我所做的。除了,你没有记错-v "$PWD:/workdir$PWD" -w "/workdir$PWD"吗?
OndraŽižka18年

5

我能够从巧妙(17.10)的deb软件包中安装pdftk。下载并按此顺序安装:

gcc-6-base如果从cli 进行安装,最好先安装以避免依赖项错误。

现在应该可以解决问题了。


2

我做了一个快速而肮脏的解决方法,以使PDFTK在Bionic下运行。

lsb_release -a && pdftk --version
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04 LTS
Release:        18.04
Codename:       bionic

pdftk 2.02 a Handy Tool for Manipulating PDF Documents
Copyright (c) 2003-13 Steward and Lee, LLC - Please Visit: www.pdftk.com

我更新了我的内容,sources.list并包含以下几行:

deb http://no.archive.ubuntu.com/ubuntu/ artful main restricted
deb http://no.archive.ubuntu.com/ubuntu/ artful-updates main restricted
deb http://no.archive.ubuntu.com/ubuntu/ artful universe
deb http://no.archive.ubuntu.com/ubuntu/ artful-updates universe
deb http://no.archive.ubuntu.com/ubuntu/ artful multiverse
deb http://no.archive.ubuntu.com/ubuntu/ artful-updates multiverse
deb http://no.archive.ubuntu.com/ubuntu/ artful-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu artful-security main restricted
deb http://security.ubuntu.com/ubuntu artful-security universe
deb http://security.ubuntu.com/ubuntu artful-security multiverse

之后,我运行一个简单的

sudo apt update

使更改生效。

然后通过安装pdftk

sudo apt install pdftk

然后再次从source.list中删除Artful来源,这就是我如何使PDFTK在Bionic下运行。

资料来源:https : //christiandietze.de/pdftk-with-ubuntu-bionic-18-04/


5
嗨,克里斯蒂安,您介意更新您的答案以包括您的解决方法吗?如果您在此处包含答案的基本部分,然后提供链接以供参考,则我们建议您这样做。谢谢!
CalvT '18年

1
是的,尤其是因为您链接到的站点似乎已关闭。
terdon

嗨,CalvT,我使用的解决方法是将artfull软件包添加到apt,安装pdftk并将其删除。而且,过去30天内我的网站没有关闭,所以我不知道为什么您不应该访问该网站。
WiKrIe

@WiKrIe您的网站有问题。我可以访问基本URL,但不能访问您链接的页面。Wayback Machine也不行。Google缓存不会加载它,但是会加载source。该页面上某处肯定有问题。因此,这就是terdon♦认为您的站点已关闭的原因。我也一样,直到我检查了。希望能有所帮助。
Dɑvïd

1
-1表示建议混合使用适用于不同Ubuntu版本的存储库,而没有适当的优先级规则。
David Foerster,


1

您可以使用docker在Ubuntu 18.04上运行pdftk。这是Ademir答案的增强变体。

假设我们只需要pdftk的cli组件,并且在计算机上安装了docker。只需将以下脚本放在$ PATH上的某个位置,将名称pdftk和可执行位设置为:

#!/bin/bash

# Build or use cached image and tag with "local/local/ubuntu_pdftk", suppress 
# output to maintain compatibility in case you are parsing the pdftk output.
# It will build the image if it's absent or use the cached one.
echo "FROM ubuntu:16.04
RUN apt-get update && \
    apt-get install -y pdftk && \
    rm -rf /var/lib/apt/lists/*" | docker build -t local/local/ubuntu_pdftk - 2>&1 > /dev/null

# Run the pdftk as current user
set -eu
docker run --name pdftk -it --user $(id -u):$(id -g) --rm -v "$PWD:/workdir$PWD" -w "/workdir$PWD" local/local/ubuntu_pdftk pdftk "$@"

如果将生成的映像保留在计算机上,则第一次运行将花费大约2分钟来构建映像,下一次运行将更快。您可以自由清理图像,该图像将在下次需要时生成。


1

@abu_bua发布的脚本中的下载链接似乎不再起作用(可能是由于对17.10的终止支持?),因此,这是该脚本的修改版本,该脚本使用16.04版本中的相应软件包。在运行18.04的计算机上进行了测试。

#!/bin/bash
#
# author: abu
# date:   May 12 2018
# description: bash script to install pdftk on Ubuntu 18.04 for amd64 machines
##############################################################################
#
# change to /tmp directory
cd /tmp
# download packages
wget http://mirrors.edge.kernel.org/ubuntu/pool/main/g/gcc-5/libgcj16_5.4.0-6ubuntu1~16.04.10_amd64.deb \
    http://mirrors.edge.kernel.org/ubuntu/pool/main/g/gcc-defaults/libgcj-common_4.9.3-9ubuntu1_all.deb \
    http://mirrors.edge.kernel.org/ubuntu/pool/universe/p/pdftk/pdftk_2.02-4_amd64.deb \
    http://mirrors.edge.kernel.org/ubuntu/pool/universe/p/pdftk/pdftk-dbg_2.02-4_amd64.deb

echo -e "Packages for pdftk downloaded\n\n"
# install packages 
echo -e "\n\n Installing pdftk: \n\n"
sudo apt-get install ./libgcj16_5.4.0-6ubuntu1~16.04.10_amd64.deb \
    ./libgcj-common_4.9.3-9ubuntu1_all.deb \
    ./pdftk_2.02-4_amd64.deb \
    ./pdftk-dbg_2.02-4_amd64.deb
echo -e "\n\n pdftk installed\n"
echo -e "   try it in shell with: > pdftk \n"
# delete deb files in /tmp directory
rm ./libgcj16_5.4.0-6ubuntu1~16.04.10_amd64.deb
rm ./libgcj-common_4.9.3-9ubuntu1_all.deb
rm ./pdftk_2.02-4_amd64.deb
rm ./pdftk-dbg_2.02-4_amd64.deb

1

我喜欢Ademir的 docker答案,但是它具有安全性和权限方面的典型问题,因为docker必须以root身份运行。如果那样困扰您,请尝试使用奇点。您需要以根用户身份构建映像,但是任何用户都可以运行它。

这是Singularity我使用的文件:

# Generate the Singularity container to run pdftk from Ubuntu 16.04.
Bootstrap: docker
From: ubuntu:16.04

%help
    pdftk was removed from Ubuntu 18.04, so this container packages up the old
    version.

%post
    apt-get update -qq
    apt-get install -qq pdftk

%runscript
    pdftk "$@"

然后,我建立了图像。

sudo singularity build pdftk.simg Singularity

一旦成功,我将其安装到路径上的文件夹,以及将主文件夹设置为当前目录的包装器脚本。

sudo mv pdftk.simg /usr/bin/
echo 'singularity run --home $PWD /usr/bin/pdftk.simg "$@"' > pdftk
sudo chown root:root pdftk
sudo chmod +x pdftk
sudo mv pdftk /usr/bin

现在我可以跑步了pdftk

$ pdftk --version

pdftk 2.02 a Handy Tool for Manipulating PDF Documents
Copyright (c) 2003-13 Steward and Lee, LLC - Please Visit: www.pdftk.com
This is free software; see the source code for copying conditions. There is
NO warranty, not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

唯一的缺点是它是一个相当大的可执行文件,因为它包含完整的Ubuntu 16.04发行版。如果您要操作不在当前目录中的PDF文件,则可能也会遇到麻烦。

$ ls -lh /usr/bin/pdftk*
-rwxr-xr-x 1 root root  53 Jul 23 12:32 /usr/bin/pdftk
-rwxr-xr-x 1 root root 88M Jul 23 12:06 /usr/bin/pdftk.simg

0

使用一些码头工人魔术的绝佳机会!

我所做的是使用运行ubuntu 16.04的docker容器,在其中安装pdftk并在其中运行。

如果要执行相同的操作,请按照以下确切步骤操作:

  1. 如果还没有安装docker(https://docs.docker.com/install/
  2. 在一个目录下创建一个目录 pdftk
  3. 在目录docker内部创建一个pdftk目录
  4. 将此Dockerfile复制到pdftk/docker目录中:https : //github.com/gkotian/gautam_linux/blob/master/docker/pdftk/Dockerfile
  5. 将此脚本也复制到pdftk/docker目录中:https : //github.com/gkotian/gautam_linux/blob/master/scripts/dockershell
  6. 确保dockershell脚本是可执行的
  7. pdftk将所有要使用的pdf文件复制到目录中
  8. cd /path/to/pdftk
  9. 使用Dockerfile的路径运行dockershell脚本:(docker/dockershell docker/Dockerfile这是第一次运行时会花费一些时间)

现在,您应该在docker容器中有一个提示符,您可以从中运行pdftk。完成后,键入exit以退出容器并返回到主机。任何新生成的文件都将出现在pdftk目录中(但它们将由root拥有,因此您可能需要根据需要更改所有权)。


0

在WSL中运行的18.04中,我执行了以下操作

从(.deb文件)获取依赖项:

  • libgcj-common(下载:https ://packages.ubuntu.com/artful/libgcj-common )
  • libgcj17(下载:https ://packages.ubuntu.com/artful/libgcj17 )

wget http://hr.archive.ubuntu.com/ubuntu/pool/main/g/gcc-6/libgcj17_6.4.0-8ubuntu1_amd64.deb

wget http://mirrors.edge.kernel.org/ubuntu/pool/main/g/gcc-defaults/libgcj-common_6.4-3ubuntu1_all.deb

sudo apt install gcc-6-base

然后安装以上依赖

sudo dpkg -i libgcj*

然后我.debhttps://packages.debian.org/search?keywords=pdftk

wget http://ftp.us.debian.org/debian/pool/main/p/pdftk/pdftk_2.02-4+b2_amd64.deb
sudo dpkg -i pdftk_2.02-4+b2_amd64.deb

1
libgcj和libgcj17的链接已断开。
HJLebbink

1
@HJLebbink Ubuntu不再保持巧妙:(库链接
Eduard Florinescu
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.