unir - Dividir cada página PDF en dos?
separar pdf en imagenes (9)
Tengo una gran cantidad de archivos PDF que tienen dos diapositivas en una página (para imprimir).
El formato es de páginas A4 cada una con dos diapositivas configuradas así:
-----------
| slide 1 |
-----------
| slide 2 |
-----------
¿Cómo puedo generar un nuevo archivo PDF con una diapositiva por página?
Feliz de usar GUI, CLI, scripts o incluso la interfaz con la biblioteca de PDF de un idioma; pero sí necesito que el texto en las diapositivas siga siendo seleccionable.
Prueba BRISS .
Te permite dividir cada página en tantas subpáginas como quieras definiendo regiones con una GUI. Agrupa todas las páginas similares en grupos para usted, por lo que puede definir regiones para ese grupo una vez.
Es multiplataforma, libre y de código abierto.
(Copiado y pegado de https://superuser.com/a/235327/35237 )
Con mupdf-1.8-windows-x64
, en win10 CMD, debe tener '' poster '' (seguido de espacio y sin comillas) antes del parámetro horizontal (-x). Por ejemplo, para un escaneo de doble página a PDF:
cartel de mutool -x 2 -y 1 C: / Users / alfie / Documents / SNM / The_Ultimate_Medicine.pdf C: / Users / alfie / Documents / ebooks / The_Ultimate_Medicine.pdf
¡Qué herramienta tan maravillosa! Merci infiniment! .. (y el archivo de salida ~ 9MB es solo 52KB más grande que el original!)
Gracias a Matt Gumbley por su Python Script. Modifiqué esa secuencia de comandos de Python de modo que ahora también funciona con archivos PDF que contienen páginas verticales y horizontales y páginas recortadas:
# -*- coding: utf-8 -*-
"""
Created on Thu Feb 26 08:49:39 2015
@author: Matt Gumbley ()
changed by Hanspeter Schmid to deal with already cropped pages
"""
import copy
import math
from PyPDF2 import PdfFileReader, PdfFileWriter
def split_pages2(src, dst):
src_f = file(src, ''r+b'')
dst_f = file(dst, ''w+b'')
input = PdfFileReader(src_f)
output = PdfFileWriter()
for i in range(input.getNumPages()):
# make two copies of the input page
pp = input.getPage(i)
p = copy.copy(pp)
q = copy.copy(pp)
# the new media boxes are the previous crop boxes
p.mediaBox = copy.copy(p.cropBox)
q.mediaBox = copy.copy(p.cropBox)
x1, x2 = p.mediaBox.lowerLeft
x3, x4 = p.mediaBox.upperRight
x1, x2 = math.floor(x1), math.floor(x2)
x3, x4 = math.floor(x3), math.floor(x4)
x5, x6 = x1+math.floor((x3-x1)/2), x2+math.floor((x4-x2)/2)
if (x3-x1) > (x4-x2):
# horizontal
q.mediaBox.upperRight = (x5, x4)
q.mediaBox.lowerLeft = (x1, x2)
p.mediaBox.upperRight = (x3, x4)
p.mediaBox.lowerLeft = (x5, x2)
else:
# vertical
p.mediaBox.upperRight = (x3, x4)
p.mediaBox.lowerLeft = (x1, x6)
q.mediaBox.upperRight = (x3, x6)
q.mediaBox.lowerLeft = (x1, x2)
p.artBox = p.mediaBox
p.bleedBox = p.mediaBox
p.cropBox = p.mediaBox
q.artBox = q.mediaBox
q.bleedBox = q.mediaBox
q.cropBox = q.mediaBox
output.addPage(q)
output.addPage(p)
output.write(dst_f)
src_f.close()
dst_f.close()
Gracias a moraes por esa respuesta. En mi caso, el PDF resultante parecía estar bien en Adobe Reader y en la vista previa de Mac, pero no parecía haberse dividido en páginas separadas cuando lo visualicé en iOS. Usé Python 2.7.8 y PyPDF 2, y modifiqué el script de la siguiente manera, que funcionó bien. (y reordenó las páginas izquierda / derecha, en lugar de derecha / izquierda).
import copy
import math
from PyPDF2 import PdfFileReader, PdfFileWriter
def split_pages(src, dst):
src_f = file(src, ''r+b'')
dst_f = file(dst, ''w+b'')
input = PdfFileReader(src_f)
output = PdfFileWriter()
for i in range(input.getNumPages()):
p = input.getPage(i)
q = copy.copy(p)
q.mediaBox = copy.copy(p.mediaBox)
x1, x2 = p.mediaBox.lowerLeft
x3, x4 = p.mediaBox.upperRight
x1, x2 = math.floor(x1), math.floor(x2)
x3, x4 = math.floor(x3), math.floor(x4)
x5, x6 = math.floor(x3/2), math.floor(x4/2)
if x3 > x4:
# horizontal
p.mediaBox.upperRight = (x5, x4)
p.mediaBox.lowerLeft = (x1, x2)
q.mediaBox.upperRight = (x3, x4)
q.mediaBox.lowerLeft = (x5, x2)
else:
# vertical
p.mediaBox.upperRight = (x3, x4)
p.mediaBox.lowerLeft = (x1, x6)
q.mediaBox.upperRight = (x3, x6)
q.mediaBox.lowerLeft = (x1, x2)
p.artBox = p.mediaBox
p.bleedBox = p.mediaBox
p.cropBox = p.mediaBox
q.artBox = q.mediaBox
q.bleedBox = q.mediaBox
q.cropBox = q.mediaBox
output.addPage(q)
output.addPage(p)
output.write(dst_f)
src_f.close()
dst_f.close()
Puede usar una biblioteca de Python llamada PyPDF. Esta función dividirá páginas dobles independientemente de la orientación de la página:
import copy
import math
import pyPdf
def split_pages(src, dst):
src_f = file(src, ''r+b'')
dst_f = file(dst, ''w+b'')
input = pyPdf.PdfFileReader(src_f)
output = pyPdf.PdfFileWriter()
for i in range(input.getNumPages()):
p = input.getPage(i)
q = copy.copy(p)
q.mediaBox = copy.copy(p.mediaBox)
x1, x2 = p.mediaBox.lowerLeft
x3, x4 = p.mediaBox.upperRight
x1, x2 = math.floor(x1), math.floor(x2)
x3, x4 = math.floor(x3), math.floor(x4)
x5, x6 = math.floor(x3/2), math.floor(x4/2)
if x3 > x4:
# horizontal
p.mediaBox.upperRight = (x5, x4)
p.mediaBox.lowerLeft = (x1, x2)
q.mediaBox.upperRight = (x3, x4)
q.mediaBox.lowerLeft = (x5, x2)
else:
# vertical
p.mediaBox.upperRight = (x3, x4)
p.mediaBox.lowerLeft = (x1, x6)
q.mediaBox.upperRight = (x3, x6)
q.mediaBox.lowerLeft = (x1, x2)
output.addPage(p)
output.addPage(q)
output.write(dst_f)
src_f.close()
dst_f.close()
Si está usando una biblioteca Java o .Net, puede usar iText / iTextSharp.
Se puede encontrar un ejemplo para alisar un documento existente en el libro iText in Action, 2da edición, en el capítulo 6 disponible gratuitamente: TilingHero.java / TilingHero.cs .
Briss es "una aplicación simple multiplataforma (Linux, Windows, Mac OSX) para recortar archivos PDF. Una interfaz de usuario sencilla le permite definir exactamente la región de recorte ajustando un rectángulo en las páginas superpuestas visualmente". Es de código abierto (GPL).
Funciona bien para mi La GUI es mínima, pero funcional. También se puede usar desde la línea de comando.
Las tijeras PDF me permitieron dividir (recortar) a granel todas las páginas en un PDF.
mutool
funciona brillantemente para esto. El siguiente ejemplo input.pdf
cada página de input.pdf
en 3 partes horizontales y 8 verticales (creando así 24 páginas de salida para cada 1 de entrada):
mutool poster -x 3 -y 8 input.pdf output.pdf
Para instalar mutool
, simplemente instale mupdf
, que probablemente está empaquetado con la mayoría de las distribuciones de GNU / Linux.
(Créditos para marttt .)
En los sistemas Linux basados en debian como ubuntu, puede instalarlo usando
sudo apt install mupdf
sudo apt install mupdf-tools