Водяной знак в существующем PDF в Ruby - PullRequest
16 голосов
/ 26 апреля 2010

Я хотел бы добавить динамически сгенерированный текст. Есть ли способ пометить водяным знаком существующий PDF в Ruby?

Ответы [ 5 ]

8 голосов
/ 19 декабря 2012

Это сделает это:

PDF::Reader для подсчета количества страниц в файле.

Prawn для создания нового документа PDF, используя каждую страницу входного PDF в качестве шаблона.

require 'prawn'
require 'pdf-reader'

input_filename = 'input.pdf'
output_filename = 'output.pdf'

page_count = PDF::Reader.new(input_filename).page_count

Prawn::Document.generate(output_filename, :skip_page_creation => true) do |pdf|

  page_count.times do |num|
    pdf.start_new_page(:template => input_filename, :template_page => num+1)
    pdf.text('WATERMARK')
  end

end

Однако в моем тестировании размер выходного файла был огромным с последней версией Gem Prawn (0.12), но после наведения моего Gemfile на главную ветку на github все работало нормально.

4 голосов
/ 19 декабря 2012

Другой вариант - использовать PDFTK. Его можно использовать для добавления водяного знака и создания нового PDF. Может быть, креветка сделает то же самое с шаблонами.

pdftk in.pdf background arecibo.pdf output wmark1.pdf

Дополнительная информация: http://rhodesmill.org/brandon/2009/pdf-watermark-margins/

Существует гем рубиновой оболочки active_pdftk , который поддерживает фоновую обработку, поэтому вам не нужно самостоятельно выполнять команды оболочки.

3 голосов
/ 07 декабря 2014

Креветка больше не поддерживает шаблоны ...

Попробуйте объединить_pdf гем .

Вы можете комбинировать, добавлять водяные знаки, номер страницы и добавлять простой текст в существующие файлы PDF (включая создание простого оглавления без ссылок PDF).

Это очень простая и простая библиотека PDF, написанная на чистом Ruby без каких-либо зависимостей.

Этот пример может соответствовать вашей ситуации (это из файла readme):

# load the logo as a pdf page
company_logo = CombinePDF.load("company_logo.pdf").pages[0]

# load the content file
pdf = CombinePDF.load "content_file.pdf"

# inject the logo to each page in the content
pdf.pages.each {|page| page << company_logo}

# save to a new file, with the logo.
pdf.save "content_with_logo.pdf"
1 голос
/ 03 июня 2010

Проверьте Prawn (http://github.com/sandal/prawn) только для Ruby и Prawnto (http://github.com/thorny-sun/prawnto) для Ruby on Rails.

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

Вот пример использования фонового изображения http://cracklabs.com/prawnto/code/prawn_demos/source/general/background

0 голосов
/ 25 мая 2010

Использование Ruport .

1-й результат для поиска в Google ruby pdf watermark.

...