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):
Stosowanie? Banalnie proste
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
- połączony po stronie serwera z plikiem pdf – jak wyżej
- 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)
- 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.
Ale nici z polskimi znakami… nie da się nimi wypełniać pól
polecam nowsza wersje, xfdf :)