Как я могу установить 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> ...
Установить из источника
Установите инструменты сборки и зависимости:
sudo apt install git default-jdk-headless ant \ libcommons-lang3-java libbcprov-java
Конечно, вы можете использовать другой поддерживаемый JDK, чем тот, который предоставляется
default-jdk-headless
,Загрузите вилку pdftk Марка Виньяля:
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
пакет, а также библиотеки Javalibcommons-lang3-java
а такжеlibbcprov-java
:sudo apt install default-jre-headless libcommons-lang3-java libbcprov-java
Опять же, вы можете использовать другой JRE, чем
default-jre-headless
, Эта вилка pdftk также поддерживает сборки для более старых версий JRE (≥ 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:
Установить докер:
sudo apt install docker.io
Потяните Ubuntu 16.04 и запустите оболочку bash:
sudo docker run -it ubuntu:16.04 bash
Обновите и установите pdftk из командной строки контейнера:
apt update apt install pdftk
На новом терминале запустите:
sudo docker ps -a
Зафиксируйте образ, используя CONTAINER ID ubuntu:16.04, в новый образ с установленным pdftk:
sudo docker commit CONTAINER_ID ubuntu_pdftk
(Заменить
CONTAINER_ID
с вашим идентификатором контейнера.)Создайте файл с именем
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.
Бегать:
sudo snap install pdftk
Выполните следующие действия, чтобы запустить свой пакет из 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
Тест с
pdftk input.pdf cat output new.pdf
Мне удалось установить pdftk из пакетов artful (17.10) deb. Загрузите и установите в следующем порядке:
Лучше всего установить gcc-6-base
Во-первых, чтобы избежать ошибок зависимостей, если вы делаете это из cli.
Это должно сработать... пока.
Я обнаружил, что для установки pdftk на 18.04 это работает:
- получить версию deb 18.10 для
pdftk-java
- установить зависимости из обычных репозиториев 18.04
- 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 файлы):
- 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*
тогда я взял .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 и запустил его там.
Вот точные шаги, если вы хотите сделать то же самое:
- Установите докер, если у вас его еще нет ( https://docs.docker.com/install/)
- Создайте каталог где-нибудь с именем
pdftk
- Создайте каталог с именем
docker
внутриpdftk
каталог - Скопируйте этот Dockerfile в
pdftk/docker
каталог: https://github.com/gkotian/gautam_linux/blob/master/docker/pdftk/Dockerfile - Скопируйте этот скрипт также в
pdftk/docker
каталог: https://github.com/gkotian/gautam_linux/blob/master/scripts/dockershell - Убедитесь, что
dockershell
скрипт исполняемый - В
pdftk
каталог, скопируйте все PDF-файлы, с которыми вы хотите работать cd /path/to/pdftk
- Запустите сценарий 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";