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


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.23

3
Не просто напишите «Вы можете попробовать ...», объясните, как вы это делаете, и какие шаги вы должны выполнить, чтобы сделать ответ более полезным
ADDB

1
Если вы решили свою проблему самостоятельно, ответьте на свой вопрос и примите ответ. Не помещайте ответ в свой вопрос или комментарии! :-) Я взял на себя смелость отменить изменения, добавившие ответ, но вы всегда можете просмотреть историю публикации по ссылке под ней.
Дэвид Фёрстер,

5
К вашему сведению, pdftk был удален из репозиториев, и есть запрос на добавление функции обратно.
Дэвид Фёрстер

2
обидно, что такой хороший инструмент был удален только потому, что разработчики не нашли приемлемого решения
Даниэль Алдер

Ответы:


92

Пакет 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пакет из пакета, а также библиотеки Java libcommons-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 .

Я читал еще один вопрос об установке другого пакета, который был удален из репозиториев 18.04, и один пользователь предложил установить пакет .deb с помощью gdebi, который должен обрабатывать зависимости. Как вы думаете, это сработает или создаст некоторые проблемы? Это может быть глупый вопрос - я просто пытаюсь понять больше об управлении пакетами.
Хи Джин,

5
Оба набора инструкций в этом ответе устанавливают вилку Марка Виньяля pdftk-java. Это будет (очень вероятно) официальной заменой pdftkв Debian ( см. ) И в Ubuntu (с пакетом, доступным для 18.10). Так что, похоже, это лучший ответ , поскольку это «перспектива на будущее»: начиная с 18.10, вы получите то же самое программное обеспечение, которое предоставляется в официальных репозиториях.
Танус

@DavidFoerster На этом. Вопрос: Есть ли особая причина рекомендовать antбиблиотеки, установленные через apt over, используя Gradle для сборки?
Рафаэль

При последующем вопросе, касающемся указанных фиктивных пакетов, возникли сомнения в отношении того, правильно ли pdftk-javaвыбраны зависимости . Вы можете проверить это.
Рафаэль

Я создал описания пакетов для эквивалентов, которые предоставляют Java, установленную SDKMAN! как пакет, который выполняет зависимости pdftk-java.
Рафаэль

61

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

sudo snap install pdftk

1
Симлинкинг не работает для меня, потому что, snapкажется, нужно имя сценария. Но сценарий минимальной оболочки /snap/bin/pdftk-smoser.pdftk "$@"работает одинаково хорошо.
Болдевин

Какая версия Ubuntu? Точные инструкции, которые я дал выше, сработали для меня. Я вызываю pdftk из некоторых сценариев обработки perl xml, и кислотный тест - это работа сценариев и создание объединенных PDF-файлов.
pgoetz

3
я обновил ответ выше, чтобы использовать только «pdftk», а не «pdftk», поскольку я (более смелый) загрузил снимок с именем «pdftk» в магазин с тем же содержимым. ( snapcraft.io/pdftk )
здоровый

4
Казалось, что это нормально, но pdftk не будет открываться или работать с какими-либо файлами (всегда говорится «Ошибка: невозможно найти файл. Ошибка: не удалось открыть файл PDF:»), также нет справочной страницы. В конце я удалил его с помощью snap remove и перешел к решению @abu_bua, описанному выше, которое отлично работает.
scoobydoo

1
Из-за особенностей дизайна привязок оснастка не может получить доступ ко всем файлам. Некоторая информация об этом доступна по адресу github.com/smoser/pdftk/issues/1 . Самое простое решение - поместить файлы в ваш домашний каталог.
smoser

36

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

Я написал небольшой скрипт 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

Это намного предпочтительнее версии Snap или PPA-версии на основе Java - спасибо!
Симон

Чтобы дать какое-то объяснение, это похоже на загрузку пакетов Ubuntu-artful (17.10).
Рэндалл Уитмен

3
Все ссылки не работает
разработчик

1
ссылки обновлены сейчас!
abu_bua

10

Вы можете попробовать использовать образ докера 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

Почти точно, что я сделал. Кроме того, у вас нет ошибки в -v "$PWD:/workdir$PWD" -w "/workdir$PWD"?
Ондра Жижка

5

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

Лучше всего 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

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

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


5
Привет, Кристиан, не мог бы ты обновить свой ответ, включив в него свой обходной путь? Мы предпочитаем, если вы включите здесь основные части ответа, а затем предоставите ссылку для справки. Спасибо!
CalvT

1
Да, тем более что сайт, на который вы ссылаетесь, кажется, не работает.
Тердон

Привет, CalvT, я использую обходной путь, просто добавив пакеты artfull в apt, установи pdftk и удали их. И тердон мой сайт не был закрыт в течение последних 30 дней, поэтому я не знаю, почему вы не должны заходить на сайт.
WiKrIe

@WiKrIe Проблема с вашим сайтом. Я могу найти базовый URL, но не страницу, на которую вы ссылаетесь. Никто не может Wayback Machine. Кеш Google не загружает его, но загружает источник . На этой странице где-то должна быть проблема. Вот почему Terdon ♦ думал, что ваш сайт не работает. Я тоже, пока не проверил. Надеюсь, это поможет.
августа

1
-1 за предложение смешивать репозитории, предназначенные для разных выпусков Ubuntu без надлежащих правил приоритета.
Дэвид Фёрстер


1

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


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

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

0

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

Что я сделал, так это использовал докер-контейнер с 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, поэтому вам может потребоваться изменить владельца при необходимости).


0

На моем 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

1
Ссылки на libgcj и libgcj17 не работают.
HJLebbink

1
@HJLebbink Ubuntu больше не хранит хитрость :( ссылки на библиотеки
Эдуард Флоринеску
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.