如何用脚本彻底删除PDF指定区域外内容?PyMuPDF转SVG残留问题
彻底删除PDF指定区域外内容的PyMuPDF解决方案
用PyMuPDF设置裁剪框只是视觉隐藏内容,PDF底层的图形元素并未被删除,转SVG时会被完整导出。要彻底清除区域外内容,需要遍历页面的所有可编辑元素,判断并移除目标区域外的部分。
以下是可直接运行的脚本方案:
import fitz # PyMuPDF def crop_pdf_permanently(input_path, output_path, crop_rect): # 打开原PDF doc = fitz.open(input_path) # 遍历每一页 for page in doc: # -------------------------- # 处理路径类图形(线条、形状等) # -------------------------- paths = page.get_drawings() page.clean_contents() # 清空原有内容,后续重新添加保留的元素 for path in paths: # 检查路径的包围盒是否与裁剪区域有交集 path_rect = fitz.Rect(path["rect"]) if crop_rect.intersects(path_rect): # 裁剪路径到目标区域 clipped_path = fitz.Path(path["items"]).clip(crop_rect) if not clipped_path.is_empty: page.draw_path(clipped_path, color=path["color"], fill=path["fill"], width=path["width"]) # -------------------------- # 处理文本块 # -------------------------- text_blocks = page.get_text("blocks") for block in text_blocks: block_rect = fitz.Rect(block[:4]) # 仅保留完全在裁剪区域内的文本块(若需要部分保留可调整判断逻辑) if crop_rect.contains(block_rect): page.insert_text(block_rect.tl, block[4], fontsize=block[5], color=block[6]) # -------------------------- # 处理图像 # -------------------------- images = page.get_images(full=True) for img in images: xref = img[0] img_rect = page.get_image_rects(xref)[0] if crop_rect.intersects(img_rect): # 裁剪图像到目标区域 pix = fitz.Pixmap(doc, xref) clipped_pix = pix.crop(crop_rect & img_rect) # 替换原有图像 page.insert_image(crop_rect & img_rect, pixmap=clipped_pix) else: # 删除区域外的图像 page.delete_image(xref) # 最后设置裁剪框(可选,确保视觉上的一致性) page.set_cropbox(crop_rect) # 保存处理后的PDF doc.save(output_path) doc.close() # 示例用法 if __name__ == "__main__": # 定义裁剪区域:x0, y0, x1, y1(根据实际需求调整) target_crop = fitz.Rect(50, 50, 550, 750) crop_pdf_permanently("input.pdf", "output_cropped.pdf", target_crop)
关键说明:
page.clean_contents()清空页面原有内容,避免保留未处理的元素- 路径元素通过
Path.clip()裁剪到目标区域,仅保留重叠部分 - 文本块默认保留完全在区域内的内容,若需要保留部分可见的文本,可调整判断逻辑为
crop_rect.intersects(block_rect)后提取可见文本片段 - 图像通过
Pixmap.crop()裁剪后重新插入,完全在区域外的直接删除
处理后的PDF转SVG时,区域外的元素会被彻底移除,导入Blender等软件后不会出现多余的边角线条。
内容的提问来源于stack exchange,提问作者Xora-dev
相关产品推荐
相关产品推荐

