Wypełnianie formularzy PDF – forge_fdf w pythonie

Przytrafiło się ostatnio wypełnić przygotowany przez klienta formularz PDF. Ot, umieścić na gotowej formie klucz identyfikacyjny, dać odwiedzającemu PDFa, który to może go wypełnić i odesłać. Formularz jest identyfikowany bardzo łatwo dzięki rzeczonemu kluczowi. Pojawił się jednak jeden zasadniczy problem – jak? Nie chcieliśmy kupować rozwiązań komercyjnych, a poszukiwania w internecie na niewiele się zdały. Rozwiązań kilka znaleźliśmy, ale żadne nie chciało działać tak “out-of-box”. Stanęło w końcu na pdf toolkit (pdftk) i ręcznym generowaniu plików fdf (plików z informacją o zawartości pól w” formularzu PDF). Miało być łatwo i przyjemnie, a przynajmniej tak się wstępnie zapowiadało. Cóż, nie do końca. Łatwo znaleźć coś, co zwie się “forge_fdf” – biblioteka w PHP do tworzenia rzeczonych plików fdf. Jej port w Pythonie też łatwo via google wyklikać. Tu jest jednak jeden, tyci problemik – sportowana biblioteka nie działa. Czemu? Bo gdzieś po drodze zniknęły jej istotne fragmenty. Zmuszeni więc byliśmy przygotować wersję działającą (a przynajmniej spełniającą nasze wymagania):

forge_fdf

Stosowanie? Banalnie proste

?View Code PYTHON
1
2
3
4
fdf = forgeFDF("", {'numeric': '123', 'key': 'klucz123'}, {}, (),() );
f = open("data.fdf",'wb')
f.write(fdf)
f.close()

Powyższe utworzy plik data.fdf, w którym zapisany będzie słownik wartości. Po połączeniu z PDFem pola ‘numeric’ i ‘key’ będą miały wypełnione odpowiednie wartości. By dokładnie poznać możliwości biblioteki, polecam zainteresowanie się przykładami orginalnego forge_fdf (tego napisanego w php).

By połączyć plik *.fdf z *.pdf wywołujemy pdftk:

pdftk form.pdf fill_form data.fdf output form.filled.pdf

Na koniec jedna mała uwaga – pdftk i wypełnianie form nie zadziała z formami wyplutymi przez np. Adobe Acrobat i pdfami w wersji >5. By móc się spokojnie pobawić i skorzystać z uroków PDFa, wystarczy stworzyć formularz np. w OpenOffice’ie i wyeksportować dokument do pliku PDF. Voila.

Przygotowany plik fdf może być przekazany użytkownikowi w jeden w trzech sposobów

  1. połączony po stronie serwera z plikiem pdf – jak wyżej
  2. wysłany klientowi bezpośrednio z wciśniętym do środka adresem pliku pdf. Ścieżkę tą podajemy jako pierszy parametr funkcji forgeFDF. Wtyczka Acrobat Reader powinna poprawnie obsłużyć typ zawartości (application/vnd.fdf)
  3. przez wywołanie http://server.com/plik.pdf#fdf=http://server.com/give_me_fdf – plik pdf zostanie otworzony automatycznie przez wtyczkę Acrobat Reader i grzecznie zaciągnie sobie zawartośc formularzu z podanej ścieżki (tu: http://server.com/give_me_fdf).

Mam nadzieję, że powyższe przyda się kiedyś komuś – temat jest na prawdę interesujący, a sama technologia (PDF) oferuje więcej, niż sobie wyobraża większość użytkowników.

2 Responses to “Wypełnianie formularzy PDF – forge_fdf w pythonie”


  1. 1 Apud

    Ale nici z polskimi znakami… nie da się nimi wypełniać pól

  2. 2 light

    polecam nowsza wersje, xfdf :)

Leave a Reply