Come posso installare pdftk in Ubuntu 18.04 e versioni successive?


105

C'è qualche possibilità di iniziare a pdftklavorare in Ubuntu 18.04? Ne ho bisogno per creare file PDF con una filigrana nella shell.

Oppure qualcuno conosce un'alternativa funzionante pdftkper generare un PDF con una filigrana nella shell?

Li controllo già / li provo tutti:

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

Ma non ho trovato uno strumento di lavoro.


3
e anche PDF Chain! Questi due strumenti sono stati preziosi per me!
Joshp.23

3
Non limitarti a scrivere "Puoi provare ...", spiega come lo fai e i passaggi che devi seguire per rendere la risposta più utile
ADDB

1
Se hai risolto il problema da solo, rispondi alla tua domanda e accetta la tua risposta. Non inserire la risposta nella tua domanda o nei commenti! :-) Mi sono preso la libertà di ripristinare la modifica che ha aggiunto la risposta, ma puoi sempre rivedere la cronologia di un post tramite il link sottostante.
David Foerster,

5
Cordiali saluti, pdftk è stato eliminato dai repository e c'è una richiesta di funzionalità per aggiungerlo nuovamente.
David Foerster,

2
è un peccato che uno strumento così bello sia stato rimosso solo perché gli sviluppatori non hanno trovato una soluzione accettabile
Daniel Alder,

Risposte:


92

Il pacchetto pdftk in Ubuntu (e il suo pacchetto Debian a monte ) è stato abbandonato a causa della sua dipendenza dal runtime GCJ ora deprecato. Ho trovato un fork che dipende invece da OpenJDK o simili.

Installa da una futura versione di Ubuntu (consigliata)

A partire da Cosmic (Ubuntu 18.10), Ubuntu viene fornito pdftk-javacon lo stesso codice sorgente di seguito in sostituzione. Tentare di installare pdftkinstallerà invece questo pacchetto. Gli utenti di versioni precedenti possono scaricarlo manualmente dal repository dei pacchetti e installarlo con il loro gestore pacchetti preferito.

Installa da PPA (obsoleto)

Ho creato un pacchetto Deb (solo per Bionic) con dipendenze adeguate:

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

Il pacchetto contiene uno script wrapper inserito /usr/bin, quindi puoi invocarlo normalmente:

pdftk <arguments> ...

Installa dalla fonte

  1. Installa gli strumenti di compilazione e le dipendenze:

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

    Ovviamente puoi usare un JDK supportato diverso da quello fornito da default-jdk-headless.

  2. Scarica la forcella pdftk di Marc Vinyal :

    git clone https://gitlab.com/pdftk-java/pdftk.git
    cd pdftk
    
  3. Inserire i collegamenti simbolici alle librerie richieste nella libcartella:

    mkdir lib
    ln -st lib /usr/share/java/{commons-lang3,bcprov}.jar
    
  4. Compilare il pacchetto JAR:

    ant jar
    
  5. Esegui il pacchetto JAR:

    java -jar build/jar/pdftk.jar --help
    
  6. (Facoltativo) Per eseguire il pacchetto JAR, ad esempio quando lo si distribuisce ad altri sistemi, è necessario almeno un JRE funzionante (senza testa) come dal default-jre-headlesspacchetto, nonché dalle librerie Java libcommons-lang3-javae libbcprov-java:

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

    Ancora una volta puoi usare un JRE diverso da default-jre-headless. Questo fork di pdftk supporta anche build per versioni precedenti di JRE (≥ 7 secondo la documentazione).

  7. (Facoltativo) È possibile insegnare a Linux a eseguire file JAR (Java Archive) tramite update-binfmts(8). La maggior parte dei JRE spediti in pacchetti Deb, compresi quelli nei repository di pacchetti di Canonical, se ne occupano durante l'installazione, sebbene sembri essere difettoso in alcuni pacchetti OpenJDK.

PS: L'ho provato con OpenJDK 9 senza testa in Ubuntu Trusty ma vedo poche ragioni per cui non dovrebbe funzionare con OpenJDK 10 senza testa in Bionic.

A seconda delle applicazioni

Un commentatore ha sollevato la domanda valida se le applicazioni della catena di PDF dipendenti sono interessate da questa modifica:

  • No , PDF Chain è un'applicazione C ++ e non è direttamente interessata dalla deprecazione di GCJ. Ha bisogno di un eseguibile pdftk funzionante ma non gli interessa come funziona sotto il cofano. In ogni caso, PDF Chain è stato eliminato da Bionic e pdftk .

Stavo leggendo un'altra domanda sull'installazione di un pacchetto diverso che è stato eliminato dai repository per 18.04 e un utente ha suggerito di installare il pacchetto .deb usando gdebi, che dovrebbe gestire le dipendenze. Pensi che funzionerebbe o creerebbe dei problemi? Potrebbe essere una domanda stupida: sto solo cercando di capire di più sulla gestione dei pacchetti.
Hee Jin,

5
Entrambi i set di istruzioni in questa risposta installano la pdftk-javaforcella di Marc Vinyal . Questo sarà (molto probabilmente) il sostituto ufficiale di pdftkDebian ( vedi ) e di Ubuntu (con un pacchetto disponibile per il 18.10). Quindi questa sembra essere la risposta migliore , in quanto è "a prova di futuro": dalle 18.10 in poi, otterrai lo stesso software offerto nei repository ufficiali.
tanius,

@DavidFoerster Su di esso. Domanda: c'è un motivo particolare per raccomandare antcon le librerie installate tramite apt rispetto all'uso di Gradle per la build?
Raphael

A una domanda di follow-up relativa a detti pacchetti fittizi, sono sorti dubbi sul fatto che le dipendenze di pdftk-javasiano state scelte bene. Potresti voler dare un'occhiata.
Raffaello

Ho creato le descrizioni dei pacchetti per equivs che forniscono Java installato da SDKMAN! come un pacchetto che soddisfa le dipendenze di pdftk-java.
Raffaello

61

Per Ubuntu 18.04, basta installare il pacchetto snap pdftk:

sudo snap install pdftk

1
Il collegamento simbolico non ha funzionato per me, perché snapsembra che abbia bisogno del nome dello script. Ma uno script wrapper minimo /snap/bin/pdftk-smoser.pdftk "$@"funziona altrettanto bene.
Boldewyn,

Quale versione di Ubuntu? Le istruzioni precise che do sopra hanno funzionato per me. Chiamo pdftk da alcuni script di elaborazione XML perl e il test dell'acido è che gli script funzionano e producono pdf uniti.
pgoetz,

3
ho aggiornato la risposta sopra per usare solo 'pdftk' piuttosto che 'pdftk' poiché io (più intelligente) ho caricato uno snap chiamato 'pdftk' nello store con lo stesso contenuto. ( snapcraft.io/pdftk )
smoser

4
Questo sembrava installarsi bene ma poi pdftk non si apriva o funzionava su alcun file (dice sempre "Errore: impossibile trovare il file. Errore: Impossibile aprire il file PDF:"), inoltre non ha una pagina man. Alla fine l'ho rimosso con snap remove e sono andato con la soluzione @abu_bua sopra, che funziona perfettamente.
scoobydoo,

1
A causa dei punti di progettazione degli snap, uno snap non può accedere a tutti i file. Alcune informazioni al riguardo sono disponibili su github.com/smoser/pdftk/issues/1 . La soluzione più semplice è mettere i file nella tua home directory.
Smoser

36

Installazione di pdftk su Ubuntu 18.04 amd64

Ho scritto un piccolo script bash che automatizza l'installazione su Ubuntu 18.04. Nota che ho scaricato solo pacchetti 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

Questo script scaricherà i pacchetti /tmpe li installerà da lì usando un apt installcomando! Successivamente i pacchetti nella /tmpdirectory verranno rimossi.

Per eseguire questo script, copiarlo in un editor e salvarlo, ad esempio pdftk_installer . Quindi eseguirlo in un terminale con

chmod 755 pdftk_installer
./pdftk_installer

sembra pdftk-dbg_2.02-4build1_amd64.debfacoltativo
Jossef Harush,

Questo è molto preferibile alla versione a scatto o alla versione basata su Java dal PPA - grazie!
simon

Per offrire qualche spiegazione, questo sembra scaricare i pacchetti Ubuntu-artful (17.10).
Randall Whitman,

3
Tutti i collegamenti sono interrotti
Sviluppatore

1
link aggiornati ora!
abu_bua,

10

Puoi provare a utilizzare un'immagine docker di Ubuntu 16.04 con pdftk installato per eseguire pdftk:

  1. Installa finestra mobile:

    sudo apt install docker.io
  2. Tirare Ubuntu 16.04 ed eseguire una shell bash:

    sudo docker run -it ubuntu:16.04 bash
  3. Aggiorna e installa pdftk dal prompt del contenitore:

    apt update
    apt install pdftk
    
  4. Su un nuovo terminale eseguito:

    sudo docker ps -a
  5. Esegui il commit dell'immagine usando l'ID CONTAINER di ubuntu: 16.04 in una nuova immagine con pdftk installato:

    sudo docker commit CONTAINER_ID ubuntu_pdftk

    (Sostituisci CONTAINER_IDcon il tuo ID contenitore.)

  6. Creare un file denominato pdftkin /usr/bine poi renderlo eseguibile tramite 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
    

Quasi esattamente quello che ho fatto. Tranne, non hai un errore -v "$PWD:/workdir$PWD" -w "/workdir$PWD"?
Ondra Žižka,

5

Sono stato in grado di installare pdftk dai pacchetti deb artful (17.10). Scarica e quindi installa, in questo ordine:

È meglio installare gcc-6-baseprima per evitare errori di dipendenze se lo fai da cli.

Questo dovrebbe fare il trucco ... per ora.


2

Ho fatto una soluzione rapida e sporca per far funzionare PDFTK sotto 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

Aggiorna il mio sources.liste includo le seguenti righe:

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

Dopo quello corro un semplice

sudo apt update

per rendere effettive le modifiche.

Quindi installare pdftk tramite

sudo apt install pdftk

Quindi rimuovi nuovamente le fonti Artful dall'elenco source.list ed è così che eseguo PDFTK sotto Bionic.

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


5
Ciao Christian, ti dispiacerebbe aggiornare la tua risposta per includere qual è la tua soluzione? Preferiamo se includi qui le parti essenziali della risposta e poi fornisci il link come riferimento. Grazie!
CalvT

1
Sì, soprattutto perché il sito a cui ti sei collegato sembra essere inattivo.
terdon

Ciao CalvT, la soluzione alternativa che uso è semplicemente aggiungere i pacchetti artfull a apt, installare pdftk e rimuoverli. E il mio sito non è stato chiuso negli ultimi 30 giorni, quindi non so perché non dovresti accedere al sito.
WiKrIe

@WiKrIe Si è verificato un problema con il tuo sito. Posso raggiungere l'URL di base, ma non la pagina che hai collegato. Neanche Wayback Machine. La cache di Google non la caricherà, ma caricherà l'origine . Ci deve essere un problema su quella pagina da qualche parte. Ecco perché terdon ♦ ritiene che il tuo sito non sia attivo. Così ho fatto fino a quando ho controllato. Spero che aiuti.
Dɑvïd,

1
-1 per il suggerimento di mescolare repository destinati a diverse versioni di Ubuntu senza regole di priorità adeguate.
David Foerster,


1

Puoi eseguire pdftk su Ubuntu 18.04 con la finestra mobile. Questa è una variante migliorata della risposta di Ademir.

Supponendo che abbiamo solo bisogno di un componente cli di pdftk e ci sia una finestra mobile installata sulla macchina. Metti il ​​seguente script da qualche parte sul $ PATH con il nome pdftke il bit eseguibile impostati:

#!/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 prima corsa impiegherà circa 2 minuti per costruire l'immagine, se l'immagine costruita rimarrà sulla macchina le corse successive saranno più veloci. Puoi ripulire liberamente l'immagine, che verrà creata la prossima volta che ti servirà.


1

I collegamenti per il download nello script pubblicati da @abu_bua sembrano non funzionare più (probabilmente a causa della fine del supporto per 17.10?), Quindi ecco una versione modificata dello stesso script che utilizza i pacchetti corrispondenti dalla build 16.04. Provato e testato su una macchina con 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

Mi piace la risposta della finestra mobile di Ademir , ma presenta i problemi tipici relativi alla sicurezza e alle autorizzazioni, poiché la finestra mobile deve essere eseguita come root. Se questo ti disturba, prova a usare Singolarità . Devi creare l'immagine come root, ma qualsiasi utente può eseguirla.

Ecco il Singularityfile che ho usato:

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

Quindi ho costruito l'immagine.

sudo singularity build pdftk.simg Singularity

Una volta che ha funzionato, l'ho installato in una cartella sul percorso, insieme a uno script wrapper che imposta la cartella principale sulla directory corrente.

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

E ora posso correre 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.

L'unico lato negativo è che è un eseguibile piuttosto grande, perché contiene una distribuzione completa di Ubuntu 16.04. Potresti anche avere problemi se stai cercando di manipolare file PDF che non si trovano nella directory corrente.

$ 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

Che grande opportunità di usare un po 'di magia docker!

Quello che ho fatto è stato usare un contenitore docker con Ubuntu 16.04, installare pdftk al suo interno ed eseguirlo lì.

Ecco i passaggi esatti se si desidera fare la stessa cosa:

  1. Installa docker se non lo hai già ( https://docs.docker.com/install/ )
  2. Crea una directory da qualche parte chiamata pdftk
  3. Crea una directory chiamata dockerall'interno della pdftkdirectory
  4. Copia questo Dockerfile nella pdftk/dockerdirectory: https://github.com/gkotian/gautam_linux/blob/master/docker/pdftk/Dockerfile
  5. Copia questo script anche nella pdftk/dockerdirectory: https://github.com/gkotian/gautam_linux/blob/master/scripts/dockershell
  6. Assicurarsi che lo dockershellscript sia eseguibile
  7. Nella pdftkdirectory, copia tutti i file pdf con cui vuoi lavorare
  8. cd /path/to/pdftk
  9. Esegui lo script dockershell con il percorso del Dockerfile: docker/dockershell docker/Dockerfile(ciò richiederà del tempo la prima volta che lo esegui)

Ora dovresti avere un prompt nel contenitore della finestra mobile, da cui puoi eseguire pdftk. Al termine, digitare exitper uscire dal contenitore e tornare al computer host. Tutti i file appena generati saranno presenti nella pdftkdirectory (ma saranno di proprietà di root, quindi potrebbe essere necessario modificare la proprietà secondo necessità).


0

Sul mio 18.04 in esecuzione in WSL ho fatto quanto segue

Ottieni le dipendenze dai (file .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

quindi installare le dipendenze sopra

sudo dpkg -i libgcj*

poi ho preso il .debda 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
I collegamenti per libgcj e libgcj17 sono interrotti.
HJLebbink,

1
@HJLebbink Ubuntu non è più abile :( collegamenti alle biblioteche
Eduard Florinescu,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.