【问题标题】:Watermark in existing PDF in RubyRuby 中现有 PDF 中的水印
【发布时间】:2011-02-12 13:19:23
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails ruby pdf prawn


    【解决方案1】:

    使用Ruport。

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

    【讨论】:

    • Duh... 只是显示了 Google 的限制。我正在寻找同样的东西,而 Ruport 不是。
    • Ruport 使用 PDF::Writer。 PDF::Writer 仅创建 PDF。不行。
    【解决方案2】:

    Prawn 不再支持模板了...

    试试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"
    

    【讨论】:

    • 内容文件文本不可见,我注意到使用 mac 页面创建模板时字体颜色变白
    • @Subha ,这可能是一个问题(或者您的 PDF 的背景可能是不透明的白色而不是透明的),但这绝对不是 gem 的正常行为。
    【解决方案3】:

    这样就可以了:

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

    【讨论】:

    • 您可以将:template 选项传递给Prawn::Document,然后以这种方式遍历页面。这将使输出文件大小更接近输入文件大小。
    • Prawn 不再支持将两个 PDF 编辑/合并为一个。检查@Myst 的答案以获得最新的解决方案。
    【解决方案4】:

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

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

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

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

    【讨论】:

      【解决方案5】:

      查看 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的例子

      【讨论】:

      • Prawn 只能将图像嵌入到用 prawn 创建的新 pdf 文件中,而不是现有的文件......所以它对我不起作用。
      • 啊,错过了您帖子中的 existing 部分。对于那个很抱歉。我不相信有,除非您将其转换为图像然后加水印。
      • 实际上,如果您使用该 PDF 作为模板,Prawn 似乎可以编辑该 PDF:groups.google.com/group/prawn-ruby/browse_thread/thread/… & github.com/yob/prawn/tree/templates_2010。我没有亲自使用过这些,但这些信息似乎是最近的?
      猜你喜欢
      • 2016-04-11
      • 2022-09-23
      • 1970-01-01
      • 1970-01-01
      • 2018-05-30
      • 2016-06-02
      • 1970-01-01
      • 2020-12-09
      • 1970-01-01
      相关资源
      最近更新 更多