J'ai un grand nombre de fichiers PDF comportant deux diapositives par page (pour l'impression).
Le format est A4 pages chacune avec deux diapositives configuration comme suit:
-----------
| slide 1 |
-----------
| slide 2 |
-----------
Comment puis-je générer un nouveau fichier PDF avec une diapositive par page?
Heureux d'utiliser l'interface graphique, l'interface de ligne de commande, les scripts ou même l'interface avec la bibliothèque PDF d'un langage; mais j'ai besoin que le texte sur les diapositives soit toujours sélectionnable.
PDF Les ciseaux m'ont permis de fractionner toutes les pages d'un PDF.
Briss est "une application multiplate-forme simple (Linux, Windows, Mac OSX) permettant de rogner des fichiers PDF. Une interface utilisateur simple vous permet de définir exactement la région de recadrage en ajustant un rectangle sur le calque superposé visuellement. pages. " C'est open source (GPL).
Fonctionne bien pour moi. L'interface graphique est minimale, mais fonctionnelle. Il peut également être utilisé à partir de la ligne de commande.
mutool
travaille brillamment pour cela. L'exemple ci-dessous coupera chaque page de input.pdf
en 3 parties horizontales et 8 parties verticales (créant ainsi 24 pages de sortie pour chaque 1 entrée):
mutool poster -x 3 -y 8 input.pdf output.pdf
Pour installer mutool
, installez simplement mupdf
, qui est probablement fourni avec la plupart des distributions GNU/Linux.
(Crédits à marttt .)
Sur les systèmes Linux basés sur Debian comme Ubuntu, vous pouvez l’installer à l’aide de
Sudo apt install mupdf
Sudo apt install mupdf-tools
Vous pouvez utiliser une bibliothèque Python appelée PyPDF. Cette fonction divise les doubles pages, quelle que soit l’orientation de la page:
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()
Merci à Matt Gumbley pour son script Python. J'ai modifié ce script Python pour qu'il fonctionne désormais également avec les PDF contenant des pages portrait et paysage et des pages recadrées:
# -*- coding: utf-8 -*-
"""
Created on Thu Feb 26 08:49:39 2015
@author: Matt Gumbley (stackoverflow)
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()
Essayez BRISS .
Il vous permet de diviser chaque page en autant de sous-pages que vous le souhaitez en définir des régions avec une interface graphique. Il regroupe toutes les pages similaires en groupes pour vous, afin que vous puissiez définir des régions pour ce groupe une fois.
Il est multi-plateforme, gratuit et open-source.
(copier-coller depuis https://superuser.com/a/235327/35237 )
Merci à moraes pour cette réponse. Dans mon cas, le résultat PDF obtenu dans les aperçus d'Adobe Reader et Mac, ne semblait pas avoir été divisé en pages distinctes du tout lors de l'affichage sur iOS. J'ai utilisé Python 2.7.8 et PyPDF 2 et modifié le script comme suit, ce qui a bien fonctionné. (et réorganisé les pages gauche/droite, plutôt que droite/gauche).
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()
Si vous utilisez une bibliothèque Java ou .Net, vous pouvez utiliser iText/iTextSharp.
Vous trouverez un exemple de mosaïque d'un document existant dans l'ouvrage iText in Action, 2e édition, dans la section disponible gratuitement chapitre 6 : TilingHero.Java / TilingHero.cs .
Avec mupdf-1.8-windows-x64
, dans win10 CMD, vous devez avoir ' poster ' (suivi de l'espace et sans guillemets) avant le paramètre horizontal (-x) . Par exemple, pour une numérisation au format PDF à double page:
affiche mutool -x 2 -y 1 C:\Utilisateurs\alfie\Documents\SNM\The_Ultimate_Medicine.pdf C:\Utilisateurs\alfie\Documents\ebooks\The_Ultimate_Medicine.pdf
Quel outil formidable! Merci infiniment! .. (Et le fichier de sortie ~ 9 Mo ne fait que 52 Ko de plus que l'original!)