Comment puis-je "annuler" un pdf

J'ai un file pdf qui a été transformé en un format de livret. Il est destiné à imprimer sur du papier A4 en orientation paysage; voici deux pages dans le pdf, qui devraient correspondre à quatre pages dans le livre réel.

------------------------------- | | | | | | | | | | (1) | (3) | | | | | | | | | | ------------------------------- ------------------------------- | | | | | | | | | | (4) | (2) | | | | | | | | | | ------------------------------- 

Les numéros entre parenthèses correspondent à l'ordre des pages individuelles.

Je sais qu'il y a toutes sortes de commands (pdfbook, pdfnup, etc.) sur linux (qui a probablement été utilisé pour faire ce livret en premier lieu). Comment puis-je l'annuler? C'est-à-dire que j'aimerais faire un document pdf à partir de là où chaque page individuelle du produit final est une page individuelle du pdf, ordonnée de la manière habituelle.

modifier

Merci à Gilles, j'ai réussi à utiliser le code suivant:

 import copy, sys from pyPdf import PdfFileWriter, PdfFileReader input = PdfFileReader(sys.stdin) output = PdfFileWriter() second_half = [] for i in range(0,input.getNumPages()): p = input.getPage(i) q = copy.copy(p) print >> sys.stderr, 'splitting page',i print >> sys.stderr, '\tlowerLeft:',p.mediaBox.lowerLeft print >> sys.stderr, '\tupperRight:',p.mediaBox.upperRight p.mediaBox.upperRight = (ur[0], (bl[1]+ur[1])/2) p.mediaBox.lowerLeft = bl q.mediaBox.upperRight = ur q.mediaBox.lowerLeft = (bl[0], (bl[1]+ur[1])/2) if i % 2 == 0: output.addPage(p) qold = q else: output.addPage(q) output.addPage(qold) output.addPage(p) output.write(sys.stdout) 

Voici un petit script Python utilisant la bibliothèque PyPdf qui fait le travail. (Dérivé de un2up .) Enregistrez-le dans un script appelé unbook , rendez-le exécutable ( chmod +x unbook ) et exécutez-le en tant que filter ( unbook <book.pdf >1up.pdf ).

J'ai testé ce script sur la sortie de pdfbook --signature=N Pour une autre méthode, il est possible que vous n'ayez pas besoin d'inverser toutes les autres pages d'input et que l'ordre des pages soit différent (cela dépend de l'orientation des pages de paysage). La disposition de la page ne correspond pas à votre question; le 13,42 n'a pas de sens pour moi (dans un livre de 4 pages, 3 devrait être à côté de 2, pas à côté de 1).

 #!/usr/bin/env python import copy, sys from pyPdf import PdfFileWriter, PdfFileReader input = PdfFileReader(sys.stdin) output = PdfFileWriter() second_half = [] for i in range(0,input.getNumPages()): p = input.getPage(i) q = copy.copy(p) (w, h) = p.mediaBox.upperRight p.mediaBox.upperRight = (w/2, h) q.mediaBox.upperLeft = (w/2, h) if i % 2 == 0: p.rotateClockwise(180) q.rotateClockwise(180) output.addPage(p) second_half.append(q) else: output.addPage(p) second_half.append(q) second_half.reverse() for q in second_half: output.addPage(q) output.write(sys.stdout) 

Ignorer tout avertissement de dépréciation; seuls les responsables du PyPdf doivent être concernés par ces problèmes.