Ferramenta de linha de comando para cortar arquivos PDF

101

Estou procurando uma ferramenta de linha de comando de código aberto para cortar arquivos PDF, como podemos fazer no Adobe Acrobat Pro. Eu tentei PdfTk, ImageMagick, PyPDF e GhostScript - todos sem sucesso até agora.

Rakesh
fonte
Você pode descrever que tipo de corte você pode fazer com o Adobe Acrobat pro? Porque eu não tenho e, portanto, não posso dizer o que você está procurando.
Xubuntix
No Adobe Acrobat Pro, podemos usar os controles de margem para cortar o PDF. nós podemos fornecer o valor de para a parte superior, inferior, direita e esquerda para cortar
Rakesh

Respostas:

124

Eu sugiro que você dê uma olhada no PDFcrop .

Se você deseja cortar um pdf com as margens esquerda, superior, direita e inferior de 5, 10, 20 e 30 pt (pontos), execute

pdfcrop --margins '5 10 20 30' input.pdf output.pdf

no terminal. Para realmente cortar algo, use valores negativos no argumento para cortar. Por exemplo,

pdfcrop --margins '-50 -50 -50 -50' input.pdf output.pdf

colhe 50 pts da esquerda, superior, direita e inferior (nesta ordem).

Se você executar apenas o comando pdfcrop input, ele produzirá um arquivo intitulado input-crop.pdf com margens zero. Acho isso muito útil ao incluir ilustrações em PDF em documentos.

Cortando vários arquivos

Infelizmente, o pdfcrop não pode cortar vários arquivos ao mesmo tempo. No entanto, é fácil escrever um script que recorte todos os pdfs na pasta em que o script está localizado.

Crie um novo arquivo vazio e chame-o something.sh. Abra-o com um editor de texto e insira o seguinte:

#!/bin/bash
for FILE in ./*.pdf; do
  pdfcrop "${FILE}"
done

Salve e feche. Em seguida, clique com o botão direito do mouse no arquivo, vá para Propriedades> Permissões e marque o campo Permitir a execução do arquivo como programa . Agora feche a caixa de diálogo. Execute o script clicando duas vezes nele e escolhendo Executar no Terminal . E a nova versão cortada com margem zero de todos os PDFs com o sufixo -crop agora será impressa na pasta. Se você deseja margens ou outras coisas, é claro que pode simplesmente abrir o script e adicionar argumentos depois pdfcrop.

Rasmus
fonte
Observe que, em vez de especificar margens negativas, também é possível usar --bbox "<left> <bottom> <right> <top>". Isso permite usar a abordagem para determinar a área de cultivo descrita na minha resposta abaixo .
bluenote10
Existe a possibilidade de informar o número da página (que precisa ser cortada)?
LK
Temo que seja tudo ou nada. pdfcrop --helplista as opções disponíveis. Não consigo ver nada que permita especificar um intervalo de páginas.
Rasmus
7
Comparando o tamanho da saída do PDFCrop com sua entrada, parece que o pdfcrop modifica apenas as caixas delimitadoras. Não remove dados. Portanto, essa abordagem não seria adequada para diminuir o tamanho do pdf ou ocultar as informações.
init_js
Como um encanto! mesmo com as margens do pdf necessário!
jojo
36

Obrigado pelo Rasmus, você pode instalar o pdfcrop a partir do pacote texlive-extra-utils:

sudo apt-get install texlive-extra-utils

Em seguida, corte os arquivos pdf usando o comando pdf crop como:

pdfcrop input.pdf output.pdf

use --helppara ver parâmetros mais surpreendentes como--margins

pdfcrop --margins 5 input.pdf output.pdf

que corta pdf com 5 pb de cada lado da página

sarigalin
fonte
1
A medida é bpligeiramente diferente da pt. Consulte tex.stackexchange.com/questions/8260/… .
koppor 02/09
2
Para mim, o pdfcrop aumentou o tamanho do arquivo de 300x (de 7MB a 2GB). Eu tive que fazer gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS="/ebook" -sOutputFile=output2.pdf output.pdfdepois, que corrigiu o tamanho do arquivo.
Fiktor
17

Você também pode cortar arquivos PDF simplesmente usando o Ghostscript. Escrevi um pequeno script para simplificar o processo (inspirado nesta resposta ):

#!/bin/bash

if [ $# -lt 5 ]
then
  echo "Usage: `basename $0` <pdf-file> <x_min> <x_max> <y_min> <y_max>"
  echo "Notes:"
  echo " - all coordinates are absolute; no calculation of width/height necessary"
  echo " - use 'gv' to determine the coordinates"
  exit 65
fi

file="$1"
xmin="$2"
xmax="$3"
ymin="$4"
ymax="$5"

base="${file%.*}"
outfile="${base}_cropped.pdf"

echo "writing to: $outfile"

gs \
  -o $outfile \
  -sDEVICE=pdfwrite \
  -c "[/CropBox [$xmin $ymin $xmax $ymax] /PAGES pdfmark" \
  -f $file

Para determinar as coordenadas para o corte, eu uso gv, que imprime as coordenadas do cursor do mouse usando as mesmas unidades que o Ghostscript. Por exemplo, aqui eu determino as coordenadas mínimas para x / y (os valores no canto superior esquerdo):

crop1

Agora as coordenadas máximas:

crop2

E, finalmente, eu corro o script pdf_crop_by_coordinates.sh test.pdf 45 429 38 419produzindo um test_cropped.pdfque se parece com isso:

resultado

Não tenho idéia, no entanto, como a solução Ghostscript se compara pdfcropem termos de qualidade e correção.

bluenote10
fonte
15

Quando não posso fazer algo com o pdftk, o próximo lugar que passo é o PDFjam , que é um wrapper de linha de comando para o pacote LaTeX das páginas em pdf (portanto, você também precisa disso e de uma distribuição TeX instalada). Para obter ajuda sobre como usá-lo, recomendo a tela de ajuda regular:

pdfjam --help

como a página de manual é escassa e a página da Web se concentra em exemplos.

Para cortar um PDF, o comando que você precisa é mais ou menos assim:

pdfjam --keepinfo --trim "10mm 15mm 10mm 15mm" --clip true --suffix "cropped" input.pdf

Isso produzirá um arquivo chamado input-cropped.pdf. A ordem das guarnições deve ser deixado, inferior, direita, cima, conforme \includegraphicsa partir graphicx .

Para dar uma idéia de como ele se compara ao PDFcrop, tive motivos para cortar recentemente um PDF bastante sofisticado. Meu original era 675 kB, minha versão cortada via PDFjam era de 1,2 MB, enquanto uma versão cortada via PDFcrop era de 4,5 MB. Enquanto o PDFjam e o PDFcrop eliminaram os hiperlinks e marcadores incorporados, o PDFjam com a --keepinfoopção preservou as propriedades do documento (por exemplo, título, autor, assunto).

Alex Ball
fonte
1
Nota: isso realmente não remove o conteúdo que fica fora da tela do PDF, apenas o oculta. O mesmo que o @init_js comenta na resposta mais pontuada.
Jan Żankowski
3

Isso pode ajudá-lo.
Isso está de acordo com a versão mais recente do Ubuntu e do life. Este é o Master PDF Editor . Você pode usá-lo cortar, adicionar algumas coisas, etc.

Exemplo:
isso é antes Isso é antes Isso é depois de ctrl + k insira a descrição da imagem aqui

Shamina
fonte
3

Briss não é uma linha de comando, mas vale a pena dar uma olhada.

weberjn
fonte
2

Você pode usar um script pypdf nesta página . Mas na resposta a essa pergunta de troca de pilha , parece haver muitas opções também.

xubuntix
fonte
Eu não sou capaz de obter quais são os parâmetros superior esquerdo e direito inferior. são pontos, polegadas, centímetros?
Rakesh
@ Rakesh: Veja minha resposta para uma explicação dos parâmetros e como determiná-los facilmente.
bluenote10
2

O programa pdfCropMargins é um aplicativo de linha de comando para cortar automaticamente as margens dos arquivos PDF.

Esse programa depende do programa Ghostscript ou do pdftoppm que está sendo instalado (e localizável) no sistema. E analise as imagens da página com o PIL para encontrar caixas delimitadoras, usando o limite 191.

instale usando

instalação do pip pdfCropMargins

Executar usando

pdf-crop-margins -v -s -u seu-arquivo.pdf

Para ajuda

pdf-crop-margins -h | Mais

CharmiChokshi
fonte