Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

Generowanie dokumentów w postaci plików PDF

Hej,

utrzymując tematykę generowania dokumentów z poprzedniego posta zdecydowałem się napisać co nieco o tworzeniu plików w formacie PDF.

Rozpatrzmy dwa scenariusze:
- generowanie dokumentu bezpośrednio w postaci PDF
- konwersja dokumentu z innego formatu

Nie zamierzam przedstawiać tu przekroju przez wszystkie znane lub dostępne rozwiązania i wymieniać ich wad czy zalet. Chciałbym opisać natomiast kilka znanych mi sposobów, które mogą być używane w większości praktycznych zastosowań.

Generowanie dokumentu

W tym przypadku istnieje przynajmniej kilka darmowych bibliotek, którymi możemy posłużyć. Niektóre wyraźnie różnią się od innych, skupiając się na odmiennych aspektach generacji dokumentu. Dzięki temu możemy wybrać bibliotekę, która najbardziej odpowiada naszym oczekiwaniom.

Wymienię tutaj trzy z nich:

- iText / iTextSharpSą to biblioteki dla programów napisanych w oparciu o .NET lub język Java. Udostępniają narzędzia ułatwiające m. in.: formatowanie tworzonego tekstu, generowanie tabel, tworzenie zakładek, czy dodawanie interaktywnych treści. Na stronie programu dostępne są kody źródłowe demonstrujące sposób użycia poszczególnych funkcjonalności udostępnianych przez biblioteką. W internecie można także odnaleźć tutoriale oraz inne informacje o tym jak należy używać jej we własnych aplikacjach.
Warto w tym przypadku zwrócić uwagę na licencję, która jest przystosowana bardziej do celów hobbystycznych lub darmowych aplikacji i często nie jest odpowiadająca dla zastosowań komercyjnych. Wykupienie wersji płatnej pozwala jednak na usunięcie pewnych ograniczeń. Więcej informacji można znaleźć na oficjalnej stronie biblioteki.

- PDFSharpBiblioteka zawierająca mniejsze ograniczenia licencyjne :), wydana na licencji MIT.
Obsługuje on formaty PDF od wersji 1.2 (Adobe Acrobat Reader 3.0) do 1.7 (Adobe Reader 8.0). Pełne wsparcie udostępnione jest dla wersji 1.4, w przypadku 1.5 obsługa niektórych funkcjonalności nie została jeszcze zaimplementowana.
Podejście do generowania w tym przypadku różni się nieco od opisanego wcześniej. Udostępnione metody operują na nieco niższym poziomie abstrakcji. Mamy do dyspozycji generowanie tekstu i możliwość wstawiania prostych elementów graficznych i obrazków, jednak za znaczną część formatowania odpowiada sam programista. Biblioteka nie udostępnia też np.: automatycznego wstawiania stron czy funkcji do tworzenia tabel. PDFSharp może być natomiast bardzo przydatny w przypadku dokumentów z grafiką, jeśli chcemy mieć pełną kontrolę nad dokładnym rozmieszczeniem wszystkich elementów.

- MigraDocWydana również na licencji MIT. Jest to biblioteka zbudowana na bazie PDFSharp, jednak udostępnia znacznie więcej funkcji związanych z formatowaniem dokumentów. Posiada również wsparcie dla tworzenia tabel, automatycznego dodawania stron itp. Przydatna dla generowania dokumentów PDF w przypadku, gdy nie jest ważne dokładne położenie elementów i ich formatowanie możemy pozostawić automatycznym funkcjom.
Wadą tej biblioteki jest nieco nieintuicyjne użycie np.: słyszałem o sytuacjach, kiedy daną funkcjonalność można teoretycznie zrealizować na kilka sposobów, jednak nie wszystkie z nich działają prawidłowo. Należy więc czasem uzbroić się w cierpliwość. Nie jest to jednak cechą wymaganą od programisty tylko przez tę jedną bibliotekę ;).

Na stronie PDFSharp i MirgaDoc możemy również znaleźć przykłady demonstrujące sposób ich użycia w konkretnych przypadkach.
Warto także zwrócić uwagę, że obu bibliotek można używać razem, korzystając z funkcjonalności każdej z nich w sposób jak najbardziej dopasowany do naszych potrzeb.

Konwersja istniejącego dokumentu

W tym scenariuszu istnieje możliwość użycia specjalnego konwertera. W przypadku bezpłatnych są to zwykle konwertery online. Nie znalazłem żadnej darmowej aplikacji offline, która oferowałaby taką funkcjonalność. Jeśli ktoś zna i chce się podzielić z innymi informacją o nim, zachęcam :).

Jeśli możemy użyć Automation for Office (opisany trochę szerzej w moim poprzednim artykule), mamy znacznie ułatwione zadanie. W Office 2007 można pobrać ze strony Microsoftu specjalny dodatek umożliwiający zapis w formacie PDF lub skorzystać z możliwości wydruku do pliku PDF przy użyciu odpowiedniej aplikacji.
Pamiętajmy jednak o zachowaniu ostrożności jeśli zamierzamy użyć tego rozwiązania w środowisku serwerowym.

Kolejną, jednak najbardziej żmudną w realizacji opcją jest stworzenie własnego konwertera plików z pewnego formatu do PDF. Wymaga to niewątpliwie dużo pracy, jednak jeśli napiszemy taki konwerter jako samodzielny moduł o odpowiednim poziomie uniwersalności, możemy użyć go również w swoich późniejszych projektach :).

Podsumowanie

Artykuł ten miał za zadanie zaprezentować kilka wybranych rozwiązań darmowych, które umożliwiają tworzenie nowych lub konwersję istniejących dokumentów do formatu PDF.
Jeśli znasz nie wymienioną tutaj bibliotekę lub sposób generacji PDFów wart uwagi, podziel się z innymi pisząc komentarz z informacją bądź linkiem :).

Pozdrawiam,

Łukasz

P.S.

W komentarzach pojawiło się kilka innych, ciekawych rozwiązań:
- ReportLab Open SourceSilnik do generacji PDFów, napisany w Pythonie. Dostępny również w płatnej wersji o większych możliwościach.
- LaTeXMożna tworzyć dokumenty w formacie LaTeXa, a następnie konwertować je do PDFów przy użyciu pdflatex.

Dziękuję wszystkim za komentarze :). 

Komentarze

0 nowych
ziggurad   12 #1 08.12.2010 12:35

PDFCreator - możliwość wygenerowania PDFa z każdego programu który ma funkcję wydruku, mi starcza w zupełności...

StawikPiast   11 #2 08.12.2010 14:01

zigguard, widze ze nie zakumales.
Chodzi o generowanie programowe a nie przez uzytkownika.

ziggurad   12 #3 08.12.2010 14:16

A, sorry, za szybko przeglądałem ;)

Airborn   8 #4 08.12.2010 14:18

Od biedy można też tworzyć dokumenty tekstowe w LaTeXie i generowania dokonywać przez pdflatex. Zalety: mnogość opcji. Wady: potrzeba dystrybucji programu z LaTeXem który sporo waży

iluzion   5 #5 08.12.2010 15:59

Jako miłośnik Pythona dodam do do listy http://www.reportlab.com/ oraz http://code.google.com/p/rst2pdf/. Na temat reStructuredText można znaleźć nieco więcej informacji u mnie na blogu:

http://www.dobreprogramy.pl/iluzion/reStructuredText,20843.html

djfoxer   18 #6 08.12.2010 16:52

Tego mi było trzeba! Dziękuje! :)

ŁukaszPL   3 #7 11.12.2010 15:27

@Airborn: Nie wiedziałem o takiej możliwości. Jeśli ktoś ma doświadczenie w tworzeniu LaTeXowych dokumentów albo musi dynamicznie generować wzory, to może być niezłe rozwiązanie. W przypadku aplikacji serwerowych potrzeba posiadania dystrybucji LaTeXa nie stanowi problemu, tylko trzeba sprawdzić czy nie sprawia wtedy problemów. Tak czy inaczej, rozwiązanie warte rozważenia i weryfikacji :).

Dziękuję wszystkim za komentarze :).
@iluzion: Wygląda na bibliotekę wartą uwagi :). Szkoda, że darmowa wersja ma tylko podstawową funkcjonalność, ale i tak pewnie łatwiej z nią niż samemu w formacie PDFa pisać ;).

@djfoxer: Nie wiem czy chodzi ci o artykuł, czy komentarz iluziona, ale cieszę się, że znalazłeś przydatne informacje :).

ŁukaszPL   3 #8 11.12.2010 19:51

Dziękuję wszystkim za komentarze :).

To zdanie powinno być na końcu mojego komentarza :P.

  #9 21.08.2015 16:23

Proponuję korzystanie z usług umożliwiających generowanie plików PDF, jest to szybsze i prostsze w wdrożeniu. Używanie HTML i CSS jest dużo prostsze niż projektowanie PDF-a.
Np. https://gemdocs.pl