如何使用pdfrw合并两个PDF文件避免内容重叠,实现垂直拼接
问题原因
现有代码逻辑是将两个PDF对应页面的内容直接叠加在同一画布的相同坐标区域,因此会出现内容重叠,而非预期的垂直拼接效果。
修复方案
要实现垂直堆叠,需要先计算两个待拼接页面的总高度,创建对应尺寸的新画布,再将两个页面内容分别渲染到新画布的上下对应位置。
可运行代码
import os import pdfrw dirPATH = r'c:\users\<username>\projects\concat_pdfs' pdf1 = os.path.join(dirPATH, 'PDF1.pdf') pdf2 = os.path.join(dirPATH, 'PDF2.pdf') def concat_pdfs(pdf1, pdf2, output): reader1 = pdfrw.PdfReader(pdf1) reader2 = pdfrw.PdfReader(pdf2) writer = pdfrw.PdfWriter() # 逐页垂直拼接,假设两个PDF页数一致,页数不同可自行调整遍历逻辑 for page1, page2 in zip(reader1.pages, reader2.pages): # 获取两个页面的宽高 w1 = float(page1.MediaBox[2]) h1 = float(page1.MediaBox[3]) w2 = float(page2.MediaBox[2]) h2 = float(page2.MediaBox[3]) # 新页面宽度取最大值,高度为两个页面高度之和 new_w = max(w1, w2) new_h = h1 + h2 # 创建新页面,先添加上半部分的page1内容 merge = pdfrw.PageMerge() # PDF坐标原点在左下角,page1向上偏移h2即可放在上半区 merge.add(page1, offset=(0, h2)) # 添加下半部分的page2内容 merge.add(page2, offset=(0, 0)) new_page = merge.render() # 设置新页面的尺寸 new_page.MediaBox = [0, 0, new_w, new_h] writer.addpage(new_page) writer.write(output) # 注意参数对应你定义的路径变量,原代码此处参数名存在错误 concat_pdfs(pdf1, pdf2, 'result.pdf')
说明
如果拼接后上下顺序不符合预期,调整add方法的offset参数第二个值即可;如果需要将多个页面拼接到同一页,只需累加高度依次设置偏移量即可。
内容的提问来源于stack exchange,提问作者Lee_Str
相关产品推荐
相关产品推荐

