PDF – Eliminar márgenes blancos

Me gustaría saber una forma de eliminar los márgenes blancos de un archivo PDF. Al igual que Adobe Acrobat X Pro. Entiendo que no funcionará con todos los archivos PDF.

Supongo que la forma de hacerlo es obtener los márgenes de texto, y luego recortar esos márgenes.

PyPdf es preferido.

iText encuentra márgenes de texto basados ​​en este código:

public void addMarginRectangle(String src, String dest) throws IOException, DocumentException { PdfReader reader = new PdfReader(src); PdfReaderContentParser parser = new PdfReaderContentParser(reader); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(RESULT)); TextMarginFinder finder; for (int i = 1; i <= reader.getNumberOfPages(); i++) { finder = parser.processContent(i, new TextMarginFinder()); PdfContentByte cb = stamper.getOverContent(i); cb.rectangle(finder.getLlx(), finder.getLly(), finder.getWidth(), finder.getHeight()); cb.stroke(); } stamper.close(); } 

No estoy muy familiarizado con PyPDF, pero sé que Ghostscript podrá hacer esto por usted. Aquí hay enlaces a otras respuestas sobre preguntas similares:

  1. Convierte PDF 2 lados por página en 1 lado por página (SuperUser.com)
  2. Freeware para dividir las páginas de un pdf en el medio? (SuperUser.com)
  3. Recortar un PDF usando Ghostscript 9.01 (StackOverflow.com)

La tercera respuesta es probablemente lo que te hizo decir ‘ entiendo que no funcionará con todos los archivos PDF ‘. Utiliza el comando pdfmark para intentar establecer /CropBox en los objetos de la página PDF.

El método de las dos primeras respuestas probablemente tendrá éxito donde el tercero fracase. Este método utiliza un fragmento de comando PostScript de <> setpagedevice para desplazar y colocar las páginas PDF en un tamaño de medio (más pequeño) definido por el parámetro -gNNNNxMMMM (que define el ancho y alto del dispositivo en píxeles).

Si comprende el concepto detrás de las dos primeras respuestas, podrá adaptar fácilmente el método utilizado allí para recortar los márgenes en los 4 bordes de una página PDF:

Un comando de ejemplo para recortar un PDF de tamaño carta (8.5x11in == 612x792pt) por media pulgada (== 36pt) en cada uno de los 4 bordes (el comando es para Windows):

 gswin32c.exe ^ -o cropped.pdf ^ -sDEVICE=pdfwrite ^ -g5400x7200 ^ -c "<> setpagedevice" ^ -f input.pdf 

El tamaño de página resultante será 7.5x10in (== 540x720pt). Para hacer lo mismo en Linux o Mac, use:

 gs \ -o cropped.pdf \ -sDEVICE=pdfwrite \ -g5400x7200 \ -c "<> setpagedevice" \ -f input.pdf 

Actualización: cómo determinar ‘márgenes’ con Ghostscript

Un comentario pidió una determinación “automática” de los márgenes blancos. Puedes usar Ghostscript también para esto. Su dispositivo bbox puede determinar el área cubierta por la tinta (virtual) en cada página (y por lo tanto, indirectamente, el espacio en blanco para cada borde del canvas).

Aquí está el comando:

 gs \ -q -dBATCH -dNOPAUSE \ -sDEVICE=bbox \ input.pdf 

Salida (ejemplo):

  %%BoundingBox: 57 29 562 764 %%HiResBoundingBox: 57.265030 29.347046 560.245045 763.649977 %%BoundingBox: 57 28 562 667 %%HiResBoundingBox: 57.265030 28.347046 560.245045 666.295011 

El dispositivo bbox representa cada página PDF en la memoria (sin escribir ningún resultado en el disco) y luego imprime la información de BoundingBox y HiResBoundingBox en stderr . Puede modificar este comando de esa manera para que los resultados sean más fáciles de analizar:

 gs \ -q -dBATCH -dNOPAUSE \ -sDEVICE=bbox \ input.pdf \ 2>&1 \ | grep -v HiResBoundingBox 

Salida (ejemplo):

  %%BoundingBox: 57 29 562 764 %%BoundingBox: 57 28 561 667 

Esto te diría …

  • … que la esquina inferior izquierda del rectángulo de contenido de la Página 1 está en las coordenadas [57 29] con la esquina superior derecha en [562 741]
  • … que la esquina inferior izquierda del rectángulo de contenido de la página 2 está en las coordenadas [57 28] con la esquina superior derecha en [561 667]

Esto significa:

  • La página 1 usa un espacio en blanco de 57 pt en el borde izquierdo ( 72pt == 1in == 25,4mm ).
  • La página 1 usa un espacio en blanco de 29 pt en el borde inferior.
  • La página 2 usa un espacio en blanco de 57 pt en el borde izquierdo.
  • La página 2 usa un espacio en blanco de 28 pt en el borde inferior.

Como puede ver en este sencillo ejemplo, el espacio en blanco no es exactamente el mismo para cada página. Dependiendo de sus necesidades (es probable que desee el mismo tamaño para cada página de un PDF de varias páginas, ¿no?), Debe determinar cuáles son los márgenes mínimos para cada borde en todas las páginas del documento.

Ahora, ¿qué pasa con los espacios en blanco derecho y superior? Para calcular eso, necesita saber el tamaño de página original para cada página. La forma más simple de determinar esto: la utilidad pdfinfo . Ejemplo de comando para un PDF de 5 páginas:

 pdfinfo \ -f 1 \ -l 5 \ input.pdf \ | grep "Page " 

Salida (ejemplo):

 Page 1 size: 612 x 792 pts (letter) Page 2 size: 612 x 792 pts (letter) Page 3 size: 595 x 842 pts (A4) Page 4 size: 842 x 1191 pts (A3) Page 5 size: 612 x 792 pts (letter) 

Esto le ayudará a determinar el tamaño de canvas requerido y los márgenes blancos requeridos (máximo) de los bordes superior e inferior de cada una de sus nuevas páginas de PDF.

Por supuesto, todos estos cálculos pueden ser guionados.

Pero si sus archivos PDF son todos de un tamaño de página único, o si son documentos de 1 página, todo es mucho más fácil de hacer …

Prueba pdfcrop . Necesita ghostscript.

    Intereting Posts