美文网首页
Python读写PDF

Python读写PDF

作者: Black先森 | 来源:发表于2020-06-06 23:00 被阅读0次

    PDF的基本操作主要是读取、创建,合并等操作。使用Python的第三方包PyPDF2.读写合并PDF文件变得非常简单。本文最后给出PDF合并的程序,供参考使用。

    欢迎关注我的个人公众号:数学编程,以及个人博客

    安装依赖包

    使用Python的pip进行安装,安装包名称大小写不敏感。

    pip install PyPDF2
    

    查看基本的类和方法

    进入包的__init__.py文件可以看到主要的几个类和方法

    from .pdf import PdfFileReader, PdfFileWriter
    from .merger import PdfFileMerger
    from .pagerange import PageRange, parse_filename_page_ranges
    from ._version import __version__
    __all__ = ["pdf", "PdfFileMerger"]
    

    从名称上可以看出提供了基本的操作方法,分别是读取,写入和合并,其中合并可以认为是读取然后 再写入的操作。

    读取和写入PDF

    读取PDF非常简单,直接使用PdfFileReader这个类,先来看看这个类的参数

    class PdfFileReader(object):
        """
        Initializes a PdfFileReader object.  This operation can take some time, as
        the PDF stream's cross-reference tables are read into memory.
    
        :param stream: A File object or an object that supports the standard read
            and seek methods similar to a File object. Could also be a
            string representing a path to a PDF file.
        :param bool strict: Determines whether user should be warned of all
            problems and also causes some correctable problems to be fatal.
            Defaults to ``True``.
        :param warndest: Destination for logging warnings (defaults to
            ``sys.stderr``).
        :param bool overwriteWarnings: Determines whether to override Python's
            ``warnings.py`` module with a custom implementation (defaults to
            ``True``).
        """
        def __init__(self, stream, strict=True, warndest = None, overwriteWarnings = True):
    

    其中必须传入的参数是stream,文件流而不是文件名称。 而PDF的创建不需要传入参数。

    from PyPDF2 import PdfFileReader, PdfFileWriter
    infn = 'infn.pdf'
    outfn = 'outfn.pdf'
    # 获取一个 PdfFileReader 对象
    pdf_input = PdfFileReader(open(infn, 'rb'))
    # 获取 PDF 的页数
    page_count = pdf_input.getNumPages()
    print(page_count)
    # 返回一个 PageObject
    page = pdf_input.getPage(i)
    
    # 获取一个 PdfFileWriter 对象
    pdf_output = PdfFileWriter()
    # 将一个 PageObject 加入到 PdfFileWriter 中
    pdf_output.addPage(page)
    # 输出到文件中
    pdf_output.write(open(outfn, 'wb'))
    

    合并多个PDF

    合并多个PDF就读取多个文件,然后写入一个文件中。不过这样需要计算页面数,不如直接用PdfFileMerger,提供了append方法

    from PyPDF2 import PdfFileReader, PdfFileMerger
    
    
    def read_pdf(pdf_name):
        stream = open(pdf_name, "rb")
        reader = None
        try:
            reader = PdfFileReader(stream)
        except Exception as e:
            print(e)
        return reader
    
    
    def merge_pdf(pdfs, output_name = "merge.pdf"):
        merge = PdfFileMerger()
        for pdf_name in pdfs:
            pdf_obj = read_pdf(pdf_name)
            print("开始合并 《%s》 页面数: %s" % (pdf_name, pdf_obj.getNumPages()))
            merge.append(pdf_obj)
        merge.write(open(output_name, "wb"))
        print("合并后总页面数:", merge.id_count)
        print("写入当前目录", output_name)
    
    
    if __name__ == '__main__':
        pdfs = [
            "file1.pdf", "file2.pdf", "file3.pdf"
        ]
        merge_pdf(pdfs)
    

    输出结果:

    开始合并 《file1.pdf》 页面数: 28
    开始合并 《file2.pdf》 页面数: 34
    开始合并 《file3.pdf》 页面数: 38
    合并后总页面数: 100
    写入当前目录 merge.pdf
    

    总结

    PDF文件的合并是很常用的操作,Python在处理PDF文件方面非常简单,主要原因是别人已经封装好了包,只需要简单的调用就能满足基本需求。文章的最后给出了一个简单合并多个PDF的程序用例,供参考使用。

    相关文章

      网友评论

          本文标题:Python读写PDF

          本文链接:https://www.haomeiwen.com/subject/lwxqtktx.html