ฉันจะเพิ่มลายเซ็น. png ให้กับ PDF ใน Linux ได้อย่างไร


65

ฉันมีสำเนาสแกนลายเซ็นที่เป็นลายลักษณ์อักษรของฉันและฉันต้องการนำไปใช้กับเอกสารบางอย่างในบล็อคลายเซ็น ฉันเคยทำสิ่งนี้บน Windows ตลอดเวลา แต่ตอนนี้ฉันมีเฉพาะ Linux

เป็นไปได้ไหม ฉันจะเพิ่มภาพลายเซ็นให้กับไฟล์ PDF ใน Linux (Gnome 3) ได้อย่างไร?

คำตอบ:


85

การใช้ Xournal คุณสามารถใส่คำอธิบายประกอบ PDF และเพิ่มรูปภาพที่กำหนดเอง (เช่น PNG แบบโปร่งใส) แม้ว่าจะใช้สำหรับการจดบันทึกและวาดรูปด้วยมือเปล่า แต่ก็สามารถใส่คำอธิบายประกอบ PDF ได้

บน Ubuntu:

  • ติดตั้ง Xournal ผ่านศูนย์ซอฟต์แวร์ Ubuntu
  • เปิด Xournal
  • เลือก "Annotate PDF" จากเมนู File และเลือกไฟล์ PDF ของคุณที่จะลงนาม
  • คลิกปุ่ม "รูปภาพ" ในแถบเครื่องมือ (ดูเหมือนเป็นรูปเงาดำของบุคคล)
  • คลิกที่เอกสาร
  • เลือกภาพ PNG ของลายเซ็นของคุณ
  • ปรับขนาดและจัดตำแหน่งภาพใน PDF
  • เลือก "ส่งออกเป็น PDF" จากเมนูไฟล์

ข้อมูลเพิ่มเติมได้ที่http://www.howtogeek.com/215485/sign-pdf-documents-without-printing-and-scanning-them-from-any-device/


7
Xournal เป็นรถจริงๆ - ในที่สุดเมื่อฉันสามารถนำเข้าลายเซ็นและส่งออก PDF, PDF ที่สแกนถูกเบลอ - ลายเซ็นของฉันเป็นองค์ประกอบที่คมชัดเพียงอย่างเดียวของ PDF ที่เกิดขึ้น
Antti Haapala

1
ฉันเพิ่งทำเช่นนี้กับ xournal on arch และมันใช้งานได้ดีมาก แต่แบ็คกราวด์ pdf นั้นมาจากเอกสารไม่ใช่สแกน อาจจะเกี่ยวข้อง?
Brandon Kuczenski

ทำงานสำหรับฉันเช่นกันบน Ubuntu 16.04 ในฐานะ sidenote คุณสามารถใช้ xournal เพื่อใส่คำอธิบายประกอบ PDF ด้วยการเพิ่มข้อความที่อยู่ด้านบนในเลเยอร์ต่างๆ (มีประโยชน์เช่นเพื่อกรอกแบบฟอร์ม)
jotadepicas

ฮึ่ม เพื่อให้การทำงานนี้จริง แต่โปรแกรมอื่น ๆ ในรูปแบบไฟล์ PDF มิ้นท์ไม่ได้บันทึกช่องข้อความ ...
Mendota

9

เป็นมูลค่าการกล่าวขวัญXournalซึ่งมี UI ที่ดีและอนุญาตให้เพิ่มข้อความรูปภาพและบันทึกย่อที่เขียนด้วยมือลงในไฟล์ PDF ปัญหาเดียวที่ฉันมีคือมันดูเหมือนจะไม่สามารถจัดการข้อความจากรูปแบบ PDF ดั้งเดิมได้เป็นอย่างดี


8

ฉันพบสคริปต์นี้ซึ่งคุณสามารถแก้ไขเพื่อแนบลายเซ็นไปยังไฟล์ PDF ที่มีอยู่

คุณยังสามารถดาวน์โหลดได้จาก URL pastebin นี้:

นอกจากนี้ยังมีคำถามและคำตอบบน AskUbuntu ที่มีวิธีการอื่น ๆ อีกมากมายสำหรับการทำเช่นนี้ คำถาม & คำตอบคือ: จะวางรูปภาพในไฟล์ pdf ที่มีอยู่ได้อย่างไร .


@Freedom_Ben - หากคุณสนใจฉันพบว่าวิธีลงชื่อ PDF ของคุณโดยใช้ใบรับรองแทนที่จะเป็น PNG LMK
slm

3
ปัญหาคือมันสร้างภาพของหน้าเว็บที่มีคุณภาพไม่ดีมาก : / คำตอบอื่น ๆ (เกี่ยวกับ updf) ทำงานได้ดีขึ้น :)
odinho - Velmont

2
@slm: จริงมาก แต่มันก็ยังสร้าง a / picture / ของหน้าแทนการประทับเฉพาะรูปภาพที่เหมือนกับ updf pdftk ยังสามารถทำการดำเนินการดังกล่าวได้ แต่จะต้องมีสคริปต์ไดรเวอร์เช่นเดียวกับที่นี่
odinho - Velmont

1
ฉันใช้ pdftk และ reportlab เพื่อทำสิ่งที่คล้ายกันมาก่อน (จดหมายเวียนที่ด้านบนของ pdf): stackoverflow.com/questions/356502/… - ใช้ความพยายามอย่างมากเพื่อค้นหาวิธีที่มีประสิทธิภาพ มีวิธีที่ไม่ดีมากมายในการประมวลผล PDF ที่นั่น
odinho - Velmont

2
มีรุ่นนี้ที่ไม่ได้ใช้xv? มันเป็นเรื่องยากเกินไปที่จะติดตั้งxvและก็ไม่ได้ซอฟแวร์ฟรี ...
คริสเบ็ค

8

ผู้คนมากมายแนะนำให้ Xournal แต่ฉันพบว่ามันทำงานเป็น Gimp รุ่นที่ฉันไม่สามารถใช้ได้ ดังนั้นหากคุณคุ้นเคยกับ Gimp ฉันขอแนะนำให้ลอง

  • คุณควรมีไฟล์ที่มีลายเซ็นต์ (แม้แต่รูปภาพที่ถ่ายด้วยโทรศัพท์หรือเว็บแคม) และไฟล์ที่มีเอกสารที่จะเซ็นชื่อ ส่วนหลังจะอยู่ในรูปแบบ PDF ที่ Gimp สามารถเปิดได้
  • ใช้ขีด จำกัด บนลายเซ็นหากสีขาวไม่ขาวพอ
  • แปลงสีขาวเป็นอัลฟาในลายเซ็นหากพื้นหลังของเอกสารไม่ขาว
  • เปิดเอกสารด้วย Gimp
  • เปิดลายเซ็นที่ด้านบนของเอกสารเป็นเลเยอร์ใหม่ (ไฟล์ -> เปิดเป็นเลเยอร์)
  • ปรับขนาดและตำแหน่ง
  • รวมเลเยอร์
  • ส่งออกเป็น PDF

ฉันทำสิ่งนี้เป็นประจำเมื่อฉันต้องการลงชื่อเอกสารหน้าเดียวและใช้เวลาไม่เกินห้านาที น่าเสียดายที่นี่ไม่สามารถใช้งานได้หากคุณต้องการให้ลงชื่อทุกหน้าของเอกสารหลายหน้า ในกรณีหลังฉันเพิ่งพิมพ์ลงชื่อและสแกนอีกครั้ง!


2
ฉันลองวิธีแก้ปัญหาทั้งหมดข้างต้นพวกเขาทั้งหมดล้มเหลวหลังจากความพยายามมาก xournalทำงานไม่ถูกต้องดูเหมือนว่ามีข้อบกพร่องในส่วนติดต่อผู้ใช้และฉันไม่สามารถปรับขนาดหรือย้ายภาพหลังจากที่นำเข้า xvไม่ได้คอมไพล์ต้องการแพทช์หลายตัวในรหัส C จากนั้นในที่สุดก็ใช้งานไม่ได้เช่นกัน updfหรืออูบุนตู PPA ของมันไม่มีอยู่อีกต่อไปแล้ว (ทดสอบบนอูบุนตู xenial ธันวาคม 2559) gimpเป็นวิธีที่จะไปขอบคุณสำหรับสิ่งนี้!
Chris Beck

2
นี่เป็นทางออกที่สวยงาม! มันต้องใช้ทักษะการแก้ไขภาพบางอย่างเพื่อสร้างลายเซ็นที่มีพื้นหลังโปร่งใสและปรับขนาดภาพเมื่อเพิ่มลงในเอกสารเป็นเลเยอร์ BTW วันที่สามารถเพิ่มลงในไฟล์ XCF ที่ใช้งานได้เป็นเลเยอร์ที่มีความยุ่งยากเล็กน้อย (ขนาดตัวอักษรและตำแหน่ง) การส่งออก PDF ที่เป็นผลลัพธ์นั้นค่อนข้างยอมรับได้!
Tom Russell

1
หากเอกสารมีหลายหน้า: หน้านำเข้าเป็นเลเยอร์ (ตัวเลือกเริ่มต้น) ให้บันทึกเอกสารเป็น ".mng" (หมายถึงหลาย png) เพียงเพิ่มนามสกุล. mng และตัวเลือก "ส่งออกเป็น" บน gimp ตอนนี้ต้องไปที่บรรทัดคำสั่งและทำ : convert original_name.mng output_name.pdf. นั่นคือทั้งหมดที่ ถ้าความละเอียดของเอาต์พุตต่ำลองขยายขนาดของรูปภาพ pdf ในขณะที่นำเข้า pdf ที่จุดเริ่มต้น: ลองใช้ความกว้างเช่น "2000" เมื่อส่งออกไปยัง MNG อย่าลืมตรวจสอบตัวเลือก "ระดับการบีบอัด" สูงสุดวิธีนี้ไฟล์สุดท้ายจะไม่หนักเกินไป
Diego AndrésDíaz Espinoza

คำตอบพร้อมกับนี้ ( onlinesignature.com/es/draw-a-signature-online ) เป็นสิ่งที่คุณต้องการ
Alfergon

6

ผมเคยมีประสบการณ์ที่ดีพอสมควรกับUPDF

การติดตั้ง

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

แล้วแก้ไขข้อผิดพลาดโดยการแก้ไข 2 สายในสคริปต์

การใช้

เรียกใช้ uPdf เลือกเครื่องมือเพิ่มภาพวาดสี่เหลี่ยมรอบ ๆ บริเวณที่คุณต้องการให้ลายเซ็นไปและเลือกไฟล์รูปภาพด้วยลายเซ็นของคุณ PNG ที่มีพื้นหลังโปร่งใสทำงานได้ดีที่สุด


4
ฮ่า ๆ มันตลกมากเกี่ยวกับการแก้ไข Python 2 บรรทัด เพราะฉันเป็นคนที่สร้างความคิดเห็นนั้น และที่นี่ฉันกำลังมองหาวิธีที่จะลงนามในรูปแบบ PDF อีกครั้งมีความสุขมากเกี่ยวกับคนที่เป็นประโยชน์ใน intarwebs :)
odinho - Velmont

ดูเหมือนว่ารุ่นล่าสุดสำหรับ Ubuntu Quantal เพิ่ม repo ในข้อผิดพลาด 15.04 (Vivid) ด้วย "ล้มเหลวในการดึง ... "
Ponkadoodle

@Wallacoloo แพ็คเกจนี้สร้างขึ้นสำหรับ Raring และ Saucy เท่านั้น สำหรับการแจกจ่ายอื่น ๆ คุณต้องเปลี่ยนการแจกจ่ายในlstไฟล์ที่สร้าง/etc/apt/sources.list.dด้วยตนเอง
kynan

เกิดปัญหาหลังจากหน้าจอสแปลชบน Wily 15.10 โดยใช้การแจกแจงแบบแม่นยำหรือเชิงปริมาณ
Jonathan Neufeld

ได้ผลสำหรับฉันใน Debian Buster คำตอบอื่น ๆ เช่นสคริปต์ที่กำหนดเองใช้ pdftk ซึ่งไม่สามารถใช้งานได้ในปัจจุบันและ Xournal ไม่ได้อยู่ในที่เก็บ UPDF หน้าดาวน์โหลดหรือลิงค์ดาวน์โหลดโดยตรง ติดตั้งด้วยsudo dpkg -i file.deb; sudo apt install -fแล้วแก้ไขรหัส Python ดังกล่าวในคำตอบ
ลุค

4

ในขณะที่ใส่คำสั่งลายเซ็นของฉันเองลงในเชลล์สคริปต์ฉันกำลังมองหาวิธีในการเลือกพื้นที่ที่ควรใช้ลายเซ็นแบบโต้ตอบ โชคดีที่ฉันพบคำถามนี้และสคริปต์ของEmmanuel Branlardมีแนวคิดเกี่ยวกับวิธีการทำ (ด้วยxv) ฉันใช้งานประเด็นต่อไปนี้:

  • ใช้ ImageMagicks displayแทนxv
  • ใช้stdbuf -oLและ-updateตัวเลือกเพื่อดูตัวอย่างสด
  • วางซ้อนลายเซ็นด้วยpdftk stampเพื่อป้องกันการเสื่อมคุณภาพของภาพ
  • แยกหน้าเฉพาะจากไฟล์ pdf เท่านั้น
  • ถอดรหัสลายเซ็นด้วย gpg
  • เข้ารหัสไฟล์ pdf ที่เซ็นชื่อด้วย pdftk
  • ล้างไฟล์กลางที่มีลายเซ็นด้วย wipe

ดังนั้นนี่คือรหัส:

#!/bin/env zsh

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

signature=~/PGP/signature.png.gpg

f=${1%.pdf}
page=$2
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]+).*$/\1,\2/" | \
    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

สิ่งนี้ใช้งานไม่ได้สำหรับฉันโหลดภาพจินตนาการ แต่แสดงเฉพาะหน้าจอสแปลช
Andreas

2

เพื่อความสมบูรณ์มีสคริปต์ทางเลือกในการทำเช่นนี้ซึ่งไม่ได้แปลงไฟล์ PDF เป็นภาพ (คุณภาพต่ำ) ซึ่งตรงกันข้ามกับที่กล่าวถึง : https://github.com/martinruenz/signpdf

ประสบการณ์ของฉันกับโซลูชันอื่น ๆ คือ:

  • Xournalยุ่งกับ pdf (ดูเหมือนว่าจะทำงานหลังจากสร้างจากแหล่งที่มาแม้ว่า)
  • สคริปต์SignPDFแปลงไฟล์ PDF เป็นภาพและลดคุณภาพอย่างมีนัยสำคัญ นอกจากนี้ยังมีการพึ่งพาลำบาก (xv)
  • ฉันไม่ได้ลองใช้ตัวเลือกgimpและupdf
  • ในที่สุดฉันก็ใช้ Acrobat Reader ใน VM เพราะฉันต้องกรอกแบบฟอร์มต่าง ๆ

ขอขอบคุณที่แบ่งปันกลับ ฉันจะตรวจสอบสคริปต์ของคุณ ฉันประสบความสำเร็จเป็นอย่างดีกับ Xournal คุณต้องแน่ใจว่าจะไม่ส่งออกไปยังชื่อไฟล์ดั้งเดิมเนื่องจากอาจทำให้เกิดปัญหาได้ หากคุณเลือกชื่อใหม่เพื่อส่งออกไปยัง (คุณไม่ได้เขียนทับไฟล์ PDF ต้นฉบับ) ดังนั้นคุณจะหลีกเลี่ยงข้อผิดพลาดนี้
Freedom_Ben

1

โปรแกรมดู PDF Okular มีคำอธิบายประกอบในตัว เปิด PDF ที่คุณต้องการลงชื่อเลือกบทวิจารณ์บนแถบด้านซ้ายเลือกตัวเลือกที่สามบนเมนูป๊อปอัปที่ระบุว่า 'เส้นอิสระ' วาดลายเซ็นของคุณ หากคุณต้องการให้หมึกสีดำค่อนข้างเป็นสีเขียวนีออนเลือก 'การตั้งค่า' จากเมนูเลือก 'กำหนดค่า Okular' เลือกปุ่ม 'คำอธิบายประกอบ' ทางด้านซ้าย เลือก 'Freehand Line' จากตัวเลือกจากนั้นเลือกปุ่ม 'แก้ไข' คุณสามารถปรับทั้งความหนาของเส้นและสีได้ที่นี่ กดใช้และเพลิดเพลินกับ


0

updf ดีจริงๆสำหรับสิ่งนี้ เมื่อใช้การแสดงตัวอย่างบน MacOS เพื่อ "ลงชื่อ" เอกสาร updf จะมอบประสบการณ์ผู้ใช้ที่ใกล้เคียงที่สุดให้กับสิ่งนี้

การทำงานต่อไปนี้บน Ubuntu 14.10 และ Debian 8

ฉันไม่ต้องการเพิ่มบุคคลที่สามในระบบของฉันดังนั้นให้ 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

(ข้างต้นก็เพียงพอ; อาจไม่จำเป็นต้องมีทุกแพ็คเกจ)

จากนั้นโปรแกรมไพ ธ อนนั้นสามารถเรียกใช้แทนได้:

$ ./src/updf.py

น่าเสียดายที่คุณภาพอาจได้รับผลกระทบอย่างรุนแรงในเอกสารขาออกเมื่อเทียบกับเอกสารป้อนเข้า วิธีที่ถูกต้องในการทำเช่นนี้คือการวางซ้อนลายเซ็นและไม่เปลี่ยนแปลงต้นฉบับในกระบวนการแบบไม่สูญเสีย ในขณะที่ updf ปรากฏขึ้นเพื่อมีส่วนร่วมในการเข้ารหัสของต้นฉบับอีกครั้ง


ฉันต้องเพิ่มpython-gi-cairoการอ้างอิงเพื่อให้ทำงานได้
Joma

Joma: ขอบคุณ; ตอนนี้ฉันได้เพิ่ม python-gi-cairo ไว้ในรายการแล้ว
projix

0

ฉันดำเนินธุรกิจและ Xournal ไม่มีคุณภาพหรือความกว้างในการควบคุมไฟล์ pdf ที่ฉันต้องการ

ฉันยังใช้หรือใช้ลายเซ็นดิจิทัลตลอดเวลา

Master PDF Editor (รุ่นที่ 5 ณ วันนี้) เป็นแอปพลิเคชันที่ต้องเสียเงินซึ่งเกินความคาดหมายได้อย่างง่ายดาย คุณสมบัติที่สำคัญ: - ลงนามในเอกสาร - กรอกแบบฟอร์ม - แก้ไขข้อความและวัตถุ - ใส่คำอธิบายประกอบและเน้นเอกสาร - รวมและแยกไฟล์ PDF - ฯลฯ

สำหรับรายละเอียดเพิ่มเติมไปที่: https://code-industry.net/masterpdfeditor/?-about&ver=5438

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.