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

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

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

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

вопрос: каков лучший рубиновый способ редактирования, записи или рисования на существующих Pdf?

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

6 ответов


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

например:

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


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

  1. использовать креветки для создания PDF только с динамическими частями, которые вы хотите добавить.
  2. использовать PDF:: Toolkit (который обертывает PDFtk), чтобы объединить PDF креветки с оригиналом.

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

require 'prawn'
require 'pdf/toolkit'

template_file = 'some/dir/Awesome-Graphics.pdf'
prawn_file = 'temp.pdf'
output_file = 'output.pdf'

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

PDF::Toolkit.pdftk(prawn_file, "background", template_file, "output", output_file)

рекомендую креветки для создания 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"

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


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


согласно моим исследованиям, креветка - один из бесплатных и лучших драгоценных камней, которые я нашел. Функциональность шаблона не работает в новой версии. Последняя версия, которую я мог найти для работы с шаблонами, - 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/