吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 45|回复: 2
上一主题 下一主题
收起左侧

[Python 原创] A3页面到A4页面转换Python程序

[复制链接]
跳转到指定楼层
楼主
nancune 发表于 2026-7-2 20:04 回帖奖励
本帖最后由 nancune 于 2026-7-2 20:07 编辑

因为需要用A4纸张打印A3幅面的材料(PDF格式),同时保证纸张边缘图文不丢失,图文大小不变,需要分割原A3页面到A4页面。A3页面到A4页面转换Python程序如下:
[Python] 纯文本查看 复制代码
import fitz
import sys

def split_all_facing_pdf(input_pdf: str, output_pdf: str):
    """
    所有对折页面对半拆分:
    1. 原页面左右对半裁切
    2. 左半页整体向左偏移8pt,右半页整体向右偏移8pt
    3. 左在前、右在后输出单页,保留旋转矫正开关
    """
    src_doc = fitz.open(input_pdf)
    new_doc = fitz.open()
    total_page_count = len(src_doc)
    print(f"检测到原PDF总页数:{total_page_count}")

    # 偏移量:4字符宽度对应4pt,可按需修改
    offset_pt = -8

    for page_idx in range(total_page_count):
        page = src_doc[page_idx]
        page_rect = page.rect
        page_w = page_rect.width
        page_h = page_rect.height
        half_w = page_w / 2

        # 原始左右裁切区域
        orig_clip_left = fitz.Rect(0, 0, half_w, page_h)
        orig_clip_right = fitz.Rect(half_w, 0, page_w, page_h)

        # ========== 左半页:向左偏移4pt ==========
        # 裁切区域左移offset_pt,防止页面边缘内容被裁掉
        clip_left_shift = fitz.Rect(
            orig_clip_left.x0 - offset_pt,
            orig_clip_left.y0,
            orig_clip_left.x1 - offset_pt,
            orig_clip_left.y1
        )
        left_single = new_doc.new_page(width=half_w, height=page_h)
        # 内容向右回填offset_pt,实现视觉左移效果
        left_target_rect = fitz.Rect(offset_pt, 0, half_w + offset_pt, page_h)
        left_single.show_pdf_page(left_target_rect, src_doc, page_idx, clip=clip_left_shift)
        # left_single.set_rotation(180)  # 按需开启旋转矫正颠倒

        # ========== 右半页:向右偏移4pt ==========
        # 裁切区域右移offset_pt
        clip_right_shift = fitz.Rect(
            orig_clip_right.x0 + offset_pt,
            orig_clip_right.y0,
            orig_clip_right.x1 + offset_pt,
            orig_clip_right.y1
        )
        right_single = new_doc.new_page(width=half_w, height=page_h)
        # 内容向左回填offset_pt,实现视觉右移效果
        right_target_rect = fitz.Rect(-offset_pt, 0, half_w - offset_pt, page_h)
        right_single.show_pdf_page(right_target_rect, src_doc, page_idx, clip=clip_right_shift)
        # right_single.set_rotation(180)  # 按需开启旋转矫正颠倒

        print(f"已拆分原第{page_idx+1}页 → 生成左(左移4pt)、右(右移4pt)2张单页")

    new_doc.save(output_pdf)
    new_doc.close()
    src_doc.close()
    print(f"\n✅ 分割偏移矫正完成!文件:{output_pdf}")

if __name__ == "__main__":
    if len(sys.argv) != 3:
        print("用法:python split_all_facing.py 输入.pdf 输出.pdf")
        sys.exit(1)
    split_all_facing_pdf(sys.argv[1], sys.argv[2])
    

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
 楼主| nancune 发表于 2026-7-2 20:17 |楼主
为了方便运行,在当前目录新建文本文件Split-A3TOA4-8pt.py(Python程序), 复制粘贴上面的Python程序代码。
在当前目录新建文本文件Split-A3TOA4-8pt.bat(批处理文件),
复制粘贴下面的文本,

[Bash shell] 纯文本查看 复制代码
@echo off
:: 将当前目录设置为批处理文件所在目录
cd /d "%~dp0"
python Split-A3TOA4-8pt.py "需要分割的A3文档.pdf" "生成的A4文档-偏移8pt.pdf"
pause


   # 偏移量:可按需修改 offset_pt = -8
3#
YYBF888 发表于 2026-7-3 05:09
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-7-3 05:17

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表