Как я могу установить pdftk в Ubuntu 18.04 и выше?

Есть ли шанс получить 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

Но не нашел рабочего инструмента.

17 ответов

Решение

Пакет pdftk в Ubuntu (и его исходный пакет Debian) был отброшен из-за его зависимости от устаревшей среды выполнения GCJ. Я нашел вилку, которая зависит от 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, чем тот, который предоставляетсяdefault-jdk-headless,

  2. Загрузите вилку pdftk Марка Виньяля:

    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пакет, а также библиотеки Javalibcommons-lang3-javaа такжеlibbcprov-java:

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

    Опять же, вы можете использовать другой JRE, чемdefault-jre-headless, Эта вилка pdftk также поддерживает сборки для более старых версий JRE (≥ 7 согласно документации).

  7. (Необязательно) Вы можете научить Linux выполнять файлы JAR (Java Archive) черезupdate-binfmts(8), Большинство JRE, поставляемых в пакетах Deb, в том числе в репозиториях пакетов Canonical, позаботятся об этом во время установки, хотя в некоторых пакетах OpenJDK это вызывает ошибки.

PS: я пытался это сделать с OpenJDK 9 без головок в Ubuntu Trusty, но я вижу мало причин, почему он не должен работать с OpenJDK 10 без головок в Bionic.

В зависимости от приложений

Комментатор поднял действительный вопрос о том, влияет ли это изменение на различные приложения цепочки PDF:

  • Нет, PDF Chain - это приложение C++, на которое GCJ не влияет напрямую. Ему нужен рабочий исполняемый файл pdftk, но ему все равно, как он работает под капотом. В любом случае, PDF-цепочка была удалена из Bionic, а также pdftk.

Для Ubuntu 18.04 просто установите пакет pdftk snap:

sudo snap install pdftk

Установка pdftk на Ubuntu 18.04 amd64

Я написал небольшой скрипт 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 команда! После этого пакеты в /tmp каталог будет удален.

Чтобы запустить этот скрипт, скопируйте его в редактор и сохраните, например, pdftk_installer. Затем запустите его в терминале с

chmod 755 pdftk_installer
./pdftk_installer

Это работает для Ubuntu 18.04:

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

Вы можете попробовать использовать образ докера Ubuntu 16.04 с установленным pdftk для запуска pdftk:

  1. Установить докер:

    sudo apt install docker.io
    
  2. Потяните Ubuntu 16.04 и запустите оболочку bash:

    sudo docker run -it ubuntu:16.04 bash
    
  3. Обновите и установите pdftk из командной строки контейнера:

    apt update
    apt install pdftk
    
  4. На новом терминале запустите:

    sudo docker ps -a
    
  5. Зафиксируйте образ, используя CONTAINER ID ubuntu:16.04, в новый образ с установленным pdftk:

    sudo docker commit CONTAINER_ID ubuntu_pdftk
    

    (Заменить CONTAINER_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
    

Установите пакет оснастки pdftk.

  1. Бегать:

     sudo snap install pdftk
    
  2. Выполните следующие действия, чтобы запустить свой пакет из root или вы хотите запустить из узла и т. Д.

    После установки Pdftk из оснастки вам необходимо изменить путь /snap/pdftk/current/usr/.. в Ubuntu в /usr для замены выполните следующую команду.

     sudo ln -s /snap/pdftk/current/usr/bin/pdftk /usr/bin/pdftk
    

    или для перезаписи выполните следующую команду.

     sudo ln -fs /snap/pdftk/current/usr/bin/pdftk /usr/bin/pdftk
    
  3. Тест с pdftk input.pdf cat output new.pdf

Мне удалось установить pdftk из пакетов artful (17.10) deb. Загрузите и установите в следующем порядке:

Лучше всего установить gcc-6-base Во-первых, чтобы избежать ошибок зависимостей, если вы делаете это из cli.

Это должно сработать... пока.

Я обнаружил, что для установки pdftk на 18.04 это работает:

  1. получить версию deb 18.10 для pdftk-java
  2. установить зависимости из обычных репозиториев 18.04
  3. dpkg install pdftk-java package, загруженный с 18.10

IE:

$ wget wget http://launchpadlibrarian.net/383018194/pdftk-java_0.0.0+20180723.1-1_all.deb
$ sudo apt install default-jre-headless libcommons-lang3-java libbcprov-java
$ sudo dpkg -i pdftk-java_0.0.0+20180723.1-1_all.deb

Я сделал быстрый и грязный обходной путь, чтобы запустить 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

Затем снова удалите исходники Artful из source.list, и вот как я запускаю PDFTK под Bionic.

Источник: https://christiandietze.de/pdftk-with-ubuntu-bionic-18-04/

Мне нравится ответ докера Адемира, но у него типичные проблемы с безопасностью и разрешениями, потому что докер должен работать от имени пользователя root. Если это вас беспокоит, попробуйте использовать Singularity. Вам нужно создать образ как 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

Вы можете запустить pdftk в Ubuntu 18.04 с помощью докера. Это расширенный вариант ответа Адемира.

Предполагая, что нам нужен только клиентский компонент pdftk, и на машине установлен докер. Просто поместите следующий скрипт где-нибудь в $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 минут, чтобы создать образ, если созданный образ останется на машине, следующие запуски будут быстрее. Вы можете свободно очистить изображение, оно будет создано, когда оно понадобится вам в следующий раз.

Похоже, что ссылки для скачивания в скрипте, опубликованном @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

В Ubuntu 18.04 отсутствуют параметры для установки pdftk. Но это самый быстрый из тех, что я встречал до сих пор.

Скачатьpdftk-java_3.3.2-1_all.debс http://ftp.debian.org/debian/pool/main/p/pdftk-java/

Установить:apt install ./pdftk-java_3.3.2-1_all.deb

наличие докера в Ubuntu:

alias pdftk='docker run -v $(pwd):/work mnuessler/pdftk'

pdftk in.pdf cat 1-endeast output out.pdf

На моем 18.04, работающем в WSL, я сделал следующее

Получить зависимости от (.deb файлы):

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*

тогда я взял .deb с https://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

Какая прекрасная возможность использовать магию докеров!

Что я сделал, так это использовал докер-контейнер с Ubuntu 16.04, установил в него pdftk и запустил его там.

Вот точные шаги, если вы хотите сделать то же самое:

  1. Установите докер, если у вас его еще нет ( 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. Запустите сценарий dockershell, указав путь к Dockerfile: docker/dockershell docker/Dockerfile (это займет некоторое время при первом запуске)

Теперь у вас должно быть приглашение внутри контейнера докера, откуда вы можете запустить pdftk. Когда вы закончите, введите exit выйти из контейнера и вернуться к хост-машине. Все вновь созданные файлы будут присутствовать в pdftk директории (но они будут принадлежать пользователю root, поэтому вам может потребоваться изменить владельца).

Бег sudo snap install pdftkна Digital Oceans Droplet Ubuntu 18.04 у меня работало нормально. PDFTK, похоже, добавлен к системному пути, и я могу получить к нему доступ из командной строки, например pdftk --helpработает.

Моя платформа разработки — Windows. Чем заменить следующую строку на моем сервере Linux?

      $pathToPdfTKBinary = "C:\\Program Files (x86)\\PDFtk Server\\bin\\pdftk.exe";
Другие вопросы по тегам