Use convert para pegar uma página específica de um arquivo PDF?

21

Eu sei que já fiz isso antes, então tenho certeza que é possível, apenas esqueço como fazê-lo. Existe uma maneira de dizer ao convert para pegar uma página específica de um PDF e eu gostaria de manter o formato dessa página como PDF.

ixtmixilix
fonte

Respostas:

24

O ImageMagick é uma ferramenta para imagens de bitmap, que a maioria dos PDFs não é. Se você usá-lo, ele rasterizará os dados, o que geralmente não é desejável.

O Pdftk pode extrair uma ou mais páginas de um arquivo PDF.

pdftk A=input.pdf cat A42 A43 output pages_42_43.pdf

Se você possui uma instalação LaTeX com PDFLaTeX, pode usar páginas em pdf . Existe um invólucro de shell para páginas pdf, pdfjam .

pdfjam -o pages_42_43.pdf input.pdf 42,43

Outra possibilidade (exagero aqui, mas útil para requisitos mais complexos que uma página) é o Python com a biblioteca PyPdf .

#!/usr/bin/env python
import copy, sys
from pyPdf import PdfFileWriter, PdfFileReader
input = PdfFileReader(sys.stdin)
output = PdfFileWriter()
for i in [42, 43]:
    output.addPage(input.getPage(i))
output.write(sys.stdout)
Gilles 'SO- parar de ser mau'
fonte
Eu estava prestes a recomendar pdftktambém. Você vai querer usá-lo.
Sebastian
pdfjamfunciona como um encanto e já foi instalado com minha distribuição LaTeX. É muito fácil de usar.
HDL
Muito obrigado. A página extraída era maior que o pdf completo, pdftkportanto não parece extrair uma página. O resultado foi bom caso contrário.
Eric Duminil
25

Você pode usar a notação subscrita com convert(1)para "indexar" em um PDF:

$ convert source.pdf[1] dest.pdf 

O valor do índice depende de como o exportador de PDF numerou as páginas. Nos testes dos arquivos aqui, os números parecem baseados em zero; portanto, o exemplo acima fornece a segunda página do documento. Já vi exemplos on-line em que eles mostram índices de letras, pois aparentemente o criador do PDF "numerou" as páginas desse documento dessa maneira.

Infelizmente, isso não produz resultados muito bons, porque o ImageMagick assume que tudo é baseado em pixels e, portanto, rasteriza imagens vetoriais, como a tipografia em um PDF típico.

Uma ferramenta melhor para o trabalho é o Ghostscript , que você provavelmente já instalou:

$ gs -dNOPAUSE -dBATCH -dFirstPage=2 -dLastPage=2 -sDEVICE=pdfwrite \
    -sOutputFile=dest.pdf -f src.pdf

Isso passa os dados do PDF inalterados, já que o Ghostscript entende o PDF (um derivado PostScript) para um nível muito mais profundo do que o ImageMagick.

Warren Young
fonte
2
na verdade, isso não é verdade sobre o imagemagick, se você definir o parâmetro -density para algo em torno de 300-400, o texto emitido a partir do pdf no png ficará bem.
Buggedcom 22/08/12
2
Ficará bem na tela, com certeza, mas se você for imprimir, será melhor definir a densidade ainda mais. E então, é provável que você tenha problemas com o modo como o RIP da sua impressora lida com os pixels antialiasing cinza produzidos pelo ImageMagick. Assim, você pode optar por imprimir em preto-e-branco de 1 bit na resolução nativa da impressora, que pode ser de 1.200 dpi ou 1.440 dpi ou qualquer outra coisa, e você deve saber isso com antecedência para obter uma impressão nítida. Não, vou manter minha afirmação: é melhor manter os dados em PDF no formato vetorial o maior tempo possível.
23812 Warren Young
@buggedcom eu encontrei -density 300é o ponto ideal . Qualquer coisa maior e você está criando enormes arquivos temporários - que provavelmente você está indo para redimensionar até miniaturas de qualquer maneira
Mike Causador
2
Você também pode selecionar um intervalo de páginas (por exemplo, para fazer um gif) como assimsource.pdf[3-6]
texasflood