¿Cómo puedo instalar pdftk en Ubuntu 18.04 y posterior?

105

¿Hay alguna posibilidad de pdftktrabajar en Ubuntu 18.04? Necesito esto para crear archivos PDF con una marca de agua en shell.

O, ¿alguien sabe una alternativa de trabajo pdftkpara generar un PDF con una marca de agua en shell?

Ya los verifico / pruebo todos:

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

Pero no encontré una herramienta de trabajo.

WiKrIe
fuente
3
y PDF Chain, también! ¡Estas dos herramientas fueron invaluables para mí!
Joshp.23
3
No solo escriba "Puede intentar ...", explique cómo lo hace y los pasos que debe seguir para que la respuesta sea más útil
ADDB
1
Si resolvió su problema usted mismo, responda su propia pregunta y acepte su respuesta. ¡No pongas la respuesta en tu pregunta o en los comentarios! :-) Me tomé la libertad de revertir el cambio que agregaba la respuesta, pero siempre puedes revisar el historial de una publicación a través del siguiente enlace.
David Foerster
55
Para su información, pdftk se eliminó de los repositorios y hay una solicitud de función para agregarlo nuevamente.
David Foerster
2
es una pena que se haya eliminado una herramienta tan buena solo porque los desarrolladores no encontraron una solución aceptable
Daniel Alder

Respuestas:

92

El paquete pdftk en Ubuntu (y su paquete Debian ) se descartó debido a su dependencia del tiempo de ejecución de GCJ ahora en desuso. Encontré una bifurcación que depende de OpenJDK o similar en su lugar.

Instalar desde una futura versión de Ubuntu (recomendado)

Comenzando con Cosmic (Ubuntu 18.10), Ubuntu se envía pdftk-javadesde el mismo código fuente que se muestra a continuación como reemplazo. Intentar instalar pdftkinstalará este paquete en su lugar. Los usuarios de versiones anteriores pueden descargarlo manualmente desde el repositorio de paquetes e instalarlo con su administrador de paquetes favorito.

Instalar desde PPA (obsoleto)

Construí un paquete Deb (solo para Bionic) con dependencias adecuadas:

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

El paquete contiene un script de contenedor colocado /usr/bin, por lo que puede invocarlo normalmente:

pdftk <arguments> ...

Instalar desde la fuente

  1. Instale las herramientas de compilación y las dependencias:

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

    Por supuesto, puede usar un JDK compatible diferente al proporcionado por default-jdk-headless.

  2. Descargue la horquilla pdftk de Marc Vinyal :

    git clone https://gitlab.com/pdftk-java/pdftk.git
    cd pdftk
    
  3. Coloque enlaces simbólicos a las bibliotecas requeridas en la libcarpeta:

    mkdir lib
    ln -st lib /usr/share/java/{commons-lang3,bcprov}.jar
    
  4. Construya el paquete JAR:

    ant jar
    
  5. Ejecute el paquete JAR:

    java -jar build/jar/pdftk.jar --help
    
  6. (Opcional) Para ejecutar el paquete JAR, por ejemplo, cuando lo distribuye a otros sistemas, necesita al menos un JRE funcional (sin cabeza) como el del default-jre-headlesspaquete, así como las bibliotecas Java libcommons-lang3-javay libbcprov-java:

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

    De nuevo, puede usar un JRE diferente que default-jre-headless. Esta bifurcación pdftk también admite compilaciones para versiones anteriores de JRE (≥ 7 según la documentación).

  7. (Opcional) Puede enseñar a Linux a ejecutar archivos JAR (Java Archive) a través de update-binfmts(8). La mayoría de los JRE enviados en paquetes Deb, incluidos los de los repositorios de paquetes de Canonical, se encargan de eso durante la instalación, aunque parece tener errores en algunos paquetes OpenJDK.

PD: Probé esto con OpenJDK 9 sin cabeza en Ubuntu Trusty, pero veo pocas razones por las que no debería funcionar con OpenJDK 10 sin cabeza en Bionic.

Dependiendo de las aplicaciones

Un comentarista planteó la pregunta válida de si las aplicaciones dependientes de la cadena PDF se ven afectadas por este cambio:

  • No , PDF Chain es una aplicación C ++ y no se ve directamente afectada por la degradación de GCJ. Necesita un ejecutable pdftk que funcione pero no le importa cómo funciona bajo el capó. En cualquier caso, PDF Chain se eliminó de Bionic y pdftk .
David Foerster
fuente
Estaba leyendo otra pregunta sobre la instalación de un paquete diferente que se eliminó de los repos para 18.04, y un usuario sugirió instalar el paquete .deb usando gdebi, que debería manejar las dependencias. ¿Crees que eso funcionaría o crearía algunos problemas? Esa puede ser una pregunta tonta: solo estoy tratando de entender más sobre la administración de paquetes.
Hee Jin
55
Ambos conjuntos de instrucciones en esta respuesta instalan el pdftk-javatenedor de Marc Vinyal . Ese será (muy probablemente) el reemplazo oficial de pdftkDebian ( ver ) y Ubuntu (con un paquete disponible para 18.10). Entonces, esta parece ser la mejor respuesta , ya que es una "prueba futura": a partir de la 18.10 en adelante, recibirá el mismo software en los repositorios oficiales.
tanius
@DavidFoerster En él. Pregunta: ¿Hay alguna razón particular para recomendar antcon bibliotecas instaladas a través de apt sobre el uso de Gradle para la compilación?
Rafael
En una pregunta de seguimiento sobre dichos paquetes ficticios, surgieron dudas sobre si las dependencias de pdftk-javaestán bien elegidas. Es posible que desee comprobar eso.
Rafael
¡ Creé descripciones de paquetes para equivs que proporcionan Java instalado por SDKMAN! como un paquete que cumple con las dependencias de pdftk-java.
Rafael
61

Para Ubuntu 18.04, simplemente instale el paquete pdftk snap:

sudo snap install pdftk
pgoetz
fuente
1
Symlinking no funcionó para mí, porque snapparece necesitar el nombre del script. Pero un script de envoltura mínima /snap/bin/pdftk-smoser.pdftk "$@"funciona igual de bien.
Boldewyn
¿Qué versión de Ubuntu? Las instrucciones precisas que doy arriba funcionaron para mí. Llamo a pdftk desde algunos scripts de procesamiento perl xml y la prueba de ácido es que los scripts funcionan y producen pdf combinados.
pgoetz
3
Actualicé la respuesta anterior para usar solo 'pdftk' en lugar de 'pdftk' ya que yo (smoser) he subido un complemento llamado 'pdftk' a la tienda con el mismo contenido. ( snapcraft.io/pdftk )
smoser
44
Esto parecía instalarse bien, pero luego pdftk no se abrió ni funcionó en ningún archivo (siempre dice 'Error: no se puede encontrar el archivo. Error: Error al abrir el archivo PDF:'), tampoco tiene página de manual. Al final lo eliminé con snap remove y fui con la solución @abu_bua anterior, que funciona perfectamente.
scoobydoo
1
Debido a los puntos de diseño de las instantáneas, una instantánea no puede acceder a todos los archivos. Alguna información sobre esto está disponible en github.com/smoser/pdftk/issues/1 . La solución más fácil es colocar archivos en su directorio de inicio.
smoser
36

Instalación de pdftk en Ubuntu 18.04 amd64

He escrito un pequeño script bash que automatiza la instalación en Ubuntu 18.04. ¡Tenga en cuenta que he descargado solo paquetes 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

¡Este script descargará los paquetes /tmpe instalará desde allí usando un apt installcomando! Luego /tmpse eliminarán los paquetes en el directorio.

Para ejecutar este script, cópielo en un editor y guárdelo, por ejemplo, pdftk_installer . Luego ejecútelo en una terminal con

chmod 755 pdftk_installer
./pdftk_installer
abu_bua
fuente
parece que pdftk-dbg_2.02-4build1_amd64.debes opcional
Jossef Harush
Esto es mucho más preferible que la versión instantánea o la versión basada en Java del PPA, ¡gracias!
Simon
Para ofrecer alguna explicación, esto parece descargar los paquetes Ubuntu-artful (17.10).
Randall Whitman
3
Todos los enlaces están rotos
Desarrollador
1
enlaces actualizados ahora!
abu_bua
10

Puede intentar usar una imagen acoplable de Ubuntu 16.04 con pdftk instalado para ejecutar pdftk:

  1. Instalar docker:

    sudo apt install docker.io
  2. Tire Ubuntu 16.04 y ejecute un shell bash:

    sudo docker run -it ubuntu:16.04 bash
  3. Actualice e instale pdftk desde el indicador de contenedor:

    apt update
    apt install pdftk
  4. En una nueva terminal ejecute:

    sudo docker ps -a
  5. Confirma la imagen usando el ID DE CONTENEDOR de ubuntu: 16.04 en una nueva imagen con pdftk instalado:

    sudo docker commit CONTAINER_ID ubuntu_pdftk

    (Reemplace CONTAINER_IDcon su ID de contenedor).

  6. Crear un archivo nombrado pdftken /usr/biny luego hacerlo ejecutable usando 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
Ademir F Furtado
fuente
Casi exactamente lo que hice. Excepto, ¿no te equivocas -v "$PWD:/workdir$PWD" -w "/workdir$PWD"?
Ondra Žižka
5

Pude instalar pdftk desde los paquetes artful (17.10) deb. Descargue e instale, en ese orden:

Es mejor instalar gcc-6-baseprimero para evitar el error de dependencias si lo hace desde cli.

Eso debería hacer el truco ... por ahora.

amha
fuente
2

Hice una solución rápida y sucia para ejecutar PDFTK con 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

Actualizo mi sources.liste incluyo las siguientes líneas:

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

Después de eso corro un simple

sudo apt update

para que los cambios surtan efecto.

Luego instale pdftk vía

sudo apt install pdftk

Luego, elimine las fuentes Artful de source.list nuevamente y así es como hago que PDFTK se ejecute en Bionic.

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

WiKrIe
fuente
55
Hola Christian, ¿te importaría actualizar tu respuesta para incluir cuál es tu solución? Preferimos si incluye las partes esenciales de la respuesta aquí y luego proporciona el enlace como referencia. ¡Gracias!
CalvT
1
Sí, especialmente porque el sitio al que se vinculó parece estar caído.
terdon
Hola CalvT, la solución que uso es simplemente agregar los paquetes artfull a apt, instalar pdftk y eliminarlos. Y terdon mi sitio no estuvo inactivo en los últimos 30 días, así que no sé por qué no debe acceder al sitio.
WiKrIe
@WiKrIe Hay un problema con su sitio. Puedo llegar a la URL base, pero no a la página que vinculaste. Tampoco puede Wayback Machine. El caché de Google no lo cargará, pero cargará la fuente . Debe haber un problema en esa página en alguna parte. Por eso, terdon ♦ pensó que su sitio estaba caído. Lo hice hasta que lo comprobé. Espero que ayude.
Dɑvïd
1
-1 para la sugerencia de mezclar repositorios destinados a diferentes versiones de Ubuntu sin reglas de prioridad adecuadas.
David Foerster
2

Esto funciona para ubuntu 18.04:

sudo add-apt-repository ppa:malteworld/ppa
sudo apt update
sudo apt install pdftk
David Vielhuber
fuente
Si. Lo hace. Y esto resuelve un problema en Inkscape cuando intentas usar olibia / inkscape- multipage -export ( github.com/olibia/inkscape-multipage-export )
Geppettvs D'Constanzo
1

Puede ejecutar pdftk en Ubuntu 18.04 con docker. Esa es una variante mejorada de la respuesta de Ademir.

Asumiendo que solo necesitamos un componente cli del pdftk y que hay docker instalado en la máquina. Simplemente coloque el siguiente script en algún lugar de $ PATH con el nombre pdftky el conjunto de bits ejecutable:

#!/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 primera ejecución tardará unos 2 minutos en generar la imagen, si la imagen construida permanecerá en la máquina, las próximas ejecuciones serán más rápidas. Puede limpiar libremente la imagen, se construirá cuando la necesite la próxima vez.

Ilya Sheershoff
fuente
1

Parece que los enlaces de descarga en el script publicado por @abu_bua ya no funcionan (probablemente debido al fin del soporte para 17.10?), Así que aquí hay una versión modificada del mismo script que utiliza los paquetes correspondientes de la compilación 16.04. Probado y probado en una máquina 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
schumamol
fuente
1

me gusta la respuesta de Docker de Ademir , pero tiene los problemas típicos de seguridad y permisos, porque Docker tiene que ejecutarse como root. Si eso te molesta, intenta usar Singularity . Necesita construir la imagen como root, pero cualquier usuario puede ejecutarla.

Aquí está el Singularityarchivo que usé:

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

Entonces construí la imagen.

sudo singularity build pdftk.simg Singularity

Una vez que funcionó, lo instalé en una carpeta en la ruta, junto con un script de contenedor que establece la carpeta de inicio en el directorio actual.

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

Y ahora puedo correr 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.

El único inconveniente es que es un ejecutable bastante grande, porque contiene una distribución completa de Ubuntu 16.04. También puede tener problemas si está tratando de manipular archivos PDF que no están en el directorio actual.

$ 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
Don Kirkby
fuente
0

¡Qué gran oportunidad para usar un poco de magia docker!

Lo que hice fue usar un contenedor de Docker con ubuntu 16.04, instalar pdftk dentro y ejecutarlo allí.

Estos son los pasos exactos si desea hacer lo mismo:

  1. Instale docker si aún no lo tiene ( https://docs.docker.com/install/ )
  2. Crea un directorio en algún lugar llamado pdftk
  3. Crear un directorio llamado dockerdentro del pdftkdirectorio
  4. Copie este Dockerfile en el pdftk/dockerdirectorio: https://github.com/gkotian/gautam_linux/blob/master/docker/pdftk/Dockerfile
  5. Copie este script también en el pdftk/dockerdirectorio: https://github.com/gkotian/gautam_linux/blob/master/scripts/dockershell
  6. Asegúrese de que el dockershellscript sea ejecutable
  7. En el pdftkdirectorio, copie todos los archivos pdf con los que desea trabajar
  8. cd /path/to/pdftk
  9. Ejecute el script dockershell con la ruta del Dockerfile: docker/dockershell docker/Dockerfile(esto tomará algún tiempo la primera vez que lo ejecute)

Ahora debería tener un mensaje dentro del contenedor de Docker, desde donde puede ejecutar pdftk. Cuando haya terminado, escriba exitpara salir del contenedor y volver a la máquina host. Todos los archivos recién generados estarán presentes en el pdftkdirectorio (pero serán propiedad de root, por lo que es posible que deba cambiar la propiedad según sea necesario).

Gautama
fuente
0

En mi 18.04 corriendo en WSL hice lo siguiente

Obtenga las dependencias de los (archivos .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

luego instale las dependencias anteriores

sudo dpkg -i libgcj*

entonces tomé el .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
Eduard Florinescu
fuente
1
Los enlaces para libgcj y libgcj17 están rotos.
HJLebbink
1
@HJLebbink Ubuntu ya no es ingenioso :( enlaces de bibliotecas
Eduard Florinescu