提问人:M3RS 提问时间:11/17/2023 最后编辑:M3RS 更新时间:11/18/2023 访问量:34
使用 pypdf 创建图章不适用于简单的 PDF 文件,适用于其他人
Creating a stamp with pypdf does not work for simple PDF file, works for others
问:
我正在遵循此处的文档:https://pypdf.readthedocs.io/en/latest/user/add-watermark.html#watermark-underlaypypdf
我想将一个 PDF 叠加在另一个 PDF 上(或将文本叠加在 PDF 上)。下面的代码适用于某些更复杂的代码,但不适用于下面链接的简单代码。我看到的是基本 PDF,但没有看到叠加层。问题可能是什么?overlay.pdf
overlay.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)
答:
好的,在使用图章时需要考虑一些潜在的问题,尤其是在表单上。
在这种情况下,源表单将不是真正的 PDF,而是 PDF 包装器中的透明文本 XFA。请看这里。
蓝色字段是键盘或 FDF 文件中的文本叠加区域。
当通常使用此类受限制的“专用 Adobe PRO”文件时,允许阅读器版本对这些字段进行有限访问,以允许可见的叠加戳。
在这种情况下,使用了页面的阉割不透明图形复制品,因此我们看不到背景。因此,唯一的选择是将文本叠加(标记)到图像上。不能应用参考底图。因此,正确的语法将是
page.merge_page(stamp, over=True)
评论
overlay.pdf
我设法解决了这个问题,首先将基本 PDF () 转换为 JPG,然后将其转换回 PDF。form_1099_nec_page_4.pdf
正如 @K J 所提到的,问题可能出在 XFA 上,上述过程可能是删除 XFA 层。
编辑:反转哪个PDF是基础的,哪个是叠加的也可以解决问题,这是一个更好的解决方案。图像转换会降低数据质量。
评论
pypdf.__version__
overlay.pdf
over=True