这样做:
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
Run Code Online (Sandbox Code Playgroud)
然而,在我的测试中,输出文件的大小是最新的宝石版本的Prawn(0.12),但在将我的Gemfile指向github上的主分支后,一切正常.
另一种选择是使用 PDFTK。它可用于添加水印和创建新的 PDF。也许大虾会用它的模板做同样的事情。
pdftk in.pdf background arecibo.pdf output wmark1.pdf
更多信息:http : //rhodesmill.org/brandon/2009/pdf-watermark-margins/
有一个名为active_pdftk的 ruby 包装 gem ,它支持后台处理,因此您不必自己执行 shell 命令。
Prawn 不再支持模板了...
您可以对现有 PDF 文件进行组合、水印、页码和添加简单文本(包括创建没有 PDF 链接的简单目录)。
这是一个非常简单和基本的 PDF 库,用纯 Ruby 编写,没有依赖项。
这个例子可以适合你的情况(它来自自述文件):
# 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"
Run Code Online (Sandbox Code Playgroud)