Скрипт PyPDF2 для разделения каждой страницы PDF в папке - PullRequest
1 голос
/ 07 мая 2020

У меня есть скрипт, который разбивает PDF-файл на отдельные PDF-файлы. Что идеально. Я пытаюсь переписать сценарий, чтобы я мог просто создать SPLITPDF_Folder и поместить этот сценарий в эту папку. Таким образом, в будущем я могу просто перетащить любой PDF-файл, который я хочу разделить, в эту папку и запустить скрипт.

Текущий сценарий, который я написал, требует изменения каждый раз, когда требуется разделить другой PDF-файл. '' '

 Split each page of PDF

 from PyPDF2 import PdfFileWriter, PdfFileReader

 #import required pdf files
 inputpdf = PdfFileReader(open("filename.pdf" , "rb"))

num_pages = inputpdf.numPages

#loop through all pages
for i in range(num_pages):
    output = PdfFileWriter()
     output.addPage(inputpdf.getPage(i))

with open(f"document-page{i+1}.pdf", 'wb') as outputStream:
    output.write(outputStream)

#print out a success statement 
print("Your PDF has been split")

Я пытаюсь переписать сценарий, чтобы можно было поместить любой файл pdf в папку и запустить сценарий, но я не могу понять, как указать его на os.listdir ( ) или как реализовать это в коде. Ниже то, что у меня есть, но не работает.

##Split each page of PDF

#import required modules 
from PyPDF2 import PdfFileWriter, PdfFileReader

#import pdf file in the folder
inputpdf = PdfFileWriter()

for filename in os.listdir('.'):
     if filename.endswith('pdf'):

    num_pages = inputpdf.numPages

 #loop through all pages
  for i in range(num_pages):
   output = PdfFileWriter()
   output.addPage(inputpdf.getPage(i))

  with open(f"document-page{i+1}.pdf", 'wb') as outputStream:
    output.write(outputStream)

#print out a success statement 
print("Your PDF has been split")

Очень ценю любую помощь!

1 Ответ

0 голосов
/ 07 мая 2020

Думаю, вам стоит попробовать библиотеку glob, она уже имеет дело с полными путями. Поскольку разделение PDF-файлов является повторяющейся задачей, я создал функцию с именем splitPDF, которая открывает file_name и разбивает PDF-файл. Пожалуйста, проверьте это решение:

##Split each page of PDF
#import required modules
import os
from glob import glob
from PyPDF2 import PdfFileWriter, PdfFileReader

# Functions
def splitPDF(file_name,output_dir=None):
    inputpdf = PdfFileReader(open(file_name , "rb"))

    num_pages = inputpdf.numPages

    #loop through all pages
    for i in range(num_pages):
        output = PdfFileWriter()
        output.addPage(inputpdf.getPage(i))

        # with open(f"document-page{i+1}.pdf", 'wb') as outputStream:
        output_name = f"{os.path.basename(file_name.replace('.pdf',''))}{i+1}.pdf"
        if output_dir is None:
            output_name = os.path.join(output_dir, output_name)
        with open(output_name,'wb') as outputStream:
            output.write(outputStream)
    print(f"PDF: {file_name} has been splitted")

# Loop over all the files in base_dir
base_dir = "<the directory where you want to find pdfs>"
output_dir = "<the directory where you want to store your splitted pdfs>"
pdfs = os.path.join(base_dir,"*.pdf")

files = glob(pdfs)
# Split each file found in base_dir
for file in files:
    splitPDF(file,output_dir)
    # splitPDF(file) use this to place the files on the same dir.

Кроме того, я изменил output_name, чтобы он мог совпадать с именем исходного файла, если необходимо.

Изменить:

Я добавил переменную output_dir, чтобы вы могли помещать свои файлы в другую папку. По умолчанию значение output_dir = None, поэтому, если вы не проанализируете это значение для функции, она поместит файл в тот же каталог, что и base_dir.

Пожалуйста, дайте мне знать, помогло ли это! : D

...