我意识到这个问题已经被问了很多,但是我在 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/