[Python, PyPDF2] Un script qui divise un PDF étalé en deux à gauche et à droite

Contenu de cette époque

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.

Code source

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()

Comment utiliser

Pour split_pdf (), divisez le fichier pdf en deux en donnant le fichier pdf à diviser et le nom du fichier pour la sortie.

Bref commentaire

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.

Exemple d'utilisation

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.

Ce que j'ai utilisé comme référence

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

[Python, PyPDF2] Un script qui divise un PDF étalé en deux à gauche et à droite
Un script qui combine vos modules et binaires Python préférés en une seule couche Lambda
Une fonction qui divise l'itérable en N morceaux en Python
Script Python qui compare le contenu de deux répertoires
Un script python qui supprime les fichiers ._DS_Store et ._ * créés sur Mac
Un programme python qui redimensionne une vidéo et la transforme en image
Script Python qui lit les fichiers SQL, exécute BigQuery et enregistre le csv
Créez une application Web qui convertit le PDF en texte à l'aide de Flask et PyPDF2
Un joli nimporter qui connecte nim et python
"Kit Python" qui appelle des scripts Python depuis Swift
J'ai créé un outil en Python qui clique avec le bouton droit sur un fichier Excel et le divise en fichiers pour chaque feuille.
Script Python qui explore le flux RSS du statut Azure et le publie sur Hipchat
Un script python qui importe un fichier csv daté dans BigQuery en tant que table de partition de temps
Un script qui combine plusieurs pages d'un fichier PDF en une seule page sans marges
[Python] Un bloc-notes qui traduit et télécharge le fichier ipynb de GitHub en japonais.
Python qui fusionne beaucoup d'excellence en un seul Excel
Script Shell pour mettre Webmin dans Alpine Linux
Que contient cette variable (lorsque le script Python est en cours d'exécution)
Programme Python qui convertit les données ical en texte
Un script Python qui enregistre une image de presse-papiers (GTK) dans un fichier.
Créons un script qui s'enregistre avec Ideone.com en Python.
Création d'un script Python prenant en charge l'API e-Stat (ver.2)
Créez le code qui renvoie "A et prétendant B" en python
Comment écrire une classe méta qui prend en charge à la fois python2 et python3
Un ensemble de fichiers de script qui font wordcloud avec Python3
Un script python qui convertit les données Oracle Database en csv
J'ai écrit un script qui divise l'image en deux
[Python] Une histoire qui semblait tomber dans un piège à contourner