Як я можу додати підпис .png до PDF у Linux?


65

У мене відсканована копія письмового підпису, і мені потрібно застосувати її до деяких документів у блоці підписів. Раніше я робив це в Windows весь час, але тепер у мене є тільки Linux.

Чи можливо це? Як я можу додати зображення підпису до PDF-файлу в Linux (Gnome 3)?

Відповіді:


85

За допомогою Xournal ви можете коментувати PDF-файли та додавати власні зображення (наприклад, прозорий PNG). Незважаючи на те, що він використовується для вільного відмітки та малювання, він також може коментувати PDF-файли.

На Ubuntu:

  • Встановіть Xournal через програмний центр Ubuntu
  • Відкрити Xournal
  • Виберіть "Анотувати PDF" у меню "Файл" та виберіть файл 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-файлі.
Антті Хаапала

1
Я щойно робив це з xournal в арці, і він працював досить непогано, але фоновий pdf був із документа, а не від сканування. можливо, актуально?
Брендон Куценський

Працював і для мене на Ubuntu 16.04. Ви можете також використовувати xournal для анотації PDF, додаючи текст поверх нього в різні шари (корисний, наприклад, для заповнення форм).
jotadepicas

хм. так що це працює, насправді, але інші програми PDF на монетному дворі не зберігають текстові поля ...
mendota

9

Варто згадати Xournal, який має приємний інтерфейс користувача та дозволяє додавати текст, зображення та власноруч написані нотатки у файли PDF. Єдиною проблемою у мене є те, що він, здається, не дуже добре обробляє текст з рідних PDF-форм.


8

Я знайшов цей скрипт, який ви можете змінити, щоб прикріпити підпис до існуючого файлу PDF.

Ви також можете завантажити його з цієї URL-адреси пастабіну:

Існує також питання запитань на AskUbuntu, який має багато інших методів для цього. Питання та відповіді мають назву: Як розмістити зображення на існуючому файлі PDF? .


@Freedom_Ben - також якщо ви зацікавлені, я знайшов, як підписувати свої PDF-файли за допомогою сертифікатів, а не просто PNG. ЛМК.
slm

3
Проблема полягає в тому, що вони створюють зображення сторінок у дуже поганій якості. : / Інша відповідь (про updf) працює краще. :)
odinho - Велмонт,

2
@slm: Дуже правда. Але він все ще створює / picture / сторінки, замість того, щоб лише тиснути зображення на зразок updf. pdftk також може робити такі операції, але потрібен буде драйвер-скрипт, як у цьому.
odinho - Велмонт,

1
Раніше я використовував pdftk і reportlab для подібних дій (злиття пошти поверх pdf): stackoverflow.com/questions/356502/… - зайняв багато зусиль, щоб знайти ефективний спосіб. Дуже багато поганих способів обробки PDF-файлів там.
odinho - Велмонт,

2
Чи є версія цього, яка не використовується xv? Встановити занадто складно, xvі це не вільне програмне забезпечення ...
Кріс Бек

8

Дуже багато людей рекомендують Xournal, але я виявив, що він працює як версія Gimp, яку я не можу використовувати. Таким чином, якщо ви знайомі з Gimp, я б рекомендував спробувати.

  • У вас повинен бути файл з підписом (навіть зображення, зроблене за допомогою телефону або веб-камери), і файл з документом, який потрібно підписати. Останній буде у форматі PDF, який може відкрити Gimp
  • Застосуйте поріг на підписі, якщо білий недостатньо білий
  • Перетворити білий у альфа в підпис, якщо фон документа не білий
  • Відкрийте документ за допомогою Gimp
  • Відкрийте підпис вгорі документа як новий шар (Файл -> Відкрити як шар)
  • Відрегулюйте розмір і положення
  • Злиття шарів
  • Експорт у форматі PDF

Я роблю це регулярно, коли мені потрібно підписувати документи на одній сторінці, і це займає у мене більше-менше п’яти хвилин. На жаль, це не спрацює, якщо вам потрібно, наприклад, підписати кожну сторінку документу з декількома сторінками. В останньому випадку я просто друкую, підписую і сканую знову!


2
Я спробував усі вищеперелічені рішення, всі вони зазнали невдачі після великих зусиль. xournalнасправді не працює належним чином, здається, що в його інтерфейсі користувача є помилки, і я не зміг масштабувати або переміщувати зображення після того, як імпортував їх. xvне компілював, вимагає численних виправлень до коду С, потім нарешті також не працює. updfабо його PPU ubuntu, більше не існує факту. (тестовано на ubuntu xenial dec 2016) gimp- це шлях, спасибі за це!
Кріс Бек

2
Це прекрасне рішення! Це вимагає певних навичок редагування зображень для створення підпису з прозорим фоном та масштабування зображення, доданого до документа у вигляді шару. До речі, дата також може бути додана до робочого файлу XCF у вигляді шару з трохи суєти (розмір тексту та розташування). Отриманий експорт у PDF цілком прийнятний!
Том Расселл

1
Якщо документ має кілька сторінок: імпортувати сторінку як шари (параметр за замовчуванням), збережіть документ як ".mng" (означає декілька png), просто додавши розширення .mng та опцію "експортувати як" на gimp, тепер отримано командний рядок і зробіть : convert original_name.mng output_name.pdf. Це все. До речі, якщо дозвіл на вихід низький, спробуйте збільшити розмір зображень у форматі pdf під час імпорту pdf на початку: спробуйте щось на зразок "2000" для ширини. Експортуючи до MNG, не забудьте перевірити опцію "рівень стиснення" до максимального, таким чином остаточний файл не буде надто важким.
Дієго Андрес Діас Еспіноза

Ця відповідь разом із цим ( onlinesignature.com/es/draw-a-signature-online ) - все, що вам потрібно
Альфергон,

6

Я мав досить хороший досвід роботи з uPdf .

Установка

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

Потім виправте помилку , відредагувавши 2 рядки в сценарії Python .

Використання

Запустіть uPdf, виберіть інструмент Додати зображення , намалюйте прямокутник навколо області, де ви хочете підписатись, і виберіть файл зображення з вашим підписом. Найкраще працює PNG з прозорим фоном.


4
хаха, це так смішно про редагування 2 рядків Python. Тому що я той, хто створив цей коментар. І ось я шукаю спосіб знову підписати PDF-файл, тому радий корисним людям на intarwebs :)
odinho - Velmont,

Схоже, останній випуск був для Ubuntu Quantal. Додавання репо 15.04 (Яскраві) помилки з "Не вдалося отримати ..."
Ponkadoodle

@Wallacoloo Пакет розроблений лише для Raring and Saucy. Для будь-якого іншого дистрибутиву потрібно вручну змінити розподіл у lstфайлі, створеному в /etc/apt/sources.list.d.
кинан

Збої після екрана заставки на Wily 15.10, використовуючи точні або квантальні розподіли.
Джонатан Нойфельд

Працює для мене на Debian Buster. Інші відповіді, такі як користувацькі сценарії, використовують pdftk, який наразі недоступний, а Xournal не знаходиться у сховищах. Сторінка завантаження Updf або пряме посилання для завантаження . Встановіть, sudo dpkg -i file.deb; sudo apt install -fа потім відредагуйте код Python, як зазначено у відповіді.
Люк

4

Вкладаючи власні команди підпису в сценарій оболонки, я шукав спосіб інтерактивного вибору області, куди повинен підписуватись підпис. На щастя, я знайшов це питання, і сценарій Еммануеля Бранларда містить ідею, як це зробити (з 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

Це не працює для мене, imagamagick завантажується, але відображає лише заставний екран.
Андреас

2

Для повноти для цього є альтернативний сценарій, який не перетворює pdf у зображення (низької якості), на відміну від згаданого дотепер : https://github.com/martinruenz/signpdf

Мій досвід з іншими рішеннями був:

  • Xournal поспілкувався з файлом pdf (здавалося, він працює після створення з джерела)
  • Сценарій SignPDF перетворює pdfs у зображення та значно знижує якість. Він також має проблемну залежність (xv)
  • Я не пробував тяганина і усно варіант
  • Врешті-решт я застосував програму Acrobat Reader у віртуальній машині, оскільки мені також довелося заповнювати різні форми

Дякуємо, що поділилися вами. Я перевірю ваш сценарій. Я мав дуже хороший успіх з Xournal, тому ви повинні переконатися, що не експортувати до оригінального імені файлу, оскільки це може спричинити проблеми. Якщо ви вибрали нове ім'я для експорту (щоб ви не перезаписали оригінал PDF), ви уникнете цієї помилки.
Freedom_Ben

1

Переглядач Okular PDF має цю вбудовану інформацію з примітками. Відкрийте PDF-файл, який ви хочете підписати, виберіть огляди на панелі зліва, виберіть третій варіант у спливаючому меню, що говорить: "Рядок від руки". Оформіть свій підпис. Якщо ви хочете, щоб це чорна фарба, а не неонова зелена, виберіть у меню "Налаштування", виберіть "Налаштувати Okular", а потім натисніть кнопку "Анотації" зліва. Виберіть "Параметр від руки" з опцій, а потім натисніть кнопку "Змінити". Тут можна налаштувати як товщину лінії, так і колір. Натисніть Застосувати та насолоджуватися.


0

updf дуже добре для цього. Використовуючи попередній перегляд на MacOS для "підписання" документів, updf пропонує найближчий досвід користувача до цього.

Наступні роботи на Ubuntu 14.10 та Debian 8.

Я не хотів додавати сторонній ppa до своєї системи, тому завантажив файл PDF наступним чином:

$ 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до залежностей, щоб воно працювало.
Джома

Джома: спасибі; Зараз я додав python-gi-cairo до списку.
projix

0

Я веду бізнес, і Xournal не має якості або широти контролю над файлами PDF, які мені потрібні.

Я також постійно використовую або застосовую цифрові підписи.

Головний редактор PDF (версія 5 станом на цю дату) - це платний додаток, який легко перевершує очікування і тепер є моїм читачем PDF-файлів за замовчуванням для Ubuntu. Основна особливість: - підписувати документи - заповнювати форми - змінювати текст та об’єкти - коментувати та виділяти документи - об'єднувати та розділяти файли PDF - тощо

Більш детальну інформацію можна отримати на веб-сторінці : https://code-industry.net/masterpdfeditor/?-about&ver=5438

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.