Como posso instalar o pdftk no Ubuntu 18.04 e posterior?

105

Existe alguma chance de começar a pdftktrabalhar no Ubuntu 18.04? Eu preciso disso para criar arquivos PDF com uma marca d'água no shell.

Ou alguém conhece uma alternativa funcional pdftkpara gerar um PDF com uma marca d'água no shell?

Eu já verifiquei / experimente todos eles:

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

Mas não encontrou uma ferramenta de trabalho.

WiKrIe
fonte
3
e PDF Chain também! Essas duas ferramentas foram inestimáveis ​​para mim!
precisa saber é o seguinte
3
Não basta escrever "Você pode tentar ...", explique como você o faz e as etapas a serem seguidas para tornar a resposta mais útil.
ADDB
1
Se você resolveu seu problema, responda sua própria pergunta e aceite sua resposta. Não coloque a resposta na sua pergunta ou nos comentários! :-) Tomei a liberdade de reverter a alteração que adicionou a resposta, mas você sempre pode revisar o histórico de uma postagem através do link abaixo.
David Foerster
5
Para sua informação, o pdftk foi retirado dos repositórios e há uma solicitação de recurso para adicioná-lo novamente.
David Foerster
2
é uma vergonha que uma ferramenta tão agradável foi removido apenas porque os desenvolvedores não encontrou uma solução aceitável
Daniel Alder

Respostas:

92

O pacote pdftk no Ubuntu (e seu pacote Debian upstream ) foi descartado devido à sua dependência do tempo de execução GCJ, agora obsoleto. Encontrei um fork que depende do OpenJDK ou similar.

Instale a partir de uma versão futura do Ubuntu (recomendado)

Começando com Cosmic (Ubuntu 18.10), o Ubuntu é fornecido pdftk-javacom o mesmo código fonte abaixo como substituto. Tentar instalar pdftkinstalará este pacote. Os usuários de versões anteriores podem fazer o download manualmente do repositório de pacotes e instalá-lo com seu gerenciador de pacotes favorito.

Instalar a partir do PPA (desatualizado)

Criei um pacote Deb (apenas para Bionic) com dependências adequadas:

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

O pacote contém um script de wrapper inserido /usr/bin, para que você possa invocá-lo normalmente:

pdftk <arguments> ...

Instalar da fonte

  1. Instale as ferramentas de construção e dependências:

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

    Obviamente, você pode usar um JDK suportado diferente daquele fornecido por default-jdk-headless.

  2. Faça o download do garfo pdftk de Marc Vinyal :

    git clone https://gitlab.com/pdftk-java/pdftk.git
    cd pdftk
    
  3. Coloque links simbólicos para as bibliotecas necessárias na libpasta:

    mkdir lib
    ln -st lib /usr/share/java/{commons-lang3,bcprov}.jar
    
  4. Crie o pacote JAR:

    ant jar
    
  5. Execute o pacote JAR:

    java -jar build/jar/pdftk.jar --help
    
  6. (Opcional) Para executar o pacote JAR, por exemplo, quando você o distribui para outros sistemas, você precisa de pelo menos um JRE (sem cabeça) como o default-jre-headlesspacote, bem como as bibliotecas Java libcommons-lang3-javae libbcprov-java:

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

    Novamente, você pode usar um JRE diferente de default-jre-headless. Esse garfo pdftk também suporta compilações para versões mais antigas do JRE (≥ 7 de acordo com a documentação).

  7. (Opcional) Você pode ensinar o Linux a executar arquivos JAR (Java Archive) via update-binfmts(8). A maioria dos JREs enviados nos pacotes Deb, incluindo aqueles nos repositórios de pacotes da Canonical, cuidam disso durante a instalação, embora pareça estar com erros em alguns pacotes do OpenJDK.

PS: Tentei isso com o OpenJDK 9 sem cabeça no Ubuntu Trusty, mas vejo poucas razões pelas quais ele não deve funcionar com o OpenJDK 10 sem cabeça no Bionic.

Dependendo das aplicações

Um comentarista levantou a questão válida de saber se os aplicativos dependentes da Cadeia PDF são afetados por esta alteração:

  • Não , o PDF Chain é um aplicativo C ++ e não é diretamente afetado pela descontinuação do GCJ. Ele precisa de um executável pdftk funcional, mas não se importa como ele funciona sob o capô. De qualquer forma, o PDF Chain foi retirado do Bionic e do pdftk .
David Foerster
fonte
Eu estava lendo outra pergunta sobre a instalação de um pacote diferente que foi retirado dos repositórios para 18.04, e um usuário sugeriu a instalação do pacote .deb usando o gdebi, que deve lidar com dependências. Você acha que isso funcionaria ou criaria alguns problemas? Essa pode ser uma pergunta idiota - só estou tentando entender mais sobre gerenciamento de pacotes.
Hee Jin
5
Os dois conjuntos de instruções nesta resposta instalam o pdftk-javagarfo de Marc Vinyal . Esse será (muito provavelmente) o substituto oficial para o pdftkDebian ( veja ) e no Ubuntu (com um pacote disponível para 18.10). Portanto, essa parece ser a melhor resposta , pois é "prova do futuro": a partir de 18.10, você receberá o mesmo software nos repositórios oficiais.
tanius
@DavidFoerster On it. Pergunta: Existe um motivo específico para recomendar antcom bibliotecas instaladas via apt sobre o uso do Gradle na compilação?
Raphael
Em uma pergunta de acompanhamento sobre os referidos pacotes fictícios, surgiram dúvidas sobre se as dependências de pdftk-javasão bem escolhidas. Você pode verificar isso.
Raphael
Criei descrições de pacotes para equivs que fornecem Java instalado pelo SDKMAN! como um pacote que cumpre as dependências de pdftk-java.
Raphael
61

Para o Ubuntu 18.04, basta instalar o pacote snap do pdftk:

sudo snap install pdftk
pgoetz
fonte
1
O link simbólico não funcionou para mim, porque snapparece precisar do nome do script. Mas um script de wrapper mínimo /snap/bin/pdftk-smoser.pdftk "$@"funciona igualmente bem.
Boldewyn
Qual versão do Ubuntu? As instruções precisas que dou acima funcionaram para mim. Eu chamo pdftk de alguns scripts de processamento xml perl e o teste de ácido é que os scripts funcionam e produzem PDFs mesclados.
pgoetz
3
Atualizei a resposta acima para usar apenas 'pdftk' em vez de 'pdftk', pois eu (smoser) carreguei um snap chamado 'pdftk' na loja com o mesmo conteúdo. ( snapcraft.io/pdftk )
smoser
4
Isso pareceu instalar bem, mas o pdftk não abriu ou funcionou em nenhum arquivo (sempre diz 'Erro: Não foi possível encontrar o arquivo. Erro: falha ao abrir o arquivo PDF:'), também não possui uma página de manual. No final, eu o removi com o snap remove e fui com a solução @abu_bua acima, que funciona perfeitamente.
30918 scoobydoo
1
Devido aos pontos de design dos snaps, um snap não pode acessar todos os arquivos. Algumas informações sobre isso estão disponíveis em github.com/smoser/pdftk/issues/1 . A solução mais fácil é colocar arquivos no diretório inicial.
Smoser
36

Instalando o pdftk no Ubuntu 18.04 amd64

Eu escrevi um pequeno script bash que automatiza a instalação no Ubuntu 18.04. Observe que eu baixei apenas pacotes 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 fará o download dos pacotes /tmpe a partir daí, usando um apt installcomando! Posteriormente, os pacotes no /tmpdiretório serão removidos.

Para executar este script, copie-o em um editor e salve-o, por exemplo, pdftk_installer . Em seguida, execute-o em um terminal com

chmod 755 pdftk_installer
./pdftk_installer
abu_bua
fonte
parece pdftk-dbg_2.02-4build1_amd64.debopcional
Jossef Harush
Isso é muito preferível à versão snap ou à versão baseada em java do PPA - obrigado!
simon
Para oferecer alguma explicação, isso parece fazer o download dos pacotes Ubuntu-artful (17.10).
Randall Whitman
3
Todos os links estão quebrados
desenvolvedor
1
links atualizados agora!
abu_bua 2/07
10

Você pode tentar usar uma imagem do docker do Ubuntu 16.04 com o pdftk instalado para executar o pdftk:

  1. Instale a janela de encaixe:

    sudo apt install docker.io
  2. Puxe o Ubuntu 16.04 e execute um shell bash:

    sudo docker run -it ubuntu:16.04 bash
  3. Atualize e instale o pdftk a partir do prompt do contêiner:

    apt update
    apt install pdftk
    
  4. Em uma nova execução do terminal:

    sudo docker ps -a
  5. Confirme a imagem usando o CONTAINER ID do ubuntu: 16.04 para uma nova imagem com o pdftk instalado:

    sudo docker commit CONTAINER_ID ubuntu_pdftk

    (Substitua CONTAINER_IDpelo seu ID do contêiner.)

  6. Crie um arquivo nomeado e, pdftkem /usr/binseguida, torne-o executável 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
fonte
Quase exatamente o que eu fiz. Exceto, você não se engana -v "$PWD:/workdir$PWD" -w "/workdir$PWD"?
Ondra Žižka
5

Eu era capaz de instalar o pdftk a partir de pacotes deb do artful (17.10). Baixe e instale, nessa ordem:

É melhor instalar gcc-6-baseprimeiro para evitar erros de dependências, se você fizer isso a partir do cli.

Isso deve funcionar ... por enquanto.

amha
fonte
2

Fiz uma solução rápida e suja para obter o PDFTK em execução no 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

Eu atualizo meu sources.liste incluo as seguintes linhas:

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

Depois disso, eu corro um simples

sudo apt update

para fazer as alterações entrarem em vigor.

Em seguida, instale o pdftk via

sudo apt install pdftk

Em seguida, remova as fontes Artful do source.list novamente e é assim que obtenho o PDFTK em execução no Bionic.

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

WiKrIe
fonte
5
Oi Christian, você se importaria de atualizar sua resposta para incluir qual é a sua solução alternativa? Preferimos que você inclua as partes essenciais da resposta aqui e forneça o link para referência. Obrigado!
CalvT
1
Sim, especialmente porque o site ao qual você vinculou parece estar inativo.
terdon
Olá CalvT, a solução alternativa que eu uso é simplesmente adicionar os pacotes artfull ao apt, instalar o pdftk e removê-los. E terdon, meu site não caiu nos últimos 30 dias, então não sei por que você não deve acessá-lo.
WiKrIe
@WiKrIe Há um problema no seu site. Consigo acessar o URL base, mas não a página que você vinculou. Nem o Wayback Machine. O cache do Google não o carrega, mas carrega a fonte . Deve haver um problema nessa página em algum lugar. Por isso, o terdon ♦ achou que seu site estava fora do ar. Eu também fiz até verificar. Espero que ajude.
Dɑvïd
1
-1 para a sugestão de misturar repositórios destinados a diferentes versões do Ubuntu sem regras de prioridade apropriadas.
David Foerster
2

Isso funciona para o ubuntu 18.04:

sudo add-apt-repository ppa:malteworld/ppa
sudo apt update
sudo apt install pdftk
David Vielhuber
fonte
Sim. Faz. E isso resolve um problema no Inkscape quando você tenta usar o olibia / inkscape-multipage-export ( github.com/olibia/inkscape-multipage-export )
Geppettvs D'Constanzo
1

Você pode executar o pdftk no Ubuntu 18.04 com o docker. Essa é uma variante aprimorada da resposta de Ademir.

Supondo que precisamos apenas de um componente cli do pdftk e que haja docker instalado na máquina. Basta colocar o seguinte script em algum lugar no $ PATH com o nome pdftke o conjunto de bits executáveis:

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

A primeira execução levará cerca de 2 minutos para criar a imagem, se a imagem criada permanecer na máquina, as próximas execuções serão mais rápidas. Você pode limpar livremente a imagem, que será criada quando precisar da próxima vez.

Ilya Sheershoff
fonte
1

Os links de download no script postado por @abu_bua parecem não estar mais funcionando (provavelmente por causa do fim do suporte para 17.10?), Então aqui está uma versão modificada do mesmo script que usa os pacotes correspondentes da compilação 16.04. Tentou e testou em uma máquina executando 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
fonte
1

Gosto da resposta do docker do Ademir , mas ele tem os problemas típicos de segurança e permissões, porque o docker precisa ser executado como root. Se isso lhe incomoda, tente usar a Singularidade . Você precisa criar a imagem como raiz, mas qualquer usuário pode executá-la.

Aqui está o Singularityarquivo que eu usei:

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

Então eu construí a imagem.

sudo singularity build pdftk.simg Singularity

Depois que funcionou, instalei-o em uma pasta no caminho, junto com um script de wrapper que define a pasta inicial como o diretório atual.

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 agora eu posso 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.

A única desvantagem é que é um executável bastante grande, porque contém uma distribuição completa do Ubuntu 16.04. Você também pode ter problemas se estiver tentando manipular arquivos PDF que não estão no diretório atual.

$ 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
fonte
0

Que grande oportunidade de usar alguma mágica do docker!

O que fiz foi usar um contêiner do docker executando o ubuntu 16.04, instalar o pdftk dentro dele e executá-lo lá.

Aqui estão as etapas exatas se você deseja fazer a mesma coisa:

  1. Instale a janela de encaixe se você ainda não a possui ( https://docs.docker.com/install/ )
  2. Crie um diretório em algum lugar chamado pdftk
  3. Crie um diretório chamado dockerdentro do pdftkdiretório
  4. Copie este Dockerfile no pdftk/dockerdiretório: https://github.com/gkotian/gautam_linux/blob/master/docker/pdftk/Dockerfile
  5. Copie esse script também no pdftk/dockerdiretório: https://github.com/gkotian/gautam_linux/blob/master/scripts/dockershell
  6. Verifique se o dockershellscript é executável
  7. No pdftkdiretório, copie todos os arquivos pdf com os quais deseja trabalhar
  8. cd /path/to/pdftk
  9. Execute o script dockershell com o caminho do Dockerfile: docker/dockershell docker/Dockerfile(isso levará algum tempo na primeira vez em que você o executar)

Agora você deve ter um prompt dentro do contêiner do docker, de onde você pode executar o pdftk. Quando terminar, digite exitpara sair do contêiner e retornar à máquina host. Todos os arquivos recém-gerados estarão presentes no pdftkdiretório (mas serão de propriedade do root, portanto, pode ser necessário alterar a propriedade conforme necessário).

Gautam
fonte
0

No meu 18.04 rodando na WSL, fiz o seguinte

Obtenha as dependências dos (arquivos .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

instale as dependências acima

sudo dpkg -i libgcj*

em seguida, tomei a .debpartir 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
fonte
1
Os links para libgcj e libgcj17 estão quebrados.
HJLebbink
1
@HJLebbink O Ubuntu não mantém mais astúcia :( links de bibliotecas
Eduard Florinescu