美文网首页
python 分割 A3 PDF 成A4 PDF

python 分割 A3 PDF 成A4 PDF

作者: 火卫控 | 来源:发表于2025-08-25 23:12 被阅读0次

将A3 PDF转换成A4 PDF,方便A4纸打印(由于直接缩印看不清楚字)

原始PDF 总18页 input.pdf
A3 PDF
分割后的PDF 总36页 output.pdf
A4 PDF

PDF代码如下:

import os,sys
os.chdir(sys.path[0])


import fitz  # 导入PyMuPDF库

def split_pdf_vertically(input_path, output_path):
    # 打开源PDF文件
    source_doc = fitz.open(input_path)
    # 创建新的PDF文档
    new_doc = fitz.open()
    
    # 遍历源PDF的每一页
    for page_num in range(len(source_doc)):
        # 获取当前页面
        page = source_doc.load_page(page_num)
        # 获取页面尺寸
        page_rect = page.rect
        width = page_rect.width
        height = page_rect.height
        
        # 计算左半部分和右半部分的区域
        left_half = fitz.Rect(
            page_rect.x0,       # 左边界
            page_rect.y0,       # 上边界
            page_rect.x0 + width/2,  # 右边界(中间位置)
            page_rect.y1        # 下边界
        )
        
        right_half = fitz.Rect(
            page_rect.x0 + width/2,  # 左边界(中间位置)
            page_rect.y0,       # 上边界
            page_rect.x1,       # 右边界
            page_rect.y1        # 下边界
        )
        
        # 创建左半页并添加到新文档
        new_page_left = new_doc.new_page(width=width/2, height=height)
        # 正确参数:目标区域,源文档,源页码,裁剪区域
        new_page_left.show_pdf_page(
            new_page_left.rect,  # 目标区域
            source_doc,          # 源文档对象(关键参数)
            page_num,            # 源页码
            clip=left_half       # 裁剪区域
        )
        
        # 创建右半页并添加到新文档
        new_page_right = new_doc.new_page(width=width/2, height=height)
        new_page_right.show_pdf_page(
            new_page_right.rect,
            source_doc,
            page_num,
            clip=right_half
        )
    
    # 保存新PDF文件
    new_doc.save(output_path)
    # 关闭文档释放资源
    source_doc.close()
    new_doc.close()
    print(f"成功将PDF分割为新文件:{output_path}")

# 使用示例
if __name__ == "__main__":
    split_pdf_vertically("input.pdf", "output.pdf")

安装环境

pip install PyMuPDF

代码解释:

这段代码的主要功能是将PDF文件的每一页纵向分割成两个独立的页面,并生成一个新的PDF文件。下面是对代码的详细解释:

### 整体流程
代码通过PyMuPDF(fitz)库操作PDF文件,核心逻辑是读取原始PDF的每一页,将其纵向(垂直)分成左右两部分,然后将这两部分分别作为新页面保存到新的PDF文件中。

### 逐部分解释

1. **导入库**
   ```python
   import fitz  # 导入PyMuPDF库

导入PyMuPDF库(通常用fitz作为别名),这是一个处理PDF文件的高效库。

  1. 定义分割函数

    def split_pdf_vertically(input_path, output_path):
    

    定义一个函数,接收两个参数:

    • input_path:原始PDF文件的路径
    • output_path:生成的新PDF文件的路径
  2. 打开PDF文件

    source_doc = fitz.open(input_path)  # 打开源PDF
    new_doc = fitz.open()  # 创建新的空白PDF
    
    • 打开原始PDF文件,获取一个文档对象source_doc
    • 创建一个新的空白PDF文档对象new_doc
  3. 遍历原始PDF的每一页

    for page_num in range(len(source_doc)):
        page = source_doc.load_page(page_num)  # 加载当前页
        page_rect = page.rect  # 获取页面尺寸信息
        width = page_rect.width  # 页面宽度
        height = page_rect.height  # 页面高度
    
    • 循环处理原始PDF中的每一页
    • page_rect包含页面的尺寸信息(坐标和宽高)
  4. 定义分割区域

    # 左半部分区域
    left_half = fitz.Rect(
        page_rect.x0,               # 左边界(原页面左边界)
        page_rect.y0,               # 上边界(原页面上边界)
        page_rect.x0 + width/2,     # 右边界(原页面中间)
        page_rect.y1                # 下边界(原页面下边界)
    )
    
    # 右半部分区域
    right_half = fitz.Rect(
        page_rect.x0 + width/2,     # 左边界(原页面中间)
        page_rect.y0,               # 上边界(原页面上边界)
        page_rect.x1,               # 右边界(原页面右边界)
        page_rect.y1                # 下边界(原页面下边界)
    )
    
    • 使用fitz.Rect定义两个矩形区域,将原始页面从中间垂直分割
    • 左半部分占原页面宽度的50%,右半部分占剩下的50%
  5. 创建新页面并添加内容

    # 创建左半页
    new_page_left = new_doc.new_page(width=width/2, height=height)
    new_page_left.show_pdf_page(
        new_page_left.rect,  # 目标区域(新页面的尺寸)
        source_doc,          # 源PDF文档
        page_num,            # 源页面编号
        clip=left_half       # 裁剪区域(只取左半部分)
    )
    
    # 创建右半页(类似左半页操作)
    new_page_right = new_doc.new_page(width=width/2, height=height)
    new_page_right.show_pdf_page(
        new_page_right.rect,
        source_doc,
        page_num,
        clip=right_half
    )
    
    • 为左半部分创建一个新页面,宽度是原页面的一半
    • 使用show_pdf_page()方法将原始页面的左半部分内容复制到新页面
    • 对右半部分执行相同操作
  6. 保存并关闭文件

    new_doc.save(output_path)  # 保存新PDF
    source_doc.close()         # 关闭源文件
    new_doc.close()            # 关闭新文件
    print(f"成功将PDF分割为新文件:{output_path}")
    
    • 保存新生成的PDF文件
    • 关闭所有文档对象以释放资源
    • 打印成功信息
  7. 函数调用

    if __name__ == "__main__":
        split_pdf_vertically("input.pdf", "output.pdf")
    
    • 当脚本直接运行时,调用分割函数,处理当前目录下的input.pdf,生成output.pdf

最终效果

假设原始PDF有3页,运行代码后会生成一个6页的新PDF:

  • 新PDF的第1页 = 原始第1页的左半部分
  • 新PDF的第2页 = 原始第1页的右半部分
  • 新PDF的第3页 = 原始第2页的左半部分
  • 以此类推...

这种分割方式特别适合将宽幅PDF(如A3)转换为适合A4纸打印的格式,每一半都可以单独打印在A4纸上。

相关文章

网友评论

      本文标题:python 分割 A3 PDF 成A4 PDF

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