如何在Ubuntu 18.04 Bionic中安装pdftk?

有没有机会让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 

但没有找到工作工具。

Ubuntu中的pdftk包 (及其上游Debian包 )由于依赖于现已弃用的GCJ运行时而被删除。 我发现了一个依赖于OpenJDK或类似代码的fork。

从PPA安装

我构建了一个Deb包(仅限Bionic),具有合适的依赖关系:

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

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

 pdftk  ... 

从源代码安装

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

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

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

  2. 下载Marc Vinyal的pdftk分叉 :

     git clone https://gitlab.com/pdftk-java/pdftk.git cd pdftk 
  3. 将所需库的符号链接放入libs目录:

     mkdir libs ln -st libs /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 

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

  7. (可选)您可以通过update-binfmts(8)教Linux执行JAR(Java Archive)文件。 Deb软件包中包含的大多数JRE,包括Canonical软件包存储库中的JRE,在安装过程中都会处理这些问题,尽管在某些OpenJDK软件包中似乎存在问题。

PS:我在Ubuntu Trusty中使用非无头OpenJDK 9尝试了这个,但是我发现为什么它不适用于Bionic的无头OpenJDK 10。

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

 sudo snap install pdftk 

在Ubuntu 18.04 amd64上安装pdftk

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

 #!/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.kernel.org/ubuntu/pool/main/g/gcc-6/libgcj17_6.4.0-8ubuntu1_amd64.deb \ http://mirrors.kernel.org/ubuntu/pool/main/g/gcc-defaults/libgcj-common_6.4-3ubuntu1_all.deb \ http://mirrors.kernel.org/ubuntu/pool/universe/p/pdftk/pdftk_2.02-4build1_amd64.deb \ http://mirrors.kernel.org/ubuntu/pool/universe/p/pdftk/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命令从那里apt install ! 然后将删除/tmp目录中的包。

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

 chmod 755 pdftk_installer ./pdftk_installer 

您可以尝试使用安装了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的CONTAINER ID将图像提交到安装了pdftk的新图像:

     sudo docker commit CONTAINER_ID ubuntu_pdftk 

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

  6. /usr/bin创建一个名为pdftk的文件,然后使用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 

我能够从artful(17.10)deb软件包安装pdftk。 按顺序下载并安装:

  • libgcj里常见
  • libgcj17
  • PDFTK

如果你从cli做到这一点,最好先安装gcc-6-base以避免依赖性错误。

那应该是诀窍……现在。

为了让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源代码,这就是我在Bionic下运行PDFTK的方法。

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

多么好的机会使用一些docker魔术!

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

如果您想要做同样的事情,以下是确切的步骤:

  1. 如果您还没有安装docker( https://docs.docker.com/install/
  2. 创建一个名为pdftk的目录
  3. pdftk目录中创建一个名为pdftk目录
  4. 将此Dockerfile复制到pdftk/docker 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所有,因此您可能需要根据需要更改所有权)。

我在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* 

然后我从https://packages.debian.org/search?keywords=pdftk上获取了.deb

 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