使用pdftk将图像添加到pdf

24

你好,我正在使用 pdftk 根据提交的表单生成 PDF。

我已经把一切都搞定了,直到在这里添加签名图片时出现问题。我正在使用 Signature Pad,它能很好地生成签名图片文件。现在,我正在尝试将该签名图片添加到 PDF 中。是否有人知道是否可以使用 pdftk 做到这一点?我没有看到这个选项。或者,是否可能将图片附加到我在 PDF 中拥有的表单字段?


1
这不是与https://dev59.com/3HnZa4cB1Zd3GeqPsJzd密切相关吗? - Jakob
谢谢,看起来非常有前途,我会尝试并测试它,但唯一的问题是,我想把图像放在页面中间的特定位置,我不知道这样做会有多好。 - Brad Hazelnut
如果图像位置固定,则放置在哪里并不重要。只需使用“--offset”部分将其放置在所需位置即可。 - Jakob
我一直在尝试解决这个问题,我有一个三页的PDF文件,但是当我运行它时,它会在所有三页上显示,而我只想在最后一页显示,我该怎么做? - Brad Hazelnut
如果您只想在一页上放置图像,我会将您的三页文档拆分成两个文档,在一个文档上运行图章,然后重新组合这两个页面。PDFtk也可以做到这一点。 - Suzanne
4个回答

53

先将图像转换为PDF格式

convert image.png image.pdf

然后使用另一个免费工具pdfjam,按比例放大并偏移图像。

pdfjam --paper 'a4paper' --scale 0.3 --offset '7cm -12cm' image.pdf

然后使用 pdftk 工具合并这两个 PDF 文件。

pdftk text.pdf stamp image.pdf output combined.pdf

如果您需要将图片定位并添加到通用PDF中的一页,则可能需要下载STAMPtk,但这需要付费。

您可以从这里下载STAMPtk。

希望这能帮到您!


5
为Linux添加安装说明(非常简单)。PDFjam: apt-get install texlive-extra-utils,PDFtk: apt-get install pdftk - exmaxx
3
Mac 安装说明:PDFjambrew install homebrew/tex/pdfjamPDFtk:目前不支持 Homebrew,但你可以在 SO 上找到安装指南,也可以使用官方下载页面 https://www.pdflabs.com/tools/pdftk-server/ 或这个链接(如果你使用的是 OSX 10.11.4,而 PDFtk 只是冻结并没有任何反应)https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/pdftk_server-2.02-mac_osx-10.11-setup.pkg。 - exmaxx
对于在美国的用户,您可以将a4paper替换为letterpaper以获得8.5"x11"大小的纸张,这来自于latex geometry包。 - gene_wood
2
我经常看到这种类型的答案,但对我来说,更直接的方法似乎是将PDF分成几页,签署您想要的页面,然后重新组合? - lmat - Reinstate Monica
1
实际上,在pdfjam之后,使用pdftk text.pdf cat 5 output page5.pdf来提取第5页, 然后使用pdftk page5.pdf stamp signature.pdf output signed.pdf, 接着使用pdftk A=text.pdf B=signed-page5.pdf cat A1-4 B A6-end output signed-text.pdf。 否则,请参见@Tanupryia下面的评论以添加空白页signature.pdf。 - Christophe Priieur

8
在我们的案例中,我们需要在PDF文件中添加动态签名。我已经使用pdftk和imagemagick库来实现了它。(需要安装pdftk和imagemagick)
  1. 首先将图像转换为PDF如下: (Windows用户请使用magick代替convert)

exec("convert signature-image -resize 26% -transparent white -page a4+25+102 -quality 75 outputs/stamp.pdf");

描述:

  • resize:调整图像大小。
  • transparent:使图像背景透明。
  • page:将页面设置为a4,并且(25,102)设置了图像PDF相对于左侧和顶部的位置。

2.然后执行以下命令:

exec("pdftk main.pdf multistamp stamp.pdf output outputs/final.pdf");


有没有参数可以在 pdftk 或 convert 中添加图像到任意页面(比如 PDF 的第 4 页)? - Nathan Perrier
2
为此,您需要添加3个空白的PDF并将其与stamp.pdf合并。 - Tanupriya
有没有可能在页面的水平和垂直中心放置印章? - rahim.nagori
还有没有类似的方法可以向PDF文件添加页码? - rahim.nagori

7

Python的pdfjinja

https://github.com/rammie/pdfjinja

这个库能够让你在PDF模板中添加图片到签名或按钮对象,无需合并或向量定位信息。

1. 向你的PDF模板添加签名元素

Adobe Pro允许创建和修改PDF可填写表单。转到工具>表单>编辑,然后从添加新字段下拉列表中选择数字签名。

放置后,转到数字签名元素的属性。

Property Settings

在提示工具的属性中添加内容。

{{ Sig | paste }}

保存并关闭。

2. 将您的签名图像保存为jpg或png格式

您可能需要一个单独的方法来检索签名作为图像,并将其放置在可访问的文件夹中。

3. 在您的Python脚本中添加方法

from pdfjinja import PdfJinja

pdf_jinja_object = PdfJinja("path_to_pdf_template")

filled_out_pdf = pdf_jinja_object({
    'firstName': 'John',
    'lastName': 'Smith',
    'sig': 'path_to_signature_image',
})

filled_out_pdf.write(open("output_file.pdf", 'wb'))

这将为您提供一个带有您的签名图像的表单,放置在模板中创建的位置。

虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分并提供参考链接。如果链接页面更改,仅链接的答案可能会失效。- 来自审查 - blurfus
谢谢,我添加了一个3步走的演示来帮助。 - goWithSwagger
这应该是正确的答案。生成signature.pdf更像是一个可笑的玩笑,而不是一个真正的答案。而付费获取一些脚本来做那个?那真是太搞笑了。 - pmourelle
微小的更正:在“sig”上,值应该是图像的路径:os.path.join(dirname, './sig.png'),尽管我无法使其工作。 - pmourelle
好的,我更新了那部分。看看能否设置一个断点来查看“Sig”属性。它应该具有您想要的确切图像的完整路径。 - goWithSwagger

3

首先将图片转换为PDF格式,命令如下:(Windows系统使用magick代替convert)

exec("convert signature-image -resize 26% -transparent white -page a4+25+102 -quality 75 outputs/stamp.pdf");

说明:

resize:调整图片大小。 transparent:使图片背景透明。 page:设置页面为A4大小,(25,102)指定图片PDF在左上角的位置。 2.然后执行以下命令:

exec("pdftk main.pdf multistamp stamp.pdf output outputs/final.pdf");

若要将签名定位到特定位置,请在签名PDF之前添加一些空白PDF,如下所示:

exec("convert signature-image -resize 26% -transparent white -page a4+25+102 -quality 75 outputs/stamp.pdf");
            exec("convert xc:none -page A4 outputs/blank1.pdf");
            exec("convert xc:none -page A4 outputs/blank2.pdf");
exec("convert xc:none -page A4 outputs/blank3.pdf");
            exec("pdftk outputs/blank1.pdf outputs/stamp.pdf outputs/blank2.pdf  outputs/blank3.pdf cat output outputs/sign.pdf");
          exec("pdftk main.pdf multistamp outputs/sign.pdf output outputs/final.pdf");

添加一些描述。 - Mathews Sunny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接