Python PDF Merger с Windows контекстное меню «Отправить» - PullRequest
0 голосов
/ 01 мая 2019

Я пытаюсь использовать контекстное меню Windows «Отправить» для анализа некоторых PDF-файлов в функции слияния PyPDF2.

в качестве обозначения: Слияние отлично работает, когда я применяю его к папке и запускаю os.listdir('folder')

Я попытался определить проблему, и возникла ошибка «EOF». PDF-файлы имеют действительный маркер EOF, и я протестировал код с несколькими PDF-файлами.

Код:

import sys
import os
from PyPDF2 import PdfFileMerger


def pdfMerger(files, loc):
    merger = PdfFileMerger()
    for pdf in files:
        try:
            merger.append(open(pdf, 'rb'))
        except Exception as E:
            input(E)
    with open(loc + '/combined_pdf.pdf', 'wb') as pdf_out:
        merger.write(pdf_out)


if __name__ == '__main__':
    if len(sys.argv) > 1:
        pdfMerger(sys.argv, os.path.split(sys.argv[1])[0])

Может кто-нибудь сказать мне, что я делаю не так? Любая помощь приветствуется!

1 Ответ

0 голосов
/ 10 мая 2019

Неважно, разобрался:

#!/usr/bin/python3

'''
Description:
Merge PDF files in to 1 pdf file in source directory.
'''

import os
import sys
try:
    from PyPDF2 import PdfFileMerger
except ImportError as missingModule:
    print('could not import PyPDF2', missingModule)


def checkType(arg):
    # check if given argument is a directory
    if os.path.isdir(arg[1]):
        # distil the source path
        arg = str(arg[1])
        # create a list with only pdf files
        pdf_files = [os.path.join(arg, f) for f in os.listdir(arg) if f.endswith('pdf')]
        src_loc = arg
        return pdf_files, src_loc
    # if arguments are pdf files, distil source folder and pdf files
    src_loc = os.path.split(sys.argv[1])[0]
    pdf_files = sys.argv[1:]
    return pdf_files, src_loc


def pdfMerger(args):
    files = args[0]
    loc = args[1]
    merger = PdfFileMerger(strict=False)
    for pdf in files:
        try:
            merger.append(open(pdf, 'rb'))
        except Exception as E:
            input(E)
    with open(loc + '/combined_pdf.pdf', 'wb') as pdf_out:
        merger.write(pdf_out)


if __name__ == '__main__':
    if len(sys.argv) < 1:
        print('Usage: Python PFM.py [directory] / [file, file, etc.]')
    pdfMerger(checkType(sys.argv))

...