Bagaimana saya bisa menambahkan tanda tangan .png ke PDF di Linux?

66

Saya memiliki salinan tanda tangan tertulis yang saya pindai dan saya perlu menerapkannya pada beberapa dokumen di blok tanda tangan. Saya dulu melakukan ini pada Windows sepanjang waktu tetapi sekarang saya hanya memiliki Linux.

Apakah ini mungkin? Bagaimana saya bisa menambahkan gambar tanda tangan ke file PDF di Linux (Gnome 3)?

Freedom_Ben
sumber

Jawaban:

86

Menggunakan Xournal Anda dapat membuat anotasi PDF dan menambahkan gambar khusus (misalnya PNG transparan). Meskipun digunakan untuk membuat catatan dan menggambar secara langsung, ini juga dapat membuat anotasi PDF.

Di Ubuntu:

  • Instal Xournal melalui Pusat Perangkat Lunak Ubuntu
  • Buka Xournal
  • Pilih "Annotate PDF" dari menu File dan pilih file PDF Anda untuk ditandatangani.
  • Klik tombol "Gambar" di bilah alat (sepertinya siluet seseorang).
  • Klik pada dokumen.
  • Pilih gambar PNG dari tanda tangan Anda.
  • Ubah ukuran dan posisikan gambar pada PDF.
  • Pilih "Ekspor ke PDF" dari menu File.

Info lebih lanjut di http://www.howtogeek.com/215485/sign-pdf-documents-without-printing-and-scanning-them-from-any-device/

Nate Lampton
sumber
7
Xournal benar-benar buggy - ketika saya akhirnya berhasil mengimpor tanda tangan dan mengekspor PDF, PDF yang dipindai kabur - tanda tangan saya adalah satu-satunya elemen yang tajam pada pdf yang dihasilkan.
Antti Haapala
1
Saya hanya melakukan ini dengan xournal di arch dan itu bekerja dengan cukup baik, tetapi pdf latar belakangnya berasal dari dokumen, bukan scan. mungkin relevan?
Brandon Kuczenski
Bekerja untuk saya juga di Ubuntu 16.04. Sebagai sidenote, Anda juga dapat menggunakan xournal untuk membubuhi keterangan PDF dengan menambahkan teks di atasnya dalam berbagai lapisan (berguna misalnya untuk melengkapi formulir).
jotadepicas
hm jadi ini bekerja, sebenarnya, tetapi program pdf lain pada mint tidak menyimpan bidang teks ...
mendota
9

Ada baiknya menyebutkan Xournal yang memiliki UI yang bagus dan memungkinkan menambahkan teks, gambar, dan catatan tulisan tangan ke file PDF. Satu-satunya masalah yang saya miliki adalah tampaknya tidak menangani teks dari formulir PDF asli dengan sangat baik.

Mike Chelen
sumber
8

Saya menemukan skrip ini yang dapat Anda modifikasi untuk melampirkan tanda tangan ke file PDF yang ada.

Anda juga dapat mengunduhnya dari URL pastebin ini:

Ada juga Tanya Jawab ini di AskUbuntu yang memiliki banyak metode lain untuk melakukan ini. T&J berjudul: Bagaimana cara menempatkan gambar pada file pdf yang ada? .

slm
sumber
@Freedom_Ben - juga jika Anda tertarik, saya menemukan cara menandatangani PDF menggunakan sertifikat alih-alih hanya PNG. LMK.
slm
3
Masalahnya adalah ia menciptakan gambar halaman dengan kualitas yang sangat buruk. : / Jawaban lainnya (tentang pembaruan) berfungsi lebih baik. :)
odinho
2
@slm: Sangat benar. Tapi itu masih membuat / gambar / halaman, bukan hanya menstempel gambar seperti halnya pembaruan. pdftk juga dapat melakukan operasi seperti itu, tetapi akan membutuhkan skrip driver seperti yang ada di sini.
odinho
1
Saya telah menggunakan pdftk dan reportlab untuk melakukan hal serupa sebelumnya (gabungan surat di atas pdf): stackoverflow.com/questions/356502/… - membutuhkan banyak upaya untuk menemukan cara yang efektif. Sangat banyak cara buruk untuk memproses PDF di luar sana.
odinho
2
Apakah ada versi ini yang tidak digunakan xv? Terlalu sulit untuk menginstal xvdan itu bukan perangkat lunak bebas ...
Chris Beck
8

Banyak orang merekomendasikan Xournal, tetapi saya menemukannya berfungsi sebagai versi Gimp yang tidak dapat saya gunakan. Jadi jika Anda terbiasa dengan Gimp, saya akan merekomendasikan mencobanya.

  • Anda harus memiliki file dengan tanda tangan (bahkan gambar yang diambil dengan ponsel atau webcam), dan file dengan dokumen yang akan ditandatangani. Yang terakhir akan dalam format PDF, yang bisa dibuka oleh Gimp
  • Terapkan ambang pada tanda tangan jika putih tidak cukup putih
  • Konversikan putih menjadi alfa di tanda tangan jika latar belakang dokumen tidak putih
  • Buka dokumen dengan Gimp
  • Buka tanda tangan di atas dokumen sebagai layer baru (File -> Open as layer)
  • Sesuaikan ukuran dan posisi
  • Gabungkan layer
  • Ekspor sebagai PDF

Saya melakukan ini secara teratur ketika saya perlu menandatangani dokumen satu halaman, dan saya membutuhkan waktu kurang lebih lima menit. Sayangnya ini tidak akan berfungsi jika Anda perlu misalnya menandatangani setiap halaman dokumen multi halaman. Dalam kasus terakhir saya hanya mencetak, menandatangani, dan memindai lagi!

danza
sumber
2
Saya mencoba semua solusi di atas, semuanya gagal setelah banyak usaha. xournaltidak benar-benar berfungsi dengan baik, sepertinya ada bug di antarmuka pengguna dan saya tidak dapat mengukur atau memindahkan gambar setelah saya mengimpornya. xvtidak mengkompilasi, membutuhkan banyak tambalan ke kode C, kemudian akhirnya tidak berfungsi. updf, atau PPA ubuntu-nya, tidak ada lagi afaict. (diuji pada ubuntu xenial des 2016) gimpadalah cara untuk pergi, terima kasih untuk ini!
Chris Beck
2
Ini solusi yang indah! Memang diperlukan beberapa keterampilan mengedit gambar untuk membuat tanda tangan dengan latar belakang transparan, dan untuk skala gambar ketika ditambahkan ke dokumen sebagai lapisan. BTW, tanggal juga dapat ditambahkan ke file XCF yang berfungsi sebagai layer dengan sedikit keributan (ukuran teks dan lokasi). Ekspor PDF yang dihasilkan cukup dapat diterima!
Tom Russell
1
Jika dokumen memiliki beberapa halaman: impor halaman sebagai lapisan (opsi default), simpan dokumen sebagai ".mng" (berarti beberapa png) hanya menambahkan ekstensi .mng dan opsi "ekspor sebagai" pada gimp, sekarang harus perintah baris dan lakukan : convert original_name.mng output_name.pdf. Itu saja. Omong-omong, jika resolusi untuk output rendah, coba perbesar ukuran gambar pdf sambil mengimpor pdf di awal: coba sesuatu seperti "2000" untuk lebar. Saat mengekspor ke MNG jangan lupa untuk memeriksa opsi "level kompresi" ke maksimum dengan cara ini file final tidak akan terlalu berat.
Diego Andrés Díaz Espinoza
Jawaban ini bersama dengan ini ( onlinesignature.com/es/draw-a-signature-online ) adalah semua yang Anda butuhkan
Alfergon
6

Saya memiliki pengalaman yang cukup baik dengan uPdf .

Instalasi

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

Kemudian perbaiki bug dengan mengedit 2 baris dalam skrip Python .

Pemakaian

Luncurkan uPdf, pilih alat Tambahkan gambar , gambar kotak di sekitar area tempat Anda ingin tanda tangan pergi dan pilih file gambar dengan tanda tangan Anda. PNG dengan latar belakang transparan paling baik digunakan.

kynan
sumber
4
haha, itu sangat lucu tentang pengeditan 2 baris Python. Karena akulah yang membuat komentar itu. Dan di sini saya sedang mencari cara untuk menandatangani PDF lagi, sangat senang tentang orang-orang yang membantu di intarwebs :)
odinho - Velmont
Sepertinya rilis terakhir adalah untuk Ubuntu Quantal. Menambahkan repo pada 15,04 (Jelas) kesalahan dengan "Gagal mengambil ..."
Ponkadoodle
@ Wallalloloo Paket ini hanya dibuat untuk Raring dan Saucy. Untuk distribusi lain Anda perlu mengubah distribusi secara manual dalam lstfile yang dibuat di /etc/apt/sources.list.d.
kynan
Gangguan setelah splash screen pada Wily 15.10 menggunakan distribusi Precise atau Quantal.
Jonathan Neufeld
Bekerja untuk saya di Debian Buster. Jawaban lain seperti skrip khusus menggunakan pdftk yang saat ini tidak tersedia, dan Xournal tidak ada dalam repositori. Halaman unduhan Updf atau tautan unduhan langsung . Instal dengan sudo dpkg -i file.deb; sudo apt install -fdan kemudian edit kode Python sebagaimana disebutkan dalam jawaban.
Luc
4

Sambil memasukkan perintah tanda tangan saya sendiri ke dalam skrip shell, saya mencari cara untuk secara interaktif memilih area di mana tanda tangan harus pergi. Untungnya saya menemukan pertanyaan ini dan naskah Emmanuel Branlard berisi gagasan tentang bagaimana melakukannya (dengan xv). Saya menerapkan poin-poin berikut:

  • gunakan ImageMagicks displaybukanxv
  • gunakan stdbuf -oLdan -updateopsi untuk memiliki pratinjau langsung
  • overlay tanda tangan dengan pdftk stampuntuk mencegah penurunan kualitas gambar
  • hanya mengekstrak halaman tertentu dari file pdf
  • dekripsi tanda tangan dengan gpg
  • mengenkripsi file pdf yang ditandatangani dengan pdftk
  • membersihkan file antara yang berisi tanda tangan dengan wipe

Jadi inilah kodenya:

#!/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
bodo
sumber
Ini tidak berfungsi untuk saya, imagamagick memuat tetapi hanya menampilkan layar splash.
Andreas
2

Untuk kelengkapan, ada skrip alternatif untuk melakukan ini, yang tidak mengubah pdf ke gambar (kualitas rendah), berbeda dengan yang disebutkan sejauh ini : https://github.com/martinruenz/signpdf

Pengalaman saya dengan solusi lain adalah:

  • Xournal mengacaukan pdf (sepertinya berhasil setelah membangun dari sumber)
  • Script SignPDF mengubah pdf menjadi gambar dan mengurangi kualitas secara signifikan. Ini juga memiliki ketergantungan merepotkan (xv)
  • Aku tidak mencoba gimp dan UPDF pilihan
  • Pada akhirnya saya menggunakan Acrobat Reader dalam VM karena saya juga harus mengisi berbagai formulir
Martin R.
sumber
Terima kasih telah berbagi kembali. Saya akan memeriksa skrip Anda. Saya sudah sangat sukses dengan Xournal, Anda harus memastikan untuk tidak mengekspor ke nama file asli karena dapat menyebabkan masalah. Jika Anda memilih nama baru untuk diekspor (sehingga Anda tidak menimpa pdf asli) maka Anda akan menghindari bug ini.
Freedom_Ben
1

Penampil PDF okular memiliki fitur bawaan ini dengan anotasi. Buka PDF yang ingin Anda tandatangani, pilih ulasan pada bilah di sebelah kiri, pilih opsi ketiga pada menu pop up yang bertuliskan, 'garis bebas tangan.' Gambarlah tanda tangan Anda. Jika Anda menginginkan tinta hitam daripada hijau neon, pilih 'Pengaturan' dari menu, pilih 'Konfigurasikan Okular,' pilih tombol 'Anotasi' di sebelah kiri. Pilih 'Freehand Line' dari opsi, lalu pilih tombol 'Edit'. Anda dapat mengatur ketebalan dan warna garis di sini. Tekan Terapkan dan nikmati.

Kristen
sumber
0

updf benar-benar bagus untuk ini. Setelah menggunakan pratinjau pada MacOS untuk "menandatangani" dokumen, updf menawarkan pengalaman pengguna terdekat dengan ini.

Berikut ini berfungsi pada Ubuntu 14.10 dan Debian 8.

Saya tidak ingin menambahkan ppa pihak ketiga ke sistem saya, jadi jalankan updf dengan cara berikut sebagai gantinya:

$ bzr branch lp:updf

kemudian membuat 2 baris edit seperti yang dirujuk dari jawaban lainnya.

Instal dependensi:

# 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

(yang di atas sudah cukup; tidak setiap paket mungkin diperlukan).

dan kemudian program python dijalankan di tempat:

$ ./src/updf.py

Sayangnya, kualitas dapat sangat dipengaruhi dalam dokumen keluaran dibandingkan dengan dokumen input. Cara yang tepat untuk melakukan ini adalah dengan overlay tanda tangan, dan tidak mengubah yang asli, dalam proses lossless. Sedangkan updf tampaknya terlibat dalam pengodean ulang dokumen asli.

projix
sumber
Saya harus menambahkan python-gi-cairodependensi untuk membuatnya berfungsi.
Joma
Joma: terima kasih; Saya sekarang telah menambahkan python-gi-cairo ke daftar.
projix
0

Saya menjalankan bisnis dan Xournal tidak memiliki kualitas atau luasnya kendali atas file pdf yang saya butuhkan.

Saya juga menggunakan atau menerapkan tanda tangan digital sepanjang waktu.

Master PDF Editor (versi 5 pada tanggal ini) adalah aplikasi berbayar yang dengan mudah melebihi harapan dan sekarang adalah pembaca pdf default saya untuk Ubuntu. Fitur utama: - menandatangani dokumen - mengisi formulir - memodifikasi teks dan objek - membubuhi keterangan dan menyorot dokumen - menggabungkan dan membagi file pdf - dll

Untuk detail lebih lanjut, kunjungi: https://code-industry.net/masterpdfeditor/?-about&ver=5438

Brad Horn
sumber