求Python实现PDF转DIN-A4并添加3mm黑色边距的解决方案
解决方案:用Python处理PDF的缩放与黑边添加
可以使用**PyMuPDF(fitz)**库实现需求,这个库对PDF的页面操作支持非常灵活,步骤如下:
步骤说明
- 单位转换:PyMuPDF以点(pt)为单位,先将毫米转换为点(1mm ≈ 2.83465pt)。
- 页面缩放:检查原始PDF页面尺寸,将非A4页面按比例缩放到A4(210×297mm)尺寸,确保内容完整显示并居中。
- 添加黑边:创建更大尺寸的页面(216×303mm),填充黑色背景后,将缩放后的A4页面居中放置,形成3mm的黑色边距。
实现代码
import fitz # PyMuPDF # 毫米转点的转换系数 mm_to_pt = 2.83465 # 定义所有尺寸参数(mm) a4_w, a4_h = 210, 297 final_w, final_h = 216, 303 margin = 3 # 转换为pt单位 a4_w_pt = a4_w * mm_to_pt a4_h_pt = a4_h * mm_to_pt final_w_pt = final_w * mm_to_pt final_h_pt = final_h * mm_to_pt margin_pt = margin * mm_to_pt # 输入输出路径 input_pdf = "你的输入文件.pdf" output_pdf = "处理后的文件.pdf" # 创建输出PDF文档 output_doc = fitz.open() with fitz.open(input_pdf) as input_doc: for page in input_doc: # 获取当前页面尺寸 curr_w, curr_h = page.rect.width, page.rect.height # 计算适配A4的缩放因子(保持宽高比) scale_x = a4_w_pt / curr_w scale_y = a4_h_pt / curr_h scale = min(scale_x, scale_y) # 创建临时A4页面,放入缩放后的内容并居中 temp_page = output_doc.new_page(width=a4_w_pt, height=a4_h_pt) temp_page.show_pdf_page(temp_page.rect, input_doc, page.number, scale=scale) # 创建最终页面,填充黑色背景 final_page = output_doc.new_page(width=final_w_pt, height=final_h_pt) final_page.draw_rect(final_page.rect, fill=(0, 0, 0)) # 黑色填充 # 将A4页面居中放到最终页面(预留边距) a4_in_final_rect = fitz.Rect( margin_pt, margin_pt, final_w_pt - margin_pt, final_h_pt - margin_pt ) final_page.show_pdf_page(a4_in_final_rect, output_doc, temp_page.number) # 删除临时页面 output_doc.delete_page(temp_page.number) # 保存结果 output_doc.save(output_pdf) output_doc.close()
关键细节
- 缩放逻辑:使用最小缩放因子确保原始内容完整适配A4,不会被裁剪;如果需要强制拉伸至A4(允许变形),可以把
scale = min(scale_x, scale_y)改成scale = max(scale_x, scale_y)。 - 黑边实现:通过先给大尺寸页面填充黑色,再嵌入A4页面,自然形成四周的黑色边距。
- 兼容性:支持横向、纵向的原始PDF页面,也支持多页PDF批量处理。
内容的提问来源于stack exchange,提问作者Scamander 1920
相关产品推荐
相关产品推荐

