19

我想添加一个动态生成的文本。有没有办法在 Ruby 中为现有的 PDF 添加水印?

4

5 回答 5

10

这将做到:

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 上的 master 分支后,一切正常。

于 2012-12-19T18:55:16.607 回答
5

另一种选择是使用 PDFTK。它可用于添加水印和创建新的 PDF。也许大虾会对它的模板做同样的事情。

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

更多信息:http ://rhodesmill.org/brandon/2009/pdf-watermark-margins/

有一个名为active_pdftk的 ruby​​ 包装器 gem ,它支持后台,因此您不必自己执行 shell 命令。

于 2012-12-19T17:12:54.217 回答
5

大虾不再支持模板了...

试试combine_pdf gem

您可以对现有 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"
于 2014-12-07T11:12:53.690 回答
1

查看 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

于 2010-06-03T05:35:40.123 回答
-5

使用Ruport

谷歌搜索的第一个结果ruby pdf watermark

于 2010-05-25T18:08:39.253 回答