Comment puis-je installer pdftk dans Ubuntu 18.04 et versions ultérieures?


105

Y a-t-il une chance de pdftktravailler dans Ubuntu 18.04? J'ai besoin de cela pour créer des fichiers PDF avec un filigrane en shell.

Ou, est-ce que quelqu'un connaît une alternative pratique pdftkpour générer un PDF avec un filigrane en shell?

Je les vérifie / les teste déjà tous:

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

Mais n'a pas trouvé un outil de travail.


3
et PDF Chain aussi! Ces deux outils ont été précieux pour moi!
Joshp.23

3
N'écrivez pas simplement "Vous pouvez essayer ...", expliquez comment vous y prenez et les étapes à suivre pour rendre la réponse plus utile
ADDB

1
Si vous avez résolu vous-même votre problème, répondez à votre propre question et acceptez votre réponse. Ne mettez pas la réponse dans votre question ou dans les commentaires! :-) J'ai pris la liberté de revenir sur le changement qui ajoutait la réponse, mais vous pouvez toujours consulter l'historique d'un message via le lien en dessous.
David Foerster

5
Pour votre information, pdftk a été retiré des référentiels et une demande de fonctionnalité a été ajoutée pour la réintégrer.
David Foerster

2
il est dommage qu'un outil aussi agréable ait été supprimé simplement parce que les développeurs n'ont pas trouvé de solution acceptable
Daniel Alder

Réponses:


92

Le paquet pdftk dans Ubuntu (et son paquet Debian en amont ) a été abandonné en raison de sa dépendance au runtime GCJ, désormais obsolète. J'ai trouvé un fork qui dépend d'OpenJDK ou similaire à la place.

Installer à partir d'une future version d'Ubuntu (recommandé)

À partir de Cosmic (Ubuntu 18.10), Ubuntu est fourni à pdftk-javapartir du même code source que ci-dessous. Tenter d'installer pdftkinstallera plutôt ce paquet. Les utilisateurs de versions antérieures peuvent le télécharger manuellement à partir du référentiel de paquets et l'installer avec leur gestionnaire de paquets préféré.

Installer depuis PPA (obsolète)

J'ai construit un paquet Deb (pour Bionic uniquement) avec des dépendances appropriées:

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

Le paquet contient un script de wrapper placé dans /usr/bin, vous pouvez donc l'invoquer normalement:

pdftk <arguments> ...

Installer depuis la source

  1. Installez les outils de construction et les dépendances:

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

    Vous pouvez bien entendu utiliser un kit JDK pris en charge différent de celui fourni par default-jdk-headless.

  2. Téléchargez la fourche pdftk de Marc Vinyal :

    git clone https://gitlab.com/pdftk-java/pdftk.git
    cd pdftk
    
  3. Placez les liens symboliques vers les bibliothèques requises dans le libdossier:

    mkdir lib
    ln -st lib /usr/share/java/{commons-lang3,bcprov}.jar
    
  4. Construisez le paquet JAR:

    ant jar
    
  5. Exécutez le package JAR:

    java -jar build/jar/pdftk.jar --help
    
  6. (Facultatif) Pour exécuter le package JAR, par exemple, lorsque vous le distribuez sur d'autres systèmes, vous avez besoin d'au moins un JRE en état de fonctionnement (sans interface graphique), issu du default-jre-headlesspackage, ainsi que des bibliothèques Java libcommons-lang3-javaet libbcprov-java:

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

    Encore une fois, vous pouvez utiliser un JRE différent de default-jre-headless. Ce fork de pdftk prend également en charge les versions pour les anciennes versions de JRE (≥ 7 selon la documentation).

  7. (Facultatif) Vous pouvez apprendre à Linux à exécuter des fichiers JAR (Java Archive) via update-binfmts(8). La plupart des JRE livrés dans les packages Deb, y compris ceux des référentiels de packages de Canonical, s’occupent de cela lors de l’installation, bien que cela semble être un bug dans certains packages OpenJDK.

PS: J’ai essayé cela avec OpenJDK 9 sans tête dans Ubuntu Trusty, mais je vois peu de raisons pour lesquelles cela ne fonctionnerait pas avec OpenJDK 10 sans tête dans Bionic.

Selon les applications

Un intervenant a soulevé la question légitime de savoir si les applications dépendantes de la chaîne PDF sont affectées par ce changement:

  • Non , PDF Chain est une application C ++ et n'est pas directement affectée par la dépréciation de GCJ. Il a besoin d’un exécutable pdftk fonctionnel, mais ne se soucie pas de la façon dont il fonctionne sous le capot. Dans tous les cas, PDF Chain a été abandonné de Bionic ainsi que de pdftk .

Je lisais une autre question sur l'installation d'un autre paquet qui avait été retiré du dépôt pour le 18.04 et un utilisateur a suggéré d'installer le paquet .deb à l'aide de gdebi, qui devrait gérer les dépendances. Pensez-vous que cela fonctionnerait ou créerait des problèmes? C'est peut-être une question idiote - j'essaie simplement de mieux comprendre la gestion des paquets.
Hee Jin

5
Les deux instructions de cette réponse installent la pdftk-javafourche de Marc Vinyal . Ce sera (très probablement) le remplaçant officiel de pdftkDebian ( voir ) et de Ubuntu (avec un paquet disponible pour 18.10). Cela semble donc être la meilleure réponse , car elle est "à l'épreuve du temps": à partir de 18h10, vous recevrez le même logiciel dans les pensions officielles.
tanius

@ DavidFoerster Sur. Question: Y a-t-il une raison particulière de recommander l'utilisation antde bibliothèques installées via apt plutôt que d'utiliser Gradle pour la construction?
Raphaël

À une question de suivi concernant lesdits paquets factices, des doutes se sont posés quant à savoir si les dépendances de pdftk-javasont bien choisies. Vous voudrez peut-être vérifier cela.
Raphaël

J'ai créé des descriptions de paquet pour equivs qui fournissent Java installé par SDKMAN! comme un paquet qui remplit les dépendances de pdftk-java.
Raphaël

61

Pour Ubuntu 18.04, installez simplement le paquet d'instantané pdftk:

sudo snap install pdftk

1
Symlinking n'a pas fonctionné pour moi, car il snapsemble avoir besoin du nom du script. Mais un script wrapper minimal /snap/bin/pdftk-smoser.pdftk "$@"fonctionne également bien.
Boldewyn

Quelle version d'Ubuntu? Les instructions précises que j'ai données ci-dessus ont fonctionné pour moi. J'appelle pdftk à partir de certains scripts de traitement perl xml et le test à l'acide teste le fonctionnement des scripts et la production de fichiers PDF fusionnés.
pgoetz

3
J'ai mis à jour la réponse ci-dessus pour utiliser simplement "pdftk" plutôt que "pdftk", car j'ai (smoser) téléchargé un cliché nommé "pdftk" dans la boutique avec le même contenu. ( snapcraft.io/pdftk )
smoser

4
Cela semblait bien s’installer, mais pdftk ne s’ouvrirait ni ne travaillerait sur aucun fichier (toujours dit «Erreur: Impossible de trouver le fichier. Erreur: Impossible d’ouvrir le fichier PDF: '), n’a pas non plus de page de manuel. En fin de compte je l'ai enlevé avec snap remove et je suis allé avec la solution @abu_bua ci-dessus, qui fonctionne parfaitement.
Scoobydoo

1
En raison des points de conception des captures, une capture ne peut pas accéder à tous les fichiers. Certaines informations à ce sujet sont disponibles sur github.com/smoser/pdftk/issues/1 . La solution la plus simple consiste à placer des fichiers dans votre répertoire personnel.
smoser

36

Installation de pdftk sur Ubuntu 18.04 amd64

J'ai écrit un petit script bash qui automatise l'installation sur Ubuntu 18.04. Notez que je n'ai téléchargé que des paquets 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

Ce script va télécharger les packages /tmpet les installer à partir de là en utilisant une apt installcommande! Ensuite, les paquets du /tmprépertoire seront supprimés.

Pour exécuter ce script, copiez-le dans un éditeur et enregistrez-le, par exemple, pdftk_installer . Puis lancez-le dans un terminal avec

chmod 755 pdftk_installer
./pdftk_installer

On dirait que pdftk-dbg_2.02-4build1_amd64.debc'est optionnel
Jossef Harush

Ceci est bien préférable à la version instantanée ou à la version Java de PPA - merci!
simon

Pour donner quelques explications, il semble que vous téléchargiez les packages Ubuntu-artful (17.10).
Randall Whitman

3
Tous les liens sont rompus
Développeur

1
liens mis à jour maintenant!
Abu_bua le

10

Vous pouvez essayer d'utiliser une image de menu fixe d'Ubuntu 16.04 avec pdftk installé pour exécuter pdftk:

  1. Installer le docker:

    sudo apt install docker.io
  2. Tirez Ubuntu 16.04 et lancez un shell bash:

    sudo docker run -it ubuntu:16.04 bash
  3. Mettez à jour et installez pdftk à partir de l'invite du conteneur:

    apt update
    apt install pdftk
  4. Sur un nouveau terminal, exécutez:

    sudo docker ps -a
  5. Commettez l’image en utilisant l’ID CONTAINER de ubuntu: 16.04 sur une nouvelle image sur laquelle pdftk est installé:

    sudo docker commit CONTAINER_ID ubuntu_pdftk

    (Remplacez CONTAINER_IDpar votre ID de conteneur.)

  6. Créez un fichier nommé pdftkdans /usr/bin, puis rendez-le exécutable en utilisant 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

Presque exactement ce que j'ai fait. Sauf que tu n'as pas commis d'erreur -v "$PWD:/workdir$PWD" -w "/workdir$PWD"?
Ondra Žižka

5

J'ai pu installer pdftk à partir de paquets deb astucieux (17.10). Téléchargez puis installez, dans cet ordre:

Il est préférable d'installer d' gcc-6-baseabord pour éviter les erreurs de dépendance si vous le faites à partir de cli.

Cela devrait faire l'affaire… pour l'instant.


2

J'ai fait une solution rapide et sale pour que PDFTK fonctionne sous 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

Je mets à jour mon sources.listet inclure les lignes suivantes:

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

Après cela, je lance un simple

sudo apt update

pour que les modifications prennent effet.

Puis installez pdftk via

sudo apt install pdftk

Ensuite, supprimez à nouveau les sources Artful de la source.list et c’est ainsi que PDFTK fonctionne sous Bionic.

Source: https://christiandietze.de/pdftk-with-ubuntu-bionic-18-04/


5
Bonjour Christian, voudriez-vous mettre à jour votre réponse pour inclure votre solution de contournement? Nous préférons que vous incluiez ici les éléments essentiels de la réponse, puis que vous fournissiez le lien à titre de référence. Merci!
CalvT

1
Oui, surtout que le site auquel vous avez accédé semble être en panne.
terdon

Bonjour CalvT, la solution de contournement que j'utilise est simplement d'ajouter les paquets astucieux à apt, d'installer pdftk et de les supprimer. Et terdon, mon site n’a pas été fermé au cours des 30 derniers jours, donc je ne sais pas pourquoi vous ne devriez pas accéder au site.
WiKrIe

@WiKrIe Il y a un problème avec votre site. Je peux atteindre l'URL de base, mais pas la page que vous avez liée. Wayback Machine non plus. Le cache de Google ne le chargera pas, mais chargera la source . Il doit y avoir un problème sur cette page quelque part. C'est pourquoi terdon ♦ a pensé que votre site était en panne. J'ai fait jusqu'à ce que j'ai vérifié. J'espère que ça t'as aidé.
Dɑvïd

1
-1 pour la suggestion de mélanger des référentiels destinés à différentes versions d'Ubuntu sans règles de priorité appropriées.
David Foerster


1

Vous pouvez exécuter pdftk sur Ubuntu 18.04 avec docker. C'est une variante améliorée de la réponse d'Ademir.

En supposant que nous n’ayons besoin que d’un composant cli de pdftk et que docker soit installé sur la machine. Il suffit de placer le script suivant quelque part sur le $ PATH avec le nom pdftket le bit d’exécutable définis:

#!/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 "$@"

La première exécution prendra environ 2 minutes pour créer l’image, si l’image construite reste sur la machine, les exécutions suivantes seront plus rapides. Vous pouvez librement nettoyer l'image, elle sera construite lorsque vous en aurez besoin la prochaine fois.


1

Les liens de téléchargement dans le script posté par @abu_bua ne semblent plus fonctionner (probablement à cause de la fin du support de 17.10?), Voici donc une version modifiée du même script qui utilise les packages correspondants de la version 16.04. Essayé et testé sur une machine sous 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

J'aime la réponse du menu fixe d'Ademir , mais elle présente des problèmes typiques en matière de sécurité et d'autorisations, car le menu fixe doit être exécuté en tant que root. Si cela vous dérange, essayez d’utiliser Singularity . Vous devez créer l'image en tant que root, mais tout utilisateur peut ensuite l'exécuter.

Voici le Singularityfichier que j'ai utilisé:

# 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 "$@"

Ensuite, j'ai construit l'image.

sudo singularity build pdftk.simg Singularity

Une fois que cela a fonctionné, je l'ai installé dans un dossier sur le chemin, avec un script wrapper qui définit le dossier de base sur le répertoire actuel.

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

Et maintenant je peux courir 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.

Le seul inconvénient est qu'il s'agit d'un exécutable assez volumineux, car il contient une distribution complète d'Ubuntu 16.04. Vous pourriez également avoir des problèmes si vous essayez de manipuler des fichiers PDF qui ne se trouvent pas dans le répertoire actuel.

$ 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

Quelle belle occasion d'utiliser un peu de magie docker!

Ce que j'ai fait est d'utiliser un conteneur Docker sous Ubuntu 16.04, installer pdftk à l'intérieur et l'exécuter.

Voici les étapes exactes si vous voulez faire la même chose:

  1. Installez docker si vous ne l'avez pas déjà ( https://docs.docker.com/install/ )
  2. Créez un répertoire appelé quelque part pdftk
  3. Créer un répertoire appelé dockerà l'intérieur du pdftkrépertoire
  4. Copiez ce fichier Docker dans le pdftk/dockerrépertoire: https://github.com/gkotian/gautam_linux/blob/master/docker/pdftk/Dockerfile
  5. Copiez également ce script dans le pdftk/dockerrépertoire: https://github.com/gkotian/gautam_linux/blob/master/scripts/dockershell
  6. Assurez-vous que le dockershellscript est exécutable
  7. Dans le pdftkrépertoire, copiez tous les fichiers pdf avec lesquels vous voulez travailler
  8. cd /path/to/pdftk
  9. Exécutez le script dockershell avec le chemin du fichier Docker: docker/dockershell docker/Dockerfile(cela prendra un certain temps la première fois que vous l'exécutez)

Vous devez maintenant avoir une invite dans le conteneur de menu fixe, à partir de laquelle vous pouvez exécuter pdftk. Lorsque vous avez terminé, tapez exitpour quitter le conteneur et retourner à la machine hôte. Tous les fichiers nouvellement générés seront présents dans le pdftkrépertoire (mais ils appartiendront à root, vous devrez donc peut-être changer de propriétaire si nécessaire).


0

Lors de ma course de 18.04 dans WSL, j’ai fait ce qui suit:

Obtenez les dépendances à partir des fichiers (.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

puis installez les dépendances ci-dessus

sudo dpkg -i libgcj*

alors j'ai pris le .debde 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
Les liens pour libgcj et libgcj17 sont cassés.
HJLebbink

1
@HJLebbink Ubuntu ne garde plus l’art: :( liens de bibliothèques
Eduard Florinescu
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.