Вы смотрели библиотеку CombinePDF ?
Это чисто рубиновое решение, которое позволяет некоторые манипуляции с PDF, такие как извлечение страниц, наложение одной страницы PDF на другую, нумерация страниц, написание основного текста и таблиц и т. Д.
Вот пример для обозначения существующего PDF-файла логотипом. В этом примере читается файл PDF, извлекается одна страница для печати и печатается другой файл PDF.
require 'combine_pdf'
company_logo = CombinePDF.load("company_logo.pdf").pages[0]
pdf = CombinePDF.load "content_file.pdf"
pdf.pages.each {|page| page << company_logo}
pdf.save "content_with_logo.pdf"
Вы также можете пометить текст, номер страницы или использовать:
require 'combine_pdf'
pdf = CombinePDF.load "content_file.pdf"
pdf.number_pages #adds page numbers. you can add formatting and placement options.
pdf.pages.each {|page| page.textbox "One Way To Stamp"}
#you can a shortcut method to stamp pages
pdf.stamp_pages "Another way to stamp"
#you can use the shortcut method for both text and PDF stamps
company_logo = CombinePDF.load("company_logo.pdf").pages[0]
pdf.stamp_pages company_logo
# you can use write simple tables
pdf.pages[0].write_table headers: ['first name', 'surname'], table_data: [['John', 'Doe'], ['Mr.', 'Smith']]
pdf.save "content_with_logo.pdf"
Он не предназначен для сложных операций, но он дополняет большинство библиотек разработки PDF и позволяет использовать шаблоны PDF вместо того, чтобы писать все с нуля.