Подтвердить что ты не робот

Как редактировать или писать в существующем PDF файле с помощью Ruby?

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

Я довольно интенсивно гуглил ответы на этот вопрос, но не нашел определенных ответов. Одним из лучших решений является PDF :: Toolkit, однако для добавления заменяемых атрибутов в существующие документы PDF потребуется приобрести Adobe Acrobat.

Мир PHP благословлен FPDI, который можно использовать для простого открытия PDF файла и записи/рисования на нем поверх существующего содержимого. Существует порт Ruby этой библиотеки, но последний коммит для него произошел в начале 2009 года. Кроме того, этот проект не выглядит так, как будто он широко используется и поддерживается.

Вопрос заключается в следующем: Какой лучший способ редактирования, написания или рисования в Ruby существующих PDF файлов?

Этот вопрос также, кажется, не получил ответа здесь. Эти вопросы связаны, но на самом деле не совпадают:

4b9b3361

Ответ 1

вам нужно обязательно проверить Prawn gem, с помощью которого вы можете создавать любые пользовательские pdf файлы. Вы можете использовать креветку для записи в тексте в существующие pdf файлы, рассматривая существующий PDF как шаблон для вашего нового документа "Креветка".

Например:

filename = "#{Prawn::DATADIR}/pdfs/multipage_template.pdf"
Prawn::Document.generate("full_template.pdf", :template => filename) do
  text "THis content is written on the first page of the template", :align => :center
end

Это напишет текст на первую страницу старого pdf.

Подробнее здесь: http://prawn.majesticseacreature.com/manual.pdf

Ответ 2

Поскольку Prawn удалил функцию шаблона (она была полна ошибок), самый простой способ, который я нашел, заключается в следующем:

  1. Используйте Prawn для создания PDF файла, содержащего ТОЛЬКО динамические части, которые вы хотите добавить.
  2. Используйте PDF :: Toolkit (который упаковывает PDFtk), чтобы объединить Prawn PDF с оригиналом.

Грубый пример:

require 'prawn'
require 'pdf/toolkit'

template_filename = 'some/dir/Awesome-Graphics.pdf'
prawn_filename = 'temp.pdf'
output_filename = 'output.pdf'

Prawn::Document.generate(prawn_filename) do
  # Generate whatever you want here.
  text_box "This is some new text!", :at => [100, 300]
end

PDF::Toolkit.pdftk(prawn_filename, "background", template_filename, "output", output_filename)

Ответ 3

Я рекомендую prawn для создания PDF файлов, а затем используя combine_pdf, чтобы объединить два сгенерированных PDF файла вместе в один. Я использую его так, и он отлично работает.

Краткий пример (из README) о том, как объединить два PDF файла:

company_logo = CombinePDF.load("company_logo.pdf").pages[0]
pdf = CombinePDF.load "content_file.pdf"
pdf.pages.each { |page| page << company_logo } # notice the << operator is on a page and not a PDF object.
pdf.save "content_with_logo.pdf"

Ответ 4

Лучшее, что я могу придумать, это Rails-latex, оно не позволяет редактировать существующие файлы PDF, но это позволит вам настройте шаблон *.tex.erb, который вы можете динамически модифицировать и скомпилировать в формате PDF (вместе с dvi и несколькими другими).

Ответ 5

PDFLib, похоже, делает то, что вам нужно, и имеет рубиновые привязки.

Ответ 6

Согласно моим исследованиям, креветка является одним из бесплатных и лучших драгоценных камней, которые я нашел. Функциональность шаблона не работает в более поздней версии. Последняя версия, которую я могу найти для работы с шаблонами, - 1.0.0.rc2 - 1 марта 2013 года. Не удалось найти более позднюю версию, которая работает с шаблонами. Поэтому будьте внимательны, если вы используете более поздние версии, чем это. Проверьте ниже нить для получения дополнительной информации.

https://groups.google.com/forum/#!searchin/prawn-ruby/prawn $20templates/prawn-ruby/RYGPImNcR0I/7mxtnrEDHeQJ

PDFtk - еще один способ для манипулирования PDF файлами и работы с шаблонами. Но в нем упоминаются следующие моменты,

  • Эта библиотека бесплатна для личного использования, но для ее использования требуется лицензия в производстве
  • Это инструмент без рубиновой командной строки

Для получения дополнительной информации см. ссылку ниже http://adamalbrecht.com/2014/01/31/pre-filling-pdf-form-templates-in-ruby-on-rails-with-pdftk/

Ответ 7

Вам не нужно использовать комбинацию драгоценных камней, вы можете использовать только один драгоценный камень!

Работа с PDF действительно сложна в Ruby/Rails (так я понял!)

Так я смог динамически добавлять текст в PDF в рельсах.

добавьте этот драгоценный камень в свой драгоценный камень combine_pdf

и тогда вы можете использовать такой код:

# get the record from the database to add dynamically to the pdf
user = User.last

# get the existing pdf
pdf = CombinePDF.load "#{Rails.root}/public/pdf/existing_pdf.pdf"

# create a textbox and add it to the existing pdf on page 2
pdf.pages[1].textbox "#{user.first_name} #{user.last_name}", height: 20, width: 70, y: 596, x: 72

# output the new pdf which now contains your dynamic data
pdf.save "#{Rails.root}/public/pdf/output#{Time.now.to_s}.pdf"

Вы можете найти подробную информацию о методе текстового поля здесь: https://www.rubydoc.info/gems/combine_pdf/0.2.5/CombinePDF/Page_Methods#textbox-instance_method

Я потратил несколько дней на то, чтобы проработать несколько разных камней: prawn wicked_pdf pdfkit fillable_pdf

Но это было самое гладкое решение для меня на 2019 год.

Я надеюсь, что это сэкономит кому-то много времени, поэтому им не придется проходить через все пробные версии и ошибки, которые мне приходилось делать с PDF файлами !!