ruby-on-rails - 查找 PDF 表单字段位置

标签 ruby-on-rails pdf pdftk

我意识到这个问题已经被问了很多,但是我在 RoR 中找不到任何关于如何做到这一点的信息。我正在使用 pdf-forms 用表单文本字段填充 PDF但这不支持添加图像,我需要能够将客户签名的图像添加到 PDF 中。我用过 prawn在现有 PDF 上渲染图像,但我需要知道在签名行上添加图像的确切位置。所以我的问题是如何查看任意 PDF 并找到“签名”表单字段的确切位置?

最佳答案

我最终使用了 pdf2json找到表单域的 x,y 位置。我使用以下命令生成原始 pdf 的 JSON 文件:

%x{ pdf2json -f "#{form_path}" }

JSON 文件生成在与 form_path 相同的目录中.我使用这些命令找到我想要的字段:
jsonObj = JSON.parse(File.read(json_path))
signature_fields = jsonObj["formImage"]["Pages"].first["Fields"].find_all do |f|
    f["id"]["Id"] == 'signature'
end

我可以用 prawn首先用图像创建一个新的PDF。然后使用 pdf-forms , 我 multistamp图像 pdf 到我想添加图像的原始 PDF 上。但是multistamp applies each page of the stamp PDF to the corresponding page of the input PDF所以请确保您的图像 PDF 具有正确的页数,否则您的图像将在每一页上盖章。我只想将图像印在第一页上,因此我执行以下操作:
  num_pages = %x{ #{Rails.configuration.pdftk_path} #{form_path} dump_data | grep "NumberOfPages" | cut -d":" -f2 }.to_i
  signaturePDF = "/tmp/signature.pdf"
  Prawn::Document.generate(signaturePDF) do
    signature_fields.each do |field|
      image Rails.root.join("signature.png"), at: [field["x"], field["y"]], 
                                                  width: 50
    end
    [0...num_pages - 1].each{|p| start_new_page }
  end

  outputPDF = "/tmp/output.pdf"
  pdftk.multistamp originalPDF, signaturePDF, outputPDF

关于ruby-on-rails - 查找 PDF 表单字段位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49075589/

相关文章:

ruby-on-rails - 如何使用 PostgreSQL 触发器?

css - 生产中的 Rails 应用程序不加载图像?

ruby-on-rails - 设计rails current_user与user_signed_in?

ruby-on-rails - Rails 在不使用 URL 中的括号的情况下解析数组查询参数的标准方法?

java - 使用 OpenViewerFX 显示某些 PDF 时出错

cocoa - CGPDF文档和本地数据

java - 使用 PDFBox 验证 pdf 文件中 PDSignature 的字节范围

PDFtk 卡在 MacOS Sierra 上

php - pdftk 将 pdf 拆分为多页,但总大小增加

pdftk不会解压缩数据流