Python实现PDF文件拆分详解

目录

使用工具

将PDF按页数拆分

将PDF的每一页拆分为单独的文件

将PDF按指定页数拆分

根据页码范围拆分PDF

根据指定内容拆分PDF

将PDF的一页拆分为多页


在日常生活中,我们常常会遇到大型的PDF文件,这些文件可能难以发送、管理和查阅。将PDF拆分成多个小文件是一个实用的解决方案,可以为我们带来多重好处。首先,拆分PDF可以提高文件的可读性,使用户更容易找到所需信息。此外,拆分后的文件更便于分享和协作,特别适用于团队项目,让不同成员能够同时处理各自负责的部分。同时,这种方法还能有效保护隐私,允许将敏感信息单独处理,从而降低数据泄露的风险。

这篇博客将探讨如何使用Python实现PDF文件拆分,主要涵盖以下几个方面的内容:

  • 将PDF按页数拆分
  • 将PDF的每一页拆分为单独的文件
  • 将PDF按指定页数拆分
  • 将PDF按页码范围拆分
  • 将PDF按指定内容拆分
  • 将PDF的一页拆分为多页
  • 使用工具

    要在Python中实现拆分PDF文件,可以使用Spire.PDF for Python库。该库主要用于在Python应用程序中生成和处理PDF文档,也支持将PDF转换为其他格式,例如图片,Word和Excel等。

    安装 Spire.PDF

    在开始之前,需要先安装 Spire.PDF 库。你可以在终端中运行以下命令进行安装:

    pip install spire.pdf

    将PDF按页数拆分

    在按页数拆分PDF文件时,你可以将PDF文档的每一页拆分为一个单独的文件,也可以将PDF文档按指定页数拆分。下面将对这两种方式逐一进行介绍。

    将PDF的每一页拆分为单独的文件

    Spire.PDF for Python提供了PdfDocument.Split()方法,支持将PDF文档按页拆分,生成的每个文件仅包含原始文档中的一页。具体实现步骤如下:

  • 创建PdfDocument对象。
  • 使用PdfDocument.LoadFromFile()方法打开PDF文档。
  • 使用PdfDocument.Split()方法将PDF文档的每一页拆分为单独的PDF文档。
  • 实现代码:

    from spire.pdf.common import *
    from spire.pdf import *
    
    # 创建PdfDocument对象
    pdf = PdfDocument()
    # 加载PDF文件
    pdf.LoadFromFile("心理健康.pdf")
    
    # 将PDF文件拆分为多个PDF文件,每个文件仅包含原始PDF中的一页
    pdf.Split("拆分PDF/第{0}页.pdf", 1)
    
    # 关闭PdfDocument对象
    pdf.Close()
    

    Python 将PDF的每一页拆分为单独的文件

    将PDF按指定页数拆分

    将 PDF 文件按指定页数拆分的方法是通过创建新的 PDF 文档并将指定数量的页面插入其中来实现。具体实现步骤如下:

  • 创建PdfDocument对象。
  • 使用PdfDocument.LoadFromFile()方法打开PDF文档。
  • 获取PDF文档的总页数。
  • 使用循环按指定页数拆分PDF:
  • 设置起始页和结束页。
  • 创建新的PdfDocument对象。
  • 使用PdfDocument.InsertPageRange()方法将当前页码范围内的页面插入到新PDF文档中。
  • 使用PdfDocument.SaveToFile()方法保存生成的PDF文档。
  • 实现代码:

    from spire.pdf.common import *
    from spire.pdf import *
    
    # 将PDF按指定页数拆分的方法
    def split_pdf_by_page_count(input_file, page_count):
        # 创建PdfDocument对象
        pdf = PdfDocument()
        # 加载PDF文件
        pdf.LoadFromFile(input_file)
    
        # 计算总页数
        total_pages = pdf.Pages.Count
    
        # 按指定页数拆分PDF
        for i in range(0, total_pages, page_count):
            # 创建新的PdfDocument对象
            new_pdf = PdfDocument()
            
            # 计算当前要插入的页码范围
            start_page = i
            end_page = min(i + page_count - 1, total_pages - 1)  # 确保不超过总页数
            
            # 将当前页码范围的页面插入到新PDF中
            new_pdf.InsertPageRange(pdf, start_page, end_page)
    
            # 保存生成的文件
            new_pdf.SaveToFile("拆分PDF/" + f"{start_page + 1}-{end_page + 1}页.pdf")
            # 关闭新创建的PdfDocument对象
            new_pdf.Close()
    
        # 关闭原始PdfDocument对象
        pdf.Close()
    
    # 调用split_pdf_by_page_count方法将PDF文件按照每3页拆分
    split_pdf_by_page_count("心理健康.pdf", 3)
    

    Python 将PDF按指定页数拆分为多个PDF

    根据页码范围拆分PDF

    除了按页数拆分 PDF 文件外,你还可以选择将指定页码范围内的页面提取为单独的文件。该方法的实现步骤与按指定页数拆分类似,此处不再赘述。

    实现代码:

    from spire.pdf.common import *
    from spire.pdf import *
    
    # 提取PDF中指定页码范围内的页面并保存为新文件的方法
    def split_pdf_by_page_range(input_file, start_page, end_page, output_file):
        # 创建PdfDocument对象并加载PDF文件
        pdf = PdfDocument()
        pdf.LoadFromFile(input_file)
    
        # 创建新的PdfDocument对象
        new_pdf = PdfDocument()
    
        # 将指定页码范围内的页面插入到新PDF文档中
        new_pdf.InsertPageRange(pdf, start_page, end_page)
    
        # 保存生成的文件
        new_pdf.SaveToFile(output_file)
    
        # 关闭PdfDocument对象
        pdf.Close()
        new_pdf.Close()
    
    # 调用split_pdf_by_page_range方法,从PDF文件中提取第1-3页并保存为新文件
    split_pdf_by_page_range("心理健康.pdf", 0, 2, "拆分PDF/指定页码范围.pdf")
    

    Python 根据指定页码范围拆分PDF

    根据指定内容拆分PDF

    在某些情况下,你可能需要根据特定关键字或短语拆分 PDF。这种方法可以提取包含特定内容的页面,便于整理相关信息。以下代码会查找 PDF 每一页上的文本,如果找到指定关键字,则将该页面添加到新 PDF 中:

    from spire.pdf.common import *
    from spire.pdf import *
    
    # 提取包含特定关键字的页面到新PDF中的方法 
    def extract_pages_with_keyword(pdf_path, output_path, keyword):
        # 创建PdfDocument对象
        pdf = PdfDocument()
        # 加载PDF文件
        pdf.LoadFromFile(pdf_path)
    
        # 创建一个新的PdfDocument对象
        new_pdf = PdfDocument()
    
        # 遍历文档中的每一页
        for i in range(pdf.Pages.Count):
            page = pdf.Pages[i]
            # 创建PdfTextFinder实例
            finder = PdfTextFinder(page)
            # 定义文本查找参数
            finder.Options.Parameter = TextFindParameter.WholeWord
            # 查找特定文本
            results = finder.Find(keyword)
    
            # 如果找到了关键字
            if results:
                # 将当前页面添加到新文档中
                new_pdf.InsertPage(pdf, i)
                
        # 保存提取的结果文件
        new_pdf.SaveToFile(output_path)
    
        # 关闭PdfDocument对象
        new_pdf.Close()
        pdf.Close()
    
    # 调用extract_pages_with_keyword方法将PDF文件中包含特定关键字的页面保存为新文件
    extract_pages_with_keyword("心理健康.pdf", "拆分PDF/含关键字页面.pdf", "问题")
    

    将PDF的一页拆分为多页

    在某些情况下,你可能需要将 PDF 文档的某一页拆分为两页或多页。在拆分时,你可以选择将该页面横向或竖向拆分。横向拆分时,拆分后的文档的每个页面的宽度等于原始宽度的1/拆分总页数;竖向拆分时,拆分后的文档的每个页面的高度等于原始高度的1/拆分总页数。

    以下代码展示了如何将PDF文档的指定页面竖向或横向拆分为两页:

    from spire.pdf.common import *
    from spire.pdf import *
    
    # 将指定PDF页面横向或竖向拆分为多页的方法
    def split_specific_pdf_page(pdf_path, output_folder, page_index, num_pages, split_direction='vertical'):
        # 创建PdfDocument对象
        pdf = PdfDocument()
        # 加载PDF文件
        pdf.LoadFromFile(pdf_path)
    
        # 获取指定页面
        if page_index < 0 or page_index >= pdf.Pages.Count:
            print("错误:指定的页面索引超出范围。")
            return
        
        page = pdf.Pages[page_index]
    
        # 创建一个新的PdfDocument对象
        newPdf = PdfDocument()
        # 移除所有页面边距
        newPdf.PageSettings.Margins.All = 0.0
        
        # 根据拆分方向设置新PDF的页面尺寸
        if split_direction == 'vertical':
            newPdf.PageSettings.Width = page.Size.Width
            newPdf.PageSettings.Height = page.Size.Height / float(num_pages)
        elif split_direction == 'horizontal':
            newPdf.PageSettings.Height = page.Size.Height
            newPdf.PageSettings.Width = page.Size.Width / float(num_pages)
        else:
            print("错误:无效的拆分方向,请选择'vertical'或'horizontal'。")
            return
        
        # 向新PDF添加一页
        newPage = newPdf.Pages.Add()
    
        # 设置布局格式为自动分页
        format = PdfTextLayout()
        format.Break = PdfLayoutBreakType.FitPage
        format.Layout = PdfLayoutType.Paginate
    
        # 绘制内容   
        page.CreateTemplate().Draw(newPage, PointF(0.0, 0.0), format)
    
        # 保存生成的文件
        newPdf.SaveToFile(f"{output_folder}/拆分第{page_index + 1}页.pdf")
    
        # 关闭PdfDocument对象
        newPdf.Close()
        pdf.Close()
    
    # 调用split_specific_pdf_page方法将PDF文件第1页竖向拆分为2页,0为当前页面的索引,2为拆分总页数
    split_specific_pdf_page("心理健康.pdf", "拆分PDF", 0, 2, 'vertical')  
    # # 或者将PDF文件第1页横向拆分为2页
    # split_specific_pdf_page("心理健康.pdf", "拆分PDF", 0, 2, 'horizontal') 

    以上就是使用Python实现拆分PDF文档的全部内容。感谢阅读!

    作者:nuclear2011

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python实现PDF文件拆分详解

    发表回复