Python PyPDF2 合并旋转页面

标签 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

如您所见,页面旋转了 270 度。

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

from six import BytesIO
from PyPDF2 import PdfFileWriter, PdfFileReader
from reportlab.lib.units import inch
from reportlab.lib.pagesizes import A4
from reportlab.pdfgen.canvas import Canvas

# Set page rotation
rotation_angle = 270
# Render watermark layer
stream = BytesIO()
c = Canvas(stream, pagesize=A4)
if rotation_angle:
    c.setPageRotation(rotation_angle)
c.drawString(1 * inch, 8 * inch, "Hello World! " * 3)
c.showPage()
c.save()

stream.seek(0)
overlay = PdfFileReader(stream)
source = PdfFileReader(u'test.pdf')
writer = PdfFileWriter()

# Merge sorce and watermark pages
page0 = source.getPage(0)
if rotaion_angle:
    page0.mergeRotatedPage(overlay.getPage(0), rotation_angle, True)
else:
    page0.mergePage(overlay.getPage(0))
writer.insertPage(page0, 0)

# Write result to file
with open('merged.pdf', 'wb') as fp:
    writer.write(fp)
print "Done!"

这样,对于 rotation_angle = 270 我得到了下一个结果:screenshot

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

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

最佳答案

其实我也发现了类似的问题和解决方案here

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

# 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)

方法mergeRotatedAroundPointPage发挥作用。

关于Python PyPDF2 合并旋转页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23631755/

相关文章:

pdf - 图像文件到 PDF 流转换

c# - 使用 iTextSharp 复制 PDF 表单

javascript - 将图表保存为图像或 pdf

python - ModuleNotFoundError : No module named <modulename> after pip install

Python稀疏矩阵逆和拉普拉斯计算

pdf - 将 EPS 转换为 PNG 并指定宽度/高度

php - TCPDF如何防止额外的空白页

python - SQLAlchemy 插入数据与关联表的多对多关系

python - 如何将 3 个列表合并到一个字典中(具有唯一元素)

css - Flying Saucer/iText PDF 找不到 css 文件