¿Usar convertir para tomar una página específica de un archivo PDF?

21

Sé que he hecho esto antes, así que estoy seguro de que es posible, solo olvido cómo hacerlo. Hay una manera de decirle a convertir que tome una página específica de un PDF, y me gustaría mantener el formato de esa página como PDF.

ixtmixilix
fuente

Respuestas:

24

ImageMagick es una herramienta para imágenes de mapa de bits, que no son la mayoría de los PDF. Si lo usa, rasterizará los datos, lo que a menudo no es deseable.

Pdftk puede extraer una o más páginas de un archivo PDF.

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

Si tiene una instalación de LaTeX con PDFLaTeX, puede usar páginas pdf . Hay un contenedor de shell para pdfpages, pdfjam .

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

Otra posibilidad (exagerada aquí, pero útil para requisitos más complejos que una página) es Python con la 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- deja de ser malvado'
fuente
Estaba a punto de recomendar pdftktambién. Querrás usarlo.
Sebastian
pdfjamfunciona de maravilla y ya estaba instalado con mi distribución LaTeX. Es muy fácil de usar.
hdl
Muchas gracias. La página extraída era más grande que el pdf completo, pdftkpor lo que no parece extraer simplemente una página. El resultado estuvo bien de lo contrario.
Eric Duminil
25

Puede usar la notación de subíndice con convert(1)para "indexar" en un PDF:

$ convert source.pdf[1] dest.pdf 

El valor del índice depende de cómo el exportador de PDF numeró las páginas. En las pruebas de los archivos aquí, los números parecen estar basados ​​en cero, por lo que el ejemplo anterior le muestra la segunda página del documento. He visto ejemplos en línea donde muestran índices de letras, ya que aparentemente el creador del PDF "numeró" las páginas de ese documento de esa manera.

Desafortunadamente, esto no da muy buenos resultados, porque ImageMagick asume que todo está basado en píxeles y, por lo tanto, rasteriza las imágenes vectoriales, como la tipografía en un PDF típico.

Una mejor herramienta para el trabajo es Ghostscript , que probablemente ya haya instalado:

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

Esto pasa los datos PDF sin cambios, ya que Ghostscript entiende PDF (un derivado PostScript) a un nivel mucho más profundo que ImageMagick.

Warren Young
fuente
2
en realidad eso no es cierto sobre imagemagick, si establece el parámetro -density en algo alrededor de 300-400, entonces el texto generado desde el pdf en el png se verá bien.
buggedcom
2
Se verá bien en la pantalla, claro, pero si luego va a imprimir, querrá establecer la densidad aún más. Y luego, es probable que tenga problemas con la forma en que el RIP de su impresora hace frente a los píxeles grises antialiasing generados por ImageMagick. Por lo tanto, puede optar por imprimir en blanco y negro de 1 bit a la resolución nativa de su impresora, que puede ser de 1.200 ppp, o 1.440 ppp o algo más, y debe saberlo de antemano para obtener una salida nítida. No, mantendré mi declaración: lo mejor es mantener los datos PDF en forma de vector el mayor tiempo posible.
Warren Young el
@buggedcom que he encontrado -density 300es el punto ideal . Algo más grande y estás creando archivos temporales enormes, que probablemente redimensionarás a miniaturas de todos modos
Mike Causer
2
También puede seleccionar un rango de páginas (p. Ej., Para hacer un gif), asísource.pdf[3-6]
texasflood