pdf-forms 
http://github.com/jkraemer/pdf-forms/
Description
Fill out PDF forms with pdftk.
Installation
You'll need a working pdftk
binary. Either get a binary package from
http://www.pdflabs.com/tools/pdftk-server/ and install it, or run
apt-get install pdftk
if you're on Debian or similar.
After that, add pdf-forms
to your Gemfile or manually install the gem. Nothing
unusual here.
Using the Java port of PDFTK
The PDFTK package was dropped from most (all?) current versions of major Linux distributions.
As contributed in this issue, you can use the Java version of PDFTK
with this gem, as well. Just create a small shell script:
#!/bin/sh
MYSELF=`which "$0" 2>/dev/null`
[ $? -gt 0 -a -f "$0" ] && MYSELF="./$0"
java=java
if test -n "$JAVA_HOME"; then
java="$JAVA_HOME/bin/java"
fi
exec "$java" $java_args -jar $MYSELF "$@"
exit 1
Next, concatenate the wrapper script and the Jar file, and you end up with an executable that
can be used with pdf-forms:
cat stub.sh pdftk-all.jar > pdftk.run && chmod +x pdftk.run
Usage
FDF/XFdf creation
require 'pdf_forms'
fdf = PdfForms::Fdf.new :key => 'value', :other_key => 'other value'
puts fdf.to_pdf_data
fdf.save_to 'path/to/file.fdf'
To generate XFDF instead of FDF instantiate PdfForms::XFdf
instead of PdfForms::Fdf
Query form fields and fill out PDF forms with pdftk
require 'pdf_forms'
pdftk = PdfForms.new('/usr/local/bin/pdftk')
pdftk.get_field_names 'path/to/form.pdf'
pdftk.fill_form '/path/to/form.pdf', 'myform.pdf', :foo => 'bar'
pdftk.fill_form '/path/to/form.pdf', 'myform.pdf', {:foo => 'bar'}, :flatten => true
pdftk.fill_form '/path/to/form.pdf', 'myform.pdf', {foo: 'bar'}, encrypt: true, encrypt_options: 'allow printing'
pdftk.fill_form '/path/to/form.pdf', 'myform.pdf', {foo: 'bar'}, encrypt: true, encrypt_options: 'user_pw secret'
pdftk.fill_form '/path/to/form.pdf', 'myform.pdf', {foo: 'bar'}, replacement_font: '/path/to/font'
Any options shown above can also be set when initializing the PdfForms
instance. In this case, options given to fill_form
will override the global
options.
Field names with HTML entities
In case your form's field names contain HTML entities (like
Straße Hausnummer
), make sure you unescape those before using them, i.e.
CGI.unescapeHTML(name)
. Thanks to @phoet for figuring this out in #65.
Non-ASCII Characters (UTF8 etc) are not displayed in the filled out PDF
First, try to use the replacement_font
option and specify the font that's not being displayed.
If it doesn't work, check if the field value has been stored properly in the output PDF using pdftk output.pdf dump_data_fields_utf8
.
If it has been stored but is not rendered, your input PDF lacks the proper font for your kind of characters. Re-create it and embed any necessary fonts.
If the value has not been stored, there is a problem with filling out the form, either on your side, of with this gem.
Also see UTF-8 chars are not displayed in the filled PDF
Prior Art
The FDF generation part is a straight port of Steffen Schwigon's PDF::FDF::Simple perl module. Didn't port the FDF parsing, though ;-)
License
Created by Jens Kraemer and licensed under the MIT License.