【问题标题】:Python PDF Merger with Windows "Send To" context menuPython PDF 合并与 Windows“发送到”上下文菜单
【发布时间】:2019-05-01 12:44:31
【问题描述】:

我正在尝试使用 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])

有人可以告诉我我做错了什么吗? 任何帮助表示赞赏!

【问题讨论】:

    标签: python eof pypdf2


    【解决方案1】:

    没关系,想通了:

    #!/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))
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-29
      • 2017-09-20
      • 2012-01-02
      • 2020-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多