API ExampleΒΆ
pdfforms v2.0 introduces a python API for filling pdf forms similar to the command-line interface. This can be useful for preprocessing and formatting data values used to populate the forms.
For example, when loading a LibreOffice Calc spreadsheet with pyexcel-ods,
values formatted as currency are read as a string with a floating point
number followed by a space and a currency designation, so:
'18746.3048283886 USD'
. Since a more friendly representation may be
desired, the api provides for successive application of a chain of
formatting functions. Two such functions
are provided with the library.
Here is a concrete example which I use to fill my tax forms from a LibreOffice Calc spreadsheet. It parses US and Israel currency designations, rounds floating-point numbers, and represents negative numbers with parentheses rather than a minus sign.
"fill pdf tax forms"
import sys
from pdfforms import pdfforms
def main(data_file):
"do it"
for filepath in pdfforms.fill_pdfs(
data_file,
sheet_name="f1040",
value_transforms=[parse_currency, format_number],
):
print(filepath)
def parse_currency(value):
"try to read a number with a currency mark"
try:
if value.endswith((" USD", " ILS")):
return float(value.split()[0])
except (AttributeError, ValueError):
pass
return value
def format_number(value):
try:
format_str = "({:,})" if value < 0 else "{:,}"
return format_str.format(round(abs(value)))
except (TypeError, ValueError):
return value
if __name__ == "__main__":
main(sys.argv[1])