使用 pypdf 创建图章不适用于简单的 PDF 文件,适用于其他人

Creating a stamp with pypdf does not work for simple PDF file, works for others

提问人:M3RS 提问时间:11/17/2023 最后编辑:M3RS 更新时间:11/18/2023 访问量:34

问:

我正在遵循此处的文档:https://pypdf.readthedocs.io/en/latest/user/add-watermark.html#watermark-underlaypypdf

我想将一个 PDF 叠加在另一个 PDF 上(或将文本叠加在 PDF 上)。下面的代码适用于某些更复杂的代码,但不适用于下面链接的简单代码。我看到的是基本 PDF,但没有看到叠加层。问题可能是什么?overlay.pdfoverlay.pdf

https://www.dropbox.com/scl/fo/ygqttuti4ed7cc2dz1c4u/h?rlkey=khdu0k5stkt205p4mcgca5n0i&dl=0

from pypdf import PdfWriter, PdfReader

stamp = PdfReader("overlay.pdf").pages[0]
writer = PdfWriter(clone_from="form_1099_nec_page_4.pdf")
for page in writer.pages:
    page.merge_page(stamp)

writer.write("merged.pdf")

这是使用以下代码生成的,以防相关。overlay.pdf

wkhtmltopdf_path = getattr(settings, 'WKHTMLTOPDF_PATH', None)
config = pdfkit.configuration(wkhtmltopdf=wkhtmltopdf_path)
with open('overlay.html', 'r') as html_file:
    html_content = html_file.read()

pdf_data = pdfkit.from_string(html_content, False, configuration=config)

with open('overlay.pdf', 'wb') as pdf_file:
    pdf_file.write(pdf_data)
蟒蛇 python-3.x pdf pypdf

评论

0赞 cards 11/17/2023
我下载了 pdf,并且能够使用 3.16.4 应用水印pypdf.__version__
1赞 M3RS 11/17/2023
嗯......最奇怪的事情。我尝试过使用您的版本,但它仍然不起作用,但与之前一样适用于另一个版本。非常感谢您的反馈,我将在不同的环境(linux,我在 mac 上)尝试此操作,看看问题是否仍然存在。overlay.pdf
0赞 cards 11/17/2023
在 Linux 上测试
0赞 M3RS 11/20/2023
在 Ubuntu 22.04 上对我不起作用。也许这与我们使用的PDF查看器有关,不知道。
0赞 mkl 11/20/2023
你有没有按照@KJ在他的回答中提出的建议进行尝试?over=True

答:

1赞 K J 11/18/2023 #1

好的,在使用图章时需要考虑一些潜在的问题,尤其是在表单上。

在这种情况下,源表单将不是真正的 PDF,而是 PDF 包装器中的透明文本 XFA。请看这里。enter image description here

蓝色字段是键盘或 FDF 文件中的文本叠加区域。

当通常使用此类受限制的“专用 Adobe PRO”文件时,允许阅读器版本对这些字段进行有限访问,以允许可见的叠加戳。

在这种情况下,使用了页面的阉割不透明图形复制品,因此我们看不到背景。因此,唯一的选择是将文本叠加(标记)到图像上。不能应用参考底图。因此,正确的语法将是

page.merge_page(stamp, over=True)

enter image description here

评论

0赞 M3RS 11/20/2023
谢谢你的回答!对于提供的示例,这对您有用吗?overlay.pdf
0赞 M3RS 11/20/2023
你是对的。这就是解决方案。
1赞 M3RS 11/20/2023 #2

我设法解决了这个问题,首先将基本 PDF () 转换为 JPG,然后将其转换回 PDF。form_1099_nec_page_4.pdf

正如 @K J 所提到的,问题可能出在 XFA 上,上述过程可能是删除 XFA 层。

编辑:反转哪个PDF是基础的,哪个是叠加的也可以解决问题,这是一个更好的解决方案。图像转换会降低数据质量。

评论

1赞 M3RS 11/20/2023
你是对的,反转文件可以解决问题,并且这样数据不会降级。