Ceci est un mémo d'un script qui utilise PyPDF2 pour diviser un fichier pdf tel qu'un document numérisé dans une planche en deux à gauche et à droite.
from PyPDF2 import PdfFileWriter, PdfFileReader
import copy
def split_pdf(input_pdf, output_filename):
pdf_file = PdfFileReader(open(input_pdf, 'rb'))
marged = PdfFileWriter()
page_num = pdf_file.getNumPages()
for i in range(0, page_num):
page_L = pdf_file.getPage(i)
page_R = copy.copy(page_L)
(w, h) = page_L.mediaBox.upperRight
page_L.mediaBox.upperRight = (w/2, h)
marged.addPage(page_L)
page_R.mediaBox.upperLeft = (w/2, h)
marged.addPage(page_R)
outputStream = open(output_filename, "wb")
marged.write(outputStream)
outputStream.close()
def sample():
input_pdf = "input.pdf"
output_filename = "output.pdf"
split_pdf(input_pdf, output_filename)
if __name__ == "__main__":
sample()
Pour split_pdf (), divisez le fichier pdf en deux en donnant le fichier pdf à diviser et le nom du fichier pour la sortie.
Préparez deux pages, une pour la page de gauche et une pour la page de droite. (Page, page_R)
Puisque la page commence en bas à gauche, obtenez la largeur et la hauteur à partir des coordonnées en haut à droite. (w, h)
En spécifiant les coordonnées sur le côté droit pour la page de gauche et les coordonnées sur le côté gauche pour la page de droite, chacun sera coupé en fonction de cela.
Cette fois, la coordonnée supérieure droite est spécifiée comme (w / 2, h) sur la page de gauche, et la coordonnée supérieure gauche est spécifiée comme (w / 2, h) sur la page de droite, et elle est divisée en deux parties sur la gauche et la droite.
Cela peut être plus facile à comprendre si vous définissez page_R.mediaBox.lowerLeft = (w / 2, 0)
pour la bonne page.
Je l'utilise comme suit. N'écrivez que les ajouts et les modifications.
import sys, os
def main():
argv = [sys.argv[i] for i in range(1,len(sys.argv))]
for input_pdf in argv:
basename_without_ext = os.path.splitext(os.path.basename(input_pdf))[0]
output_filename = "split_{}.pdf".format(basename_without_ext)
print("{}Est divisé en deux.".format(os.path.basename(input_pdf)))
split_pdf(input_pdf, output_filename)
if __name__ == '__main__':
main()
Obtenez l'argument, tournez-le avec une instruction for et passez-le à split_pdf. Le nom du fichier de sortie sera le nom du fichier d'entrée avec split_ au début.
Divisez le PDF numérisé du matériel relié au centre en pages (Qiita: @hrb23m)
[Comment diviser un PDF à balayage étalé avec un désalignement en deux pages (Python, pypdf) (Collection de mémos techniques)](https://www.robotech-note.com/entry/2018/04/28/ Mauvais alignement du centre Divisez le PDF de numérisation étalée en deux pages)
Recommended Posts