Как редактировать или писать на существующих PDF с Ruby? - PullRequest
32 голосов
/ 08 февраля 2012

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

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

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

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

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

Ответы [ 6 ]

28 голосов
/ 09 февраля 2012

вы обязательно должны проверить Prawn 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

17 голосов
/ 01 июня 2015

Я рекомендую prawn для создания PDF-файлов, а затем с помощью объединить_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"
17 голосов
/ 19 мая 2015

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

  1. Используйте Креветка для создания PDF-файла ТОЛЬКО с динамическими частями, которые вы хотите добавить.
  2. Используйте PDF :: Toolkit (который включает PDFtk ), чтобы объединить 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)
1 голос
/ 09 февраля 2012

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

1 голос
/ 09 февраля 2012

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

0 голосов
/ 12 октября 2015

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

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

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

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

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

...