关于 X 昕 PDF 编辑器 处理 200 M 文件、删几页就直接报错崩溃这件事
问题表现


py 脚本处理
import fitz
import os
def redact_top_header(pdf_path, output_path):
"""
指定区域擦除,针对于PDF编辑工具无法识别 xx机构添加页眉页脚广告等区域的情况
"""
try:
doc = fitz.open(pdf_path)
rect = fitz.Rect(0, 0, 595, 69) # 指定区域
for page in doc:
# 加擦除框
page.add_redact_annot(rect, fill=(1, 1, 1))
# 每页应用,这是 1.24.1 正确用法
page.apply_redactions()
print(f"✅ 处理中:{page}")
doc.save(output_path, garbage=3, deflate=True)
doc.close()
print(f"✅ 处理完成:{os.path.basename(pdf_path)}")
except Exception as e:
print(f"❌ 失败:{pdf_path},原因:{e}")
def batch_process_pdfs(input_dir, output_dir):
os.makedirs(output_dir, exist_ok=True)
for fname in os.listdir(input_dir):
if fname.lower().endswith(".pdf"):
in_path = os.path.join(input_dir, fname)
out_path = os.path.join(output_dir, fname)
redact_top_header(in_path, out_path)
print("🎉 全部批量处理完成!")
def delete_pdf_pages(pdf_path, output_path, delete_pages):
"""
指定页码删除,针对于 PDF 编辑器编辑较大 PDF崩溃问题,某昕,做出来的产品【lj】,曾经接触过的贵司离职员工更【lj】(整天把自己大厂出来的挂嘴边,🤣🤣🤣 <大厂>)
"""
try:
doc = fitz.open(pdf_path)
# 转换为 0开始的页码,倒序删除
delete_pages_0 = [p - 1 for p in delete_pages if 1 <= p <= doc.page_count]
delete_pages_0.sort(reverse=True)
for page_num in delete_pages_0:
doc.delete_page(page_num)
doc.save(output_path)
doc.close()
print(f"✅ 删页完成:{os.path.basename(pdf_path)}")
except Exception as e:
print(f"❌ 删页失败 {pdf_path}:{str(e)}")
def batch_delete_pages(input_dir, output_dir, delete_pages):
os.makedirs(output_dir, exist_ok=True)
for fname in os.listdir(input_dir):
if fname.lower().endswith(".pdf"):
in_path = os.path.join(input_dir, fname)
out_path = os.path.join(output_dir, fname)
delete_pdf_pages(in_path, out_path, delete_pages)
DELETE_PAGES = [1, 2] # 要删除的页码
INPUT_FOLDER = r"D:\test"
OUTPUT_FOLDER = r"D:\test1"
# ==============================================================
if __name__ == "__main__":
batch_process_pdfs(INPUT_FOLDER, OUTPUT_FOLDER)
# batch_delete_pages(INPUT_FOLDER, OUTPUT_FOLDER, DELETE_PAGES)
总结
-
自悟。
夜雨聆风