PDF Filler 是一项 RESTful 服务 (API),可帮助完成现有的基于 PDF 的表单,并使 Web 开发人员能够使用基于浏览器的表单和现代 Web 标准来促进信息收集。
PDF Filler 几乎适用于任何未加密的 PDF,支持可填写(例如,具有预定义输入字段的 PDF)和不可填写(例如,扫描的 PDF)表单。只需将任意公开托管的 PDF 的 URL 传递给它即可。 PDF Filler 甚至可以自动创建在现有网页中嵌入 HTML 表单所需的标记。
项目抽象了pdftk和大虾的填表逻辑。
PDF Filler 的工作原理是接受字段名称和值的 key => value 对。这些字段可以是可填写的 PDF 表单字段,也可以是不可填写字段的任意 x/y 坐标。对于可填写的 PDF,键应代表字段名称。在不可填写的 PDF 中,键应表示如下所述的字段坐标(例如, 100,100
)。在这两种情况下,字段值都应包含该给定字段的用户输入。
可以使用开源 PDF 实用程序 pdftk 在本地发现字段名称,也可以使用该服务动态发现字段名称。
获取给定 PDF 中所有字段的列表
/fields?pdf={URL to the PDF}
获取给定 PDF 中所有字段的 JSON 表示形式
/fields.json?pdf={URL to the PDF}
要填写 PDF,请向/fill
发出POST
请求。 POST 数据的格式为 key => value,其中 key 代表字段名称,value 代表字段值。请务必传递“pdf”键以及要填写的 PDF 的 URL。该服务将返回填写的 PDF 作为下载。
注意:由于 HTML 处理表单的方式,某些特殊字符(例如方括号)将无法正确 POST 到服务。如果 PDF 字段包含保留字符,只需在 POST 之前对字段名称进行 urlencode 即可。
获取任何可填写 PDF 表单的通用 HTML 表示
/form?pdf={URL To PDF}
不可填写的 PDF(例如,扫描的或其他没有结构化表单的 PDF)需要传递 X、Y 坐标和(可选)页码。使用以下字段命名约定传递此数据: x,y,page
(或简称x,y
),其中 X 和 Y 表示文档左下角的指针坐标。如果未给出页面,则将假定为第一页。
数据可以通过编程方式(例如通过API)或作为标准的基于网络的表单提交。例如,要构建 HTML 表单,您可以按如下方式操作:
< form method =" post " action =" /fill " >
<!-- A standard, fillable field, simply pass the field name -->
< label > First Name: < input type =" text " name =" first_name " /> < label >
<!-- A non-fillable field for which we pass coordinates -->
< label > Last Name: < input type =" text " name =" 100,100,1 " /> < label >
< input type =" submit " value =" Submit " />
</ form >
$ curl -L https://get.rvm.io | bash -s stable --ruby
)gem install bundler
)git clone [email protected]:GSA-OCSIT/pdf-filler.git
并cd
到目标目录(最有可能是pdf-filler
)bundle install
要运行,只需从项目目录运行命令ruby app.rb
即可。默认情况下,该服务将在端口4567
上公开。
您可以免费使用 PDF Filler 作为 Web 服务。但如果您想获取源代码并将其托管在本地,这实际上非常简单。
PDF Filler 使用 pdftk 来处理表单填充操作。 pdftk 可以免费下载并安装在大多数系统上。如果安装在/usr/local/bin/pdftk
以外的位置,请务必通过将环境变量PATH_TO_PDFTK
设置为正确的路径来更新配置。
PDF Filler 使用 Ruby 编写,并使用 Sinatra 生成 RESTful API
PDF Filler 很容易作为后端服务部署在您的服务器上。请按照此处的说明进行操作:http://www.kalzumeus.com/2010/01/15/deploying-sinatra-on-ubuntu-in-which-i-employ-a-secretary/ 作为如何部署和设置的示例将应用程序作为您计算机上的后端服务启动。有一个名为 daemon.rb 的文件是用于此目的的应用程序的一部分。
该应用程序设计为托管在 Heroku 等托管服务上。如果使用 Heroku,请务必选择“Bamboo”版本(使用 pdftk 编译)并将PATH_TO_PDFTK
的环境配置设置为/usr/bin/pdftk
。
我们鼓励任何人通过分叉和提交拉取请求来为该项目做出贡献。 (如果您是 GitHub 新手,您可以从基本教程开始。)
通过对该项目做出贡献,您将根据 MIT 许可条款向所有用户授予全球范围内的、免版税、永久、不可撤销、非排他性、可转让的许可。
该项目构成 17 USC 105 下的美国政府作品,并根据 MIT 许可证条款进行分发。