Добавление изображения в pdf с помощью pdftk

Здравствуйте, я использую pdftk для создания PDF-файла на основе отправленной формы.

У меня все работает нормально, пока здесь. Который добавляет изображение подписи. Я использую блокнот для подписи, который отлично работает для создания файла изображения подписи. Теперь я пытаюсь добавить это изображение подписи в PDF? Кто-нибудь знает, возможно ли это сделать с помощью pdftk? я не вижу возможности сделать это. Или, если даже возможно прикрепить изображение к форме, которая у меня есть в формате PDF?


person Brad Hazelnut    schedule 11.12.2013    source источник
comment
Разве это не тесно связано с stackoverflow.com/q/20235541/2870069?   -  person Jakob    schedule 13.12.2013
comment
Спасибо, это выглядит очень многообещающе, я попробую и протестирую его, но единственное, что я хочу, это то, что я хочу поместить изображение в определенное место в середине страницы, я не знаю, насколько это хорошо идти на работу   -  person Brad Hazelnut    schedule 13.12.2013
comment
Если положение изображения фиксировано, не имеет значения, куда его поместить. Просто используйте часть --offset, чтобы разместить ее в нужном месте.   -  person Jakob    schedule 13.12.2013
comment
я возился с этим, и у меня есть 3-страничный PDF-файл, и когда я его запускаю, он по какой-то причине отображает его на всех 3-х страницах, я хочу отображать его только на последней странице, как я могу это сделать?   -  person Brad Hazelnut    schedule 13.12.2013
comment
Если вам нужно изображение только на одной странице, я бы разделил ваш 3-страничный документ на два документа, запустил печать только на одном документе, а затем объединил две страницы. PDFtk также может это сделать.   -  person Suzanne    schedule 14.02.2018


Ответы (4)


Сначала конвертируйте изображение в PDF

convert image.png image.pdf

Затем увеличьте и сместите изображение с помощью pdfjam (еще один бесплатный инструмент).

pdfjam --paper 'a4paper' --scale 0.3 --offset '7cm -12cm' image.pdf

Затем объедините оба PDF-файла, используя pdftk

pdftk text.pdf stamp image.pdf output combined.pdf

Вам может понадобиться загрузить STAMPtk, если вам нужно расположить изображение и добавить его только на одну страницу в общем PDF, но за это вам придется заплатить.

Вы можете скачать STAMPtk отсюда http://www.pdflabs.com/tools/stamptk-the-pdf-stamp-maker/

Я надеюсь, что это помогает!

person Salvi Pascual    schedule 13.01.2014
comment
Просто добавьте примечания по установке для Linux (это довольно просто). PDFjam: apt-get install texlive-extra-utils, PDFtk: apt-get install pdftk. - person exmaxx; 19.04.2016
comment
И примечания по установке для Mac. PDFjam: brew install homebrew/tex/pdfjam, PDFtk: Homebrew в настоящее время не поддерживается (однако на SO можно найти руководства о том, как установите его через терминал), поэтому используйте официальную страницу загрузки pdflabs.com/tools/pdftk-server или эта ссылка, если вы используете OSX 10.11.4 (и PDFtk просто зависает и ничего не делает) pdflabs.com/tools/pdftk-the-pdf-toolkit/ - person exmaxx; 19.04.2016
comment
Для тех, кто в США, вы можете заменить a4paper на letterpaper, чтобы получить 8,5x11, который взят из латексная геометрия - person gene_wood; 09.10.2018
comment
Я часто вижу ответы такого типа, но мне кажется более простым разделить PDF на несколько страниц, подписать нужную страницу, а затем снова объединить? - person lmat - Reinstate Monica; 30.10.2019
comment
действительно, после pdfjam используйте pdftk text.pdf cat 5 output page5.pdf для извлечения страницы 5, затем pdftk page5.pdf stamp signature.pdf output signed.pdf, затем pdftk A=text.pdf B=signed-page5.pdf cat A1-4 B A6-end output signed-text.pdf. В противном случае см. комментарий ниже от @Tanupryia, чтобы добавить пустые страницы в подпись.pdf - person Christophe Priieur; 07.01.2021

В нашем случае мы должны добавить динамическую подпись в pdf. Я реализовал его с помощью библиотек pdftk и imagemagick. (Требуется установить pdftk и imagemagick)

  1. Сначала конвертируйте изображение в pdf как: (Используйте magick вместо конвертации для окон)

exec("конвертировать изображение подписи -изменить размер на 26% -прозрачный белый -страница a4+25+102 -качество 75 выходов/штамп.pdf");

Описания:

  • изменить размер: настроить размер изображения.
  • прозрачный делает фон изображения прозрачным
  • page : установите для страницы значение a4 и (25,102) задайте положение изображения pdf слева и сверху.

2.Затем выполните следующую команду:

exec("pdftk main.pdf multistamp Stamp.pdf output outputs/final.pdf");

person Tanupriya    schedule 03.07.2018
comment
Есть ли параметр для pdftk или преобразования для добавления изображения на произвольную страницу (например, страницу 4 в формате PDF)? - person Nathan Perrier; 01.08.2018
comment
для этого вам нужно добавить 3 пустых PDF-файла и объединить их со штампом.pdf - person Tanupriya; 03.08.2018
comment
есть ли возможность ставить штамп по горизонтали и вертикали по центру страницы? - person rahim.nagori; 20.08.2020
comment
Также есть ли аналогичный метод, с помощью которого я могу добавить номера страниц в файл PDF. - person rahim.nagori; 20.08.2020

pdfjinja для Python

https://github.com/rammie/pdfjinja

Эта библиотека позволит вам добавлять изображения к объекту подписи или кнопки в вашем PDF-файле без необходимости слияния или векторной информации о местоположении.

<сильный>1. Добавьте элемент подписи в свой шаблон PDF

Adobe Pro позволяет создавать и изменять заполняемые формы PDF. Перейдите в «Инструменты»> «Формы»> «Редактировать», затем в раскрывающемся списке «Добавить новое поле» выберите «Цифровая подпись».

После размещения перейдите в свойства элемента «Цифровая подпись».

Настройки ресурса

В свойстве Tooltip добавьте

{{ Sig | paste }}

Сохрани и закрой.

<сильный>2. Сохраните изображение подписи в формате jpg или png

Вам может понадобиться отдельный метод для извлечения подписей в виде изображений и помещения их в доступную папку.

<сильный>3. Добавьте метод в свой скрипт Python

from pdfjinja import PdfJinja

pdf_jinja_object = PdfJinja("path_to_pdf_template")

filled_out_pdf = pdf_jinja_object({
    'firstName': 'John',
    'lastName': 'Smith',
    'sig': 'path_to_signature_image',
})

filled_out_pdf.write(open("output_file.pdf", 'wb'))

Это должно дать вам форму с вашим изображением подписи, размещенным в месте, созданном в вашем шаблоне.

person Jeremy Swagger    schedule 21.02.2018
comment
Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если связанная страница изменится. – Из обзора - person blurfus; 22.02.2018
comment
Спасибо, я добавил трехэтапное пошаговое руководство, чтобы помочь. - person Jeremy Swagger; 22.02.2018
comment
Это должен быть правильный ответ. Создать подпись.pdf — это скорее нелепая шутка, чем реальный ответ. И платить за какой-то скрипт для этого? Это просто весело. - person pmourelle; 27.04.2018
comment
Небольшая поправка: в 'sig' значение должно быть путем к изображению: os.path.join(dirname, './sig.png'), хотя я не могу заставить его работать. - person pmourelle; 01.05.2018
comment
Хороший улов, я обновил эту часть. Посмотрите, можете ли вы установить точку останова для просмотра свойства Sig. Он должен иметь полный путь к нужному изображению. - person Jeremy Swagger; 02.05.2018

Сначала конвертируйте изображение в pdf следующим образом: (используйте magick вместо конвертирования для окон) exec("convert sign-image -resize 26% -transparent white -page a4+25+102 -quality 75 outputs/stamp.pdf");

Описания:

изменить размер: настроить размер изображения. прозрачный делает фон изображения прозрачной страницей: установите для страницы значение a4 и (25,102) установите положение изображения pdf слева и сверху. 2.Затем выполните следующую команду:

exec("pdftk main.pdf multistamp Stamp.pdf output outputs/final.pdf");

НО ЧТОБЫ РАСПОЛОЖИТЬ ПОДПИСЬ В КОНКРЕТНОМ ПОЛОЖЕНИИ, ДОБАВЬТЕ НЕСКОЛЬКО ПУСТЫХ PDF ПЕРЕД ПОДПИСАНИЕМ PDF, КАК ПОКАЗАНО НИЖЕ:

exec("convert signature-image -resize 26% -transparent white -page a4+25+102 -quality 75 outputs/stamp.pdf");
            exec("convert xc:none -page A4 outputs/blank1.pdf");
            exec("convert xc:none -page A4 outputs/blank2.pdf");
exec("convert xc:none -page A4 outputs/blank3.pdf");
            exec("pdftk outputs/blank1.pdf outputs/stamp.pdf outputs/blank2.pdf  outputs/blank3.pdf cat output outputs/sign.pdf");
          exec("pdftk main.pdf multistamp outputs/sign.pdf output outputs/final.pdf");
person Tanupriya    schedule 03.08.2018
comment
Добавьте немного описания. - person Mathews Sunny; 03.08.2018