Як я можу встановити 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-ланцюжок теж! Ці два інструменти були для мене безцінними!
Джошп.23,

3
Не пишіть просто "Ви можете спробувати ...", поясніть, як ви це робите, і кроки, які вам потрібно виконати, щоб відповідь стала більш корисною
ADDB

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


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 Chain було скинуто як з Bionic, так і з pdftk .

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

5
Обидва набори інструкцій у цій відповіді встановлюють виделку Marc Vinyal pdftk-java. Це буде (дуже ймовірно) офіційною заміною pdftkDebian ( див. ) Та Ubuntu (з пакетом, доступним до 18.10). Отож, це здається найкращою відповіддю , оскільки це "доказ у майбутньому": з 18.10 ви отримаєте те саме програмне забезпечення, яке подається в офіційних репортажах.
таніум

@DavidFoerster На ньому. Запитання: Чи є певна причина для рекомендацій antз бібліотеками, встановленими через apt через використання Gradle для збірки?
Рафаель

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

Я створив описи пакетів для еквівалентів, які забезпечують Java, встановлену SDKMAN! як пакет, що відповідає залежностям pdftk-java.
Рафаель

61

Для Ubuntu 18.04 просто встановіть оснащення пакету pdftk:

sudo snap install pdftk

1
Симлінінг для мене не працював, оскільки, snapздається, потрібна назва сценарію. Але мінімальний сценарій обгортки /snap/bin/pdftk-smoser.pdftk "$@"працює однаково добре.
Болдевін

Яка версія Ubuntu? Точні вказівки, які я даю вище, працювали для мене. Я закликаю pdftk з деяких сценаріїв обробки файлів Perl xml, і тест на кислотність - це сценарії, які працюють та створюють об'єднані файли PDF.
pgoetz

3
я оновив відповідь вище, щоб використовувати просто 'pdftk', а не 'pdftk', оскільки я (smoser) завантажив оснастку під назвою 'pdftk' в магазин з тим самим вмістом. ( snapcraft.io/pdftk )
smoser

4
Це здавалося, що встановлено нормально, але тоді pdftk не відкриється і не працює над будь-якими файлами (завжди йдеться про помилку: Не вдалося знайти файл. Помилка: не вдалося відкрити файл PDF: '), також не має жодної сторінки. Врешті-решт я видалив його з одразу видаленням та перейшов із рішенням @abu_bua вгорі, яке прекрасно працює.
Scoobydoo

1
Через точки дизайну знімків не можна отримати доступ до всіх файлів. Деякі відомості про це можна знайти на веб- сайті github.com/smoser/pdftk/isissue/1 . Найпростіше рішення - помістити файли в домашній каталог.
курник

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, необов’язково
Джозеф Харуш

Це набагато краще для оснащеної версії або версії на базі Java з PPA - дякую!
симон

Щоб запропонувати певне пояснення, це здається, щоб завантажити пакунки 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 shell:

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

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

    sudo docker ps -a
  5. Зафіксуйте зображення за допомогою ідентифікатора CONTAINER 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 з майстерних (17.10) пакетів деб. Завантажте та встановіть у такому порядку:

Найкраще спочатку встановити, 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, і ось так я запускаю PDFTK під Bionic.

Джерело: https://christiandietze.de/pdftk-with-ubuntu-bionic-18-04/


5
Вітаю, Крістіане, чи не заперечуєш ти оновити свою відповідь, щоб включити те, що твоє вирішення? Ми вважаємо за краще, якщо ви включите сюди основні частини відповіді, а потім надасте посилання для довідки. Дякую!
CalvT

1
Так, тим більше, що сайт, з яким ви пов’язали, здається, не працює.
тердон

Привіт CalvT, вирішення якого я використовую - це просто додати artfull пакети для влучення, встановити pdftk та видалити їх. І тердон мій сайт не був закритий протягом останніх 30 днів, тому я не знаю, чому ви не повинні отримувати доступ до сайту.
WiKrIe

@WiKrIe Виникла проблема з вашим сайтом. Я можу досягти базової URL-адреси, але не тієї сторінки, яку ви пов’язали. Не може також і Wayback Machine. Кеш Google не завантажує його, але завантажить джерело . На цій сторінці десь має бути проблема. Отож, тому terdon ♦ подумав, що ваш сайт знищений. Так я робив, поки не перевірив. Сподіваюся, що це допомагає.
Dɑvïd

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

Мені подобається відповідь докера Ademir, але він має типові проблеми із захистом та дозволами, тому що докер повинен працювати як 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

Яка чудова можливість використовувати якусь магію докера!

Що я зробив, це використовувати контейнер docker, який працює 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.