2009-01-19 33 views
11

Me preguntaba si alguien tenía alguna experiencia en trabajar programáticamente con archivos .pdf. Tengo un archivo .pdf y necesito recortar cada página hasta un cierto tamaño.Recortar páginas de un archivo .pdf

Después de una búsqueda rápida en Google encontré la biblioteca pyPdf para python, pero mis experimentos con ella fallaron. Cuando cambié los atributos cropBox y trimBox en un objeto de página, los resultados no eran los que esperaba y parecían ser bastante aleatorios.

¿Alguien ha tenido alguna experiencia con esto? Los ejemplos de código serían muy apreciados, preferiblemente en python.

+0

Gran pregunta, pero un poco sorprendida de que todavía no se haya cerrado por ser demasiado amplia. –

Respuesta

19

pypdf hace lo que espero en esta área. Utilizando la siguiente secuencia de comandos:

#!/usr/bin/python 
# 

from pyPdf import PdfFileWriter, PdfFileReader 

with open("in.pdf", "rb") as in_f: 
    input1 = PdfFileReader(in_f) 
    output = PdfFileWriter() 

    numPages = input1.getNumPages() 
    print "document has %s pages." % numPages 

    for i in range(numPages): 
     page = input1.getPage(i) 
     print page.mediaBox.getUpperRight_x(), page.mediaBox.getUpperRight_y() 
     page.trimBox.lowerLeft = (25, 25) 
     page.trimBox.upperRight = (225, 225) 
     page.cropBox.lowerLeft = (50, 50) 
     page.cropBox.upperRight = (200, 200) 
     output.addPage(page) 

    with open("out.pdf", "wb") as out_f: 
     output.write(out_f) 

El documento resultante tiene una caja de corrección que es de 200x200 puntos y comienza a las 25,25 puntos dentro de la caja de medios. El cuadro de recorte está a 25 puntos dentro de la casilla de recorte.

Aquí es cómo mi documento de muestra se ve en Acrobat Professional después de la transformación con el código anterior: crop pages screenshot

Este documento aparecerá en blanco cuando se carga en Acrobat Reader.

+0

Este código tiene el mismo efecto que el código con el que estaba experimentando; las páginas del documento resultante fueron recortadas, pero todas en blanco. ¿Alguna idea de por qué podría ser? – johannth

+0

Probablemente haya verificado esto, ¿pero todo lo que puedo pensar es que está recortando un área pequeña del PDF que está en blanco? Si tiene acceso a acrobat pro, puede usar la herramienta Recortar páginas para mostrar todos los cuadros de página. No conozco ninguna herramienta gratuita que pueda hacer esto. Tal vez evince u okular para Linux? – danio

+0

Me siento realmente estúpido. Leí mal la API y asumí que la caja de cultivo era upperLeft, lowerRight. Así que de hecho estaba recortando en una parte en blanco de la página. – johannth

1

Probablemente esté buscando una solución gratuita, pero si tiene dinero para gastar, PDFlib es una fabulosa biblioteca. Nunca me ha decepcionado.

0

Puede convertir el PDF a Postscript (pstopdf o ps2pdf) y usar el procesamiento de texto en el archivo Postscript. Después de eso, puede convertir la salida de nuevo a PDF.

Esto funciona bien si los archivos PDF que desea procesar son todos generados por la misma aplicación y son algo similares. Si provienen de diferentes fuentes, generalmente es difícil procesar los archivos de Postscript, la estructura varía mucho. Pero incluso más de lo que puede migrar, puede arreglar tamaños de página y similares con algunas expresiones regulares.

0

Acrobat Javascript API tiene un método setPageBoxes, pero Adobe no proporciona ejemplos de código Python. Solo C++, C# y VB.

Cuestiones relacionadas