Как я могу добавить подпись .png в PDF в Linux?


66

У меня есть отсканированная копия моей письменной подписи, и мне нужно применить ее к некоторым документам в блоке подписи. Я делал это на Windows все время, но теперь у меня только Linux.

Это возможно? Как я могу добавить изображение подписи в файл PDF в Linux (Gnome 3)?

Ответы:


86

Используя 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 on arch, и это сработало довольно хорошо, но фоновый pdf был из документа, а не отсканированного изображения. может быть актуально?
Брэндон Кученски

У меня тоже работал на Ubuntu 16.04. В качестве идентификатора вы также можете использовать xournal для аннотирования PDF, добавив поверх него текст в разных слоях (полезно, например, для заполнения форм).
Jotadepicas

гектометр так что на самом деле это работает, но другие программы pdf на mint не сохраняют текстовые поля ...
mendota

9

Стоит упомянуть Xournal, который имеет приятный пользовательский интерфейс и позволяет добавлять текст, изображения и рукописные заметки в файлы PDF. Единственная проблема, с которой я столкнулся, это то, что он не очень хорошо обрабатывает текст из нативных форм PDF


8

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

Вы также можете скачать его с этой вставки URL:

В AskUbuntu также есть вопросы и ответы, в которых есть много других способов сделать это. Вопросы и ответы озаглавлены: Как поместить изображение в существующий PDF-файл? ,


@Freedom_Ben - также, если вам интересно, я нашел, как подписать ваши PDF-файлы, используя сертификаты, а не просто PNG. ЛМК.
Slm

3
Проблема в том, что он создает изображения страниц в очень плохом качестве. : / Другой ответ (о updf) работает лучше. :)
Одино - Велмонт

2
@slm: Очень верно. Но он по-прежнему создает / picture / страницы, а не только печатает изображение, как это делает updf. pdftk также может выполнять такие операции, но для этого потребуется скрипт-драйвер, подобный приведенному здесь.
Одино - Велмонт,

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

2
Есть ли версия этого, которая не использует xv? Это слишком сложно установить, xvи это не бесплатное программное обеспечение ...
Крис Бек

8

Многие люди рекомендуют Xournal, но я обнаружил, что он работает как версия Gimp, которую я не могу использовать. Таким образом, если вы знакомы с Gimp, я бы порекомендовал попробовать его.

  • У вас должен быть файл с подписью (даже фотография, сделанная с помощью телефона или веб-камеры) и файл с документом, который нужно подписать. Последний будет в формате PDF, который может быть открыт Gimp
  • Применить порог на подписи, если белый недостаточно белый
  • Преобразуйте белый в альфа в подписи, если фон документа не белый
  • Откройте документ с помощью Gimp
  • Откройте подпись в верхней части документа как новый слой (Файл -> Открыть как слой)
  • Отрегулируйте размер и положение
  • Соединить слои
  • Экспортировать как PDF

Я делаю это регулярно, когда мне нужно подписать одностраничные документы, и это занимает у меня более или менее пяти минут. К сожалению, это не сработает, если вам нужно, например, подписать каждую страницу многостраничного документа. В последнем случае я просто печатаю, подписываю и снова сканирую!


2
Я перепробовал все вышеперечисленные решения, все они потерпели неудачу после больших усилий xournalна самом деле не работает должным образом, в пользовательском интерфейсе, похоже, есть ошибки, и я не смог масштабировать или перемещать изображения после их импорта. xvне компилируется, требует многочисленных исправлений для кода C, а затем, наконец, тоже не работает. updfили его Ubuntu PPA, больше не существует. (протестировано на 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 ) - это все, что вам нужно
Alfergon

6

У меня был достаточно хороший опыт работы с uPdf .

Монтаж

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

Затем исправьте ошибку , отредактировав 2 строки в скрипте Python .

использование

Запустите uPdf, выберите инструмент « Добавить изображение» , нарисуйте прямоугольник вокруг области, в которой должна находиться подпись, и выберите файл изображения с вашей подписью. PNG с прозрачным фоном работает лучше всего.


4
LOL, это так смешно редактировать 2 строки Python. Потому что я тот, кто создал этот комментарий. И здесь я ищу способ снова подписать PDF, так что я рада, что в полезных людях есть полезные люди :)
Один - Велмонт

Похоже, последний релиз был для Ubuntu Quantal. Добавление репо 15.04 (Vivid) с ошибками «Не удалось получить ...»
Ponkadoodle

@Wallacoloo Пакет предназначен только для Raring и 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 преобразует PDF- файлы в изображения и значительно снижает качество. Это также имеет неприятную зависимость (XV)
  • Я не пробовал КАНИТЕЛЬ и УСНО вариант
  • В конце концов я использовал Acrobat Reader на виртуальной машине, так как мне также приходилось заполнять различные формы

Спасибо, что поделились. Я проверю твой сценарий. У меня был действительно хороший успех с Xournal, хотя вы должны быть уверены, что не экспортировали в исходное имя файла, так как это может вызвать проблемы. Если вы выберете новое имя для экспорта (то есть вы не перезаписываете оригинальный pdf), вы избежите этой ошибки.
Freedom_Ben

1

Okular PDF Viewer имеет встроенную аннотацию. Откройте PDF-файл, который вы хотите подписать, выберите рецензии на панели слева, выберите третий вариант во всплывающем меню с надписью «Строка от руки». Вытяните свою подпись. Если вы хотите, чтобы это были черные чернила, а не неоновые зеленые, выберите «Настройки» в меню, выберите «Настроить Okular», нажмите кнопку «Аннотации» слева. Выберите «Строка от руки» из вариантов, затем нажмите кнопку «Редактировать». Вы можете отрегулировать толщину линии и цвет здесь. Нажмите Применить и наслаждайтесь.


0

updf действительно хорош для этого. Воспользовавшись предварительным просмотром в MacOS, чтобы «подписать» документы, updf предлагает наиболее удобный пользовательский интерфейс.

Следующее работает на Ubuntu 14.10 и Debian 8.

Я не хотел добавлять сторонний ppa в мою систему, поэтому вместо этого установил обновление следующим образом:

$ 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к зависимостям, чтобы это работало.
Joma

Йома: спасибо; Теперь я добавил python-gi-cairo в список.
Projix

0

Я управляю бизнесом, и Xournal не имеет качества или широты контроля над необходимыми мне pdf-файлами.

Я также использую или применяю цифровые подписи все время.

Master PDF Editor (версия 5 на эту дату) - это платное приложение, которое легко превосходит ожидания и теперь является моей стандартной программой чтения PDF для Ubuntu. Основная функция: - подписывать документы - заполнять формы - изменять текст и объекты - комментировать и выделять документы - объединять и разделять PDF-файлы - и т. Д.

Для получения дополнительной информации перейдите по ссылке : https://code-industry.net/masterpdfeditor/?-about&ver=5438.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.