我有一份书面签名的扫描件,需要将其应用于签名栏中的某些文档。我过去一直在Windows上执行此操作,但现在只有Linux。

这可能吗?如何在Linux(Gnome 3)中将签名图像添加到PDF文件?

#1 楼

使用Xournal可以注释PDF并添加自定义图像(例如透明的PNG)。尽管它用于记录便笺和绘图,但它也可以注释PDF。

在Ubuntu上:


通过Ubuntu软件中心安装Xournal
打开Xournal
从“文件”菜单中选择“注释PDF”,然后选择要签名的PDF文件。
单击工具栏中的“图像”按钮(看起来像一个人的轮廓)。
单击文档。文件浏览器对话框将打开。
选择签名的PNG图像。
调整图像的大小并将其放置在PDF上。
从“文件”菜单中选择“导出为PDF”。

更多信息,请访问http://www.howtogeek.com/215485/sign-pdf-documents-without-printing-and-scanning-them-from-any-device/

评论


Xournal确实存在问题-当我最终设法导入签名并导出PDF时,扫描的PDF变得模糊了-我的签名是生成的pdf中唯一清晰的元素。

–安蒂·哈帕拉(Antti Haapala)
17年1月2日在22:00

我只是在arch的xournal上进行了此操作,效果很好,但是背景pdf是来自文档,而不是扫描。也许相关?

–布兰登·库岑斯基
17年7月3日在8:39



在Ubuntu 16.04上也为我工作。作为旁注,您还可以使用xournal注释PDF,方法是在PDF之上的不同层中添加文本(例如,用full表示完整的表单)。

– jotadepicas
17年9月10日在0:52

嗯。所以实际上可以,但是薄荷上的其他pdf程序不会保存文本字段...

–门多塔
18-4-26在17:47



正如@AnttiHaapala所发现-这使生成的PDF非常模糊。我不推荐这种方法。

–亚当·巴恩斯(Adam Barnes)
19/12/16在13:19

#2 楼

令我惊讶的是,没有找到此页面上未提及的适用于Linux的顶级免费办公软件。 LibreOffice Draw将打开PDF并允许您插入图像。如果您的签名文件已经以透明背景的PNG形式存在于文件系统中,则可以轻松将其放置到页面上,更改大小并将其移动到Draw中。 Draw默认情况下会将文档另存为ODG,因此您需要将修改后的文档导出为PDF。

评论


此方法不会将页面变成图像是毫无价值的,因此最终结果不会造成潜在的质量损失。

– davidovitch
20 May 27 '10:14

我尝试用Draw和PDF进行绘图,但必须插入签名,但是找不到文档中使用的字体,这些字体随后被替换了,并且很多图像看起来都变形了。所以我改用Xournal,在我的情况下效果很好。

– kasimir
20年8月12日在9:03

LibreOffice Draw更改了许多字体的格式(可能是系统中不可用的字体)。结果,文本溢出页面边界。

–Paul Rougieux
20年9月4日在9:44

Draw打开PDF,但增加了字体大小,使文档与其自身重叠。没有简单的方法来更改字体。

– drabus
20 Dec 15'在10:31

这通常对我有用,但是今天我打开了一个pdf文件,将随机字母大写,并且图像完全消失了。

–迈克尔
20 Dec 30 '20:57

#3 楼

很多人推荐Xournal,但我发现它可以作为我不能使用的Gimp版本使用。因此,如果您熟悉Gimp,我建议您尝试一下。


您应该有一个带有签名的文件(甚至是用手机或网络摄像头拍摄的照片),还有一个带有要签署的文件。后者将采用PDF格式,可以由Gimp打开。
如果白色不够白,请在签名上施加阈值
如果文档的背景将白色转换为签名中的alpha不是白色
使用Gimp打开文档
在文档顶部打开签名作为新图层(文件->作为图层打开)
调整大小和位置
合并图层
导出为PDF

我需要签署单页文档时定期进行此操作,这大约需要五分钟。不幸的是,如果您需要例如对多页文档的每一页进行签名,则此方法将无效。在后一种情况下,我只是打印,签名并再次扫描!

评论


我尝试了上述所有解决方案,但都付出了很多努力才失败了。 xournal不能真正正常工作,它的用户界面中似乎有错误,并且在导入图像后我无法缩放或移动图像。 xv没有编译,需要大量的C代码补丁,然后最终也不起作用。 updf或其ubuntu PPA不再存在。 (在ubuntu xenial 2016年12月测试)gimp是行之有效的方法,谢谢!

–克里斯·贝克(Chris Beck)
2016年12月12日在21:04



这是一个很好的解决方案!确实需要一些图像编辑技能才能创建具有透明背景的签名,并在将其作为图层添加到文档时缩放图像。顺便说一句,日期也可以添加到工作的XCF文件中,只是有点麻烦(文本大小和位置)。由此产生的PDF导出是完全可以接受的!

–汤姆·罗素
18年6月12日在17:53

如果文档有多个页面:将页面导入为图层(默认选项),将文档另存为“ .mng”(意味着多个png),只需在gimp上添加.mng扩展名和“导出为”选项即可,现在进入命令行并执行:转换original_name.mng output_name.pdf。就这样。顺便说一句,如果输出分辨率很低,请在开始导入pdf时尝试扩大pdf图像的尺寸:尝试使用“ 2000”之类的宽度。导出为MNG时,不要忘记将选项“压缩级别”检查到最大,这样最终文件就不会太重。

–迭戈·安德烈斯·迪亚兹·埃斯皮诺萨(DiegoAndrésDíazEspinoza)
18年9月24日在18:05

您只需此答案以及此答案(onlinesignature.com/es/draw-a-signature-online)

–Alfergon
19年8月28日在16:03

该解决方案的主要问题是它将PDF呈现为图像。如果原始PDF包含可以选择和复制的嵌入文本或表格,则所有这些都将丢失。因此,如果源是扫描的图像PDF,这是一个不错的选择,但是如果您想在源上保留非图像PDF功能,请使用Xournal。另外-GIMP中PDF的默认渲染分辨率为100 ppi,这非常低,导致文本模糊-至少使用600。

–古斯
20年7月5日在12:19

#4 楼

值得一提的是Xournal,它具有不错的用户界面,并允许向PDF文件添加文本,图像和手写笔记。我遇到的唯一问题是它似乎不能很好地处理本机PDF格式的文本。

#5 楼

我找到了该脚本,您可以对其进行修改以将签名附加到现有的PDF文件。


http://emmanuel.branlard.free.fr/work/linux/dev/SignPDF/ SignPDF

您也可以从以下pastebin URL下载它:


http://pastebin.com/9TL5pvBA

有还有关于AskUbuntu的问答,它还有许多其他方法可以做到这一点。问答标题为:如何在现有的pdf文件上放置图片?。

评论


@Freedom_Ben-同样,如果您有兴趣,我发现了如何使用证书而不只是PNG对PDF进行签名。 LMK。

–slm♦
2013年8月7日在22:44



问题是它创建的页面图像质量很差。 :/另一个答案(关于updf)效果更好。 :)

–odinho-费尔蒙特
2014年6月4日,11:11



@slm:非常正确。但是它仍然会创建页面的/ picture /,而不是像updf那样仅在图像上加盖印记。 pdftk也可以执行这样的操作,但是需要一个类似此处的驱动程序脚本。

–odinho-费尔蒙特
2014年6月4日上午11:16

之前,我曾使用pdftk和reportlab做类似的事情(在pdf之上合并邮件):stackoverflow.com/questions/356502/…-费了很大的力气才能找到有效的方法。在那里处理PDF的方法非常繁琐。

–odinho-费尔蒙特
2014年6月4日12:07

有没有不使用xv的版本吗?安装xv太困难了,它不是免费软件...

–克里斯·贝克(Chris Beck)
16 Dec 12'在19:09

#6 楼

我在uPdf方面有相当不错的经验。

安装

sudo add-apt-repository ppa:atareao/updf
sudo apt-get update
sudo apt-get install -y updf


然后通过在Python脚本中编辑2行来修复错误。

用法

启动uPdf,选择“添加图像”工具,在要签名通过的区域周围绘制一个矩形,然后选择带有签名的图像文件。具有透明背景的PNG效果最好。

评论


大声笑,关于编辑Python的两行真是太有趣了。因为我是创建该评论的人。在这里,我正在寻找一种再次签名PDF的方法,对于在Intarweb上乐于助人的人感到非常高兴:)

–odinho-费尔蒙特
2014年6月4日,11:12

看起来最新版本是针对Ubuntu Quantal的。使用“无法提取...”在15.04(Vivid)错误上添加存储库。

– Ponkadoodle
15年6月16日在20:20

@Wallacoloo该软件包仅适用于Raring和Saucy。对于其他分发,您需要在/etc/apt/sources.list.d中创建的第一个文件中手动更改分发。

– kynan
15年6月16日在22:31

使用精确或量子分布在Wily 15.10上启动屏幕后崩溃。

–乔纳森·诺伊费尔德
16年1月6日在1:33

在Debian Buster上为我工作。其他答案(如自定义脚本)使用pdftk(目前不可用),并且Xournal不在存储库中。 Updf下载页面或直接下载链接。使用sudo dpkg -i file.deb安装; sudo apt install -f,然后按照答案中所述编辑Python代码。

–吕克
18年7月6日在10:38



#7 楼

在将自己的签名命令放入shell脚本时,我正在寻找一种交互式选择签名应去的区域的方法。幸运的是,我发现了这个问题,Emmanuel Branlard的脚本包含有关如何执行此问题的想法(使用xv)。我实现了以下几点:


使用ImageMagicks display代替xv

使用stdbuf -oL-update选项进行实时预览
覆盖签名使用pdftk stamp防止图像质量下降
仅从pdf文件中提取特定页面
使用gpg解密签名

使用pdftk加密签名的pdf文件

/>清理包含带有wipe签名的中间文件


所以这是代码:

 #!/bin/env zsh

#dependencies: pdftk, ImageMagick, gpg, wipe, openssl

signature=~/PGP/signature.png.gpg

f=${1%.pdf}
page=
density=144
bo=0.2 #baseline overlap in relation to y-size of the signature

pagecount=$(pdftk $f.pdf dump_data | grep NumberOfPages | sed "s/.*: //")
#sign on last page by default
if [ -z "$page" ]; then page=$pagecount; fi

function cleanup
{
    echo "Cleaning up..."
    rm $f.$page.pdf
    wipe $f.$page.signature.pdf $f.$page.signed.pdf $f.signed.pdf signature.png
}
trap cleanup EXIT

echo "Signing document $f.pdf on page $page."

echo "Decrypting signature..."
gpg -d $signature > signature.png
identity=$(identify -format "%w,%h,%x,%y" signature.png)
sdata=(${(s/,/)identity})

echo "Please give the signature area with two clicks and finish by pressing ‘q’!"

#extract page
pdftk $f.pdf cat $page output $f.$page.pdf
cp $f.$page.pdf $f.$page.signed.pdf
size=$(identify -format "%wx%h" $f.$page.pdf)

#select signature area
display -density $sdata[3]x$sdata[4] -immutable -alpha off -update 1 -debug X11 -log "%e" -title "sign $f.pdf#$page" $f.$page.signed.pdf 2>&1 >/dev/null | \
    grep --line-buffered "Button Press" | \
    stdbuf -oL sed -r "s/^.*\+([0-9]+)\+([0-9]+).*$/,/" | \
    while read line
do
    p1=($p2)
    p2=(${(s/,/)line})

    if [ -n "$p1" ]
    then
        p=(0 0)
        if (( p1[1] < p2[1] )); then dx=$((p2[1]-p1[1])); p[1]=$p1[1]; else dx=$((p1[1]-p2[1])); p[1]=$p2[1]; fi
        if (( p1[2] < p2[2] )); then dy=$((p2[2]-p1[2])); p[2]=$p1[2]; else dy=$((p1[2]-p2[2])); p[2]=$p2[2]; fi
        dy=$((dy*(1+bo)))

        if (( $dx*$sdata[2] > $sdata[1]*$dy ))
        then
            resize=$(((dy+0.0)/sdata[2]))
            p[1]=$((p[1]+(dx-resize*sdata[1])/2))
        else
            resize=$(((dx+0.0)/sdata[1]))
            p[2]=$((p[2]+(dy-resize*sdata[2])/2))
        fi

        echo "Inserting signature..."
        convert -density $density -size $size xc:transparent \( signature.png -resize $((resize*100))% \) -geometry +$p[1]+$p[2] -composite $f.$page.signature.pdf
        pdftk $f.$page.pdf stamp $f.$page.signature.pdf output $f.$page.signed.pdf

        unset p1 p2
    fi
done

if [ -z "$p" ]
then
    echo "You have to click two times. Aborting..."
    exit 1
fi

echo "Joining PDF pages..."
sew=( pdftk A=$f.pdf B=$f.$page.signed.pdf cat )
if (( page > 1 )); then
    sew+=A1-$((page-1))
fi
sew+=B
if (( page < pagecount )); then
    sew+=A$((page+1))-end
fi
sew+=( output $f.signed.pdf )
$sew

echo "Encrypting PDF file..."
pdftk $f.signed.pdf output $f.signenc.pdf user_pw PROMPT owner_pw $(openssl rand -base64 32) allow AllFeatures
 


评论


这对我不起作用,imagamagick加载但仅显示启动屏幕。

–安德烈亚斯(Andreas)
16年7月27日在20:41

#8 楼

在Debian(Bullseye)上,我发现最简单的(?)免费方法是使用Scribus 1.5.5,它可以轻松导入PDF(在较早的发行版中也可能如此): PDF,然后在要签名的位置创建一个图像框,选择签名文件,根据需要调整大小,然后导出为新的PDF(当然,您可以使用文本框放置必要的文本,例如日期等)。最终与使用GIMP或类似工具没有什么不同,但是如果您熟悉Scribus,则只需几秒钟即可完成。我刚刚完成了两次用于注销帐户的操作,这就是我到这里结束的方式;)

评论


与此处的其他图形应用程序相比,优点是对多页文件的处理非常合理。

–达特穆尔汤姆
19年11月30日在13:26

在Scribus 1.5.5中运行良好,但1.4.9尚未运行。

– Erik
19/12/4在10:59

#9 楼

由于有些用户在输出文件中提到了错误(签名清晰但源文件模糊),因此我建议使用xournalpp(xournal ++)代替xournal。
我没有遇到任何问题。

它是包装在某些发行版中(在Arch中,pacman -Ss xournal仅显示xournalpp)并按预期工作。

从Arch Wiki:


Xournal ++(xournalpp)的后继产品目前正在开发的Xournal。如果您想要更新版本的Xournal,则可以尝试一下。它目前很稳定,几乎没有导致崩溃的错误。


链接到资源库:
https://github.com/xournalpp/xournalpp

评论


它似乎最近已添加到Extra回购中。

–跟随
20年8月23日在9:56

#10 楼

为了完整起见,有一个替代脚本可以执行此操作,与迄今为止提到的脚本相比,该脚本不会将pdf转换为(低质量)图像:https://github.com/martinruenz/signpdf

我在其他解决方案上的经验是:



Xournal弄乱了pdf(尽管从源代码构建后似乎可以工作)
脚本SignPDF将pdf转换为图像,并显着降低质量。它还具有麻烦的依赖性(xv)
我没有尝试过gimp和updf选项
最后我在VM中使用了Acrobat Reader,因为我还必须填写各种表格


评论


感谢您的分享。我将检查您的脚本。我在Xournal上取得了非常好的成功,因此您必须确保不要导出到原始文件名,因为这可能会导致问题。如果您选择要导出到的新名称(这样就不会覆盖原始的pdf),则可以避免此错误。

– Freedom_Ben
18年6月9日在3:15



那不能解决@Freedom_Ben的模糊性问题

–亚当·巴恩斯(Adam Barnes)
19年12月16日在13:21

#11 楼

Okular PDF查看器内置了此注释。
打开要签名的PDF,在左侧的栏中选择评论,然后在弹出菜单中选择“手绘线”的第三个选项。画出您的签名。如果要用黑色墨水而不是霓虹绿,请从菜单中选择“设置”,选择“配置Okular”,然后选择左侧的“注释”按钮。从选项中选择“手绘线”,然后选择“编辑”按钮。您可以在此处调整线条粗细和颜色。点击应用并享受。

评论


就我而言,我还需要“打勾”菜单项“工具”->“查看”,以查看“徒手画线”和“内联注释”(添加普通文本)菜单。然后,我可以右键单击绘制的东西,然后选择“属性”以编辑颜色,将边框宽度设置为0,将“对齐”设置为“中心”,然后拖动线条以调整边框高度。

–水果
20 Mar 31 '20 at 13:50

#12 楼

受到bodo答案的启发,我创建了一个简化版本,希望其他人可以轻松地重用/修改此版本,以签署单页pdf。我不确定这是否也适用于多页pdf。
将以下脚本另存为sign.sh。给定一些名为origin.pdf的pdf文件,您想添加一张图片,例如签名的png,在pdf中的某个位置,您可以像下面这样运行脚本: pdf。
#!/bin/bash -x

density=144

f=
s=
p=
x=
y=

# determine the size of the original pdf
pdfsize=$(identify -format "%wx%h" "$f.pdf")
# just in case someone needs this: get the size of the signature image
#identify -format "%w,%h,%x,%y" "$s"

# create a new pdf with the same size as the original pdf with transparent background and the signature image positioned at the final position
convert -density $density -size $pdfsize xc:transparent \( "$s" -resize $p% \) -geometry +$x+$y -composite "$f.1.signature.pdf"
# stamp the original pdf with the new signature template pdf
pdftk "$f.pdf" stamp "$f.1.signature.pdf" output "$f.1.signed.pdf"
# remove the signature pdf
rm "$f.1.signature.pdf"


评论


你救了我的一天!谢谢! :)

–卡通师
20年7月3日在16:28

#13 楼

我经营一家公司,而Xournal对我需要的pdf文件没有质量或控制范围。

我也一直在使用或应用数字签名。

Master PDF Editor(截止到目前的版本5)是一个付费应用程序,很容易超出预期,现在是Ubuntu的默认PDF阅读器。关键功能:
-签署文档
-填写表格
-修改文本和对象
-注释和突出显示文档
-合并和拆分pdf文件
-etc

有关更多详细信息,请访问:https://code-industry.net/masterpdfeditor/?-about&ver=5438

#14 楼

updf确实对此非常有帮助。在MacOS上使用预览对文件进行“签名”后,updf提供了与此最接近的用户体验。

以下在Ubuntu 14.10和Debian 8上的作品。

我没有想要将第三方ppa添加到我的系统中,所以以以下方式运行updf:

$ bzr branch lp:updf


然后按照其他答案的引用进行了2行编辑。

安装依赖项:

# apt-get install python-poppler gir1.2-gtk-3.0 gir1.2-gdkpixbuf-2.0 gir1.2-poppler-0.18 python-cairo librsvg2-2 gir1.2-rsvg-2.0 python-gi-cairo


(以上已足够;尽管并非每个软件包都必要)。

,然后python程序就地可运行:

$ ./src/updf.py


不幸的是,与输入文档相比,输出文档的质量可能受到严重影响。正确的方法是在无损过程中覆盖签名,而不更改原始签名。而updf似乎参与了原始文件的重新编码。

评论


我必须将python-gi-cairo添加到依赖项中才能使其工作。

–乔马
15年3月18日在7:07

乔玛:谢谢。我现在将python-gi-cairo添加到列表中。

– projix
16-6-5在20:01