Python PyPDF2 合并旋转页面

Max*_*kov 5 python pdf pdf-generation reportlab pypdf

我正在使用 python ReportLab canvas 生成带有水印的覆盖文档,以将其合并到源 pdf 文档中(使用PyPDF2)。最近,我遇到了包含旋转页面的文档的问题(pdf 中的页面对象存在 /Rotate 键)。该文档在设备和打印机上看起来没问题。但结果(合并)文档包含针对源文档旋转的水印。

所以源页面的 pdf 结构如下:

6 0 obj
<</Length 45>>
stream
q
1 0 0 1 2 4 cm
799 0 0 603 0 0 cm
/x5 Do
Q

endstream
endobj
7 0 obj
<</Type/Page/Parent 1 0 R
/Resources << /XObject << /x5 5 0 R >> >>
/MediaBox [0 0 792 612]
/Rotate 270/Contents 6 0 R
>>
endobj
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,页面旋转了 270 度。

我使用类似的脚本来生成和合并水印和源页面:

6 0 obj
<</Length 45>>
stream
q
1 0 0 1 2 4 cm
799 0 0 603 0 0 cm
/x5 Do
Q

endstream
endobj
7 0 obj
<</Type/Page/Parent 1 0 R
/Resources << /XObject << /x5 5 0 R >> >>
/MediaBox [0 0 792 612]
/Rotate 270/Contents 6 0 R
>>
endobj
Run Code Online (Sandbox Code Playgroud)

这样rotation_angle = 270我就得到了下一个结果:截图

对于rotation_angle = 0(根本不关心旋转)我有:截图

如何更改脚本来解决这种情况?

Max*_*kov 4

其实我在这里发现了类似的问题和解决方案

所以我用下一种方式改变了代码

# Merge source and watermark pages
page0 = source.getPage(0)
over0 = overlay.getPage(0)
if rotaion_angle:
    page0.mergeRotatedAroundPointPage(
        over0,
        rotaion_angle,
        over0.mediaBox.getWidth() / 2,
        over0.mediaBox.getWidth() / 2)

    #page0.mergeRotatedPage(overlay.getPage(0), rotaion_angle, True)
else:
    page0.mergePage(over0)
Run Code Online (Sandbox Code Playgroud)

方法mergeRotatedAroundPointPage可以解决这个问题。

  • 这解决了我的问题,但是从 v1.23 开始,mergeRotatedAroundPointPage 已重命名为 mergeRotatedTranslatedPage。更改日志中没有提及这一点,以防其他人想知道原因。请参阅问题:https://github.com/mstamy2/PyPDF2/issues/174 (4认同)