2009-03-23 17 views
5

Używam zestawu narzędzi reportlab w Pythonie do generowania raportów w formacie PDF. Chcę użyć niektórych wstępnie zdefiniowanych części dokumentów już opublikowanych w formacie PDF, aby włączyć je do wygenerowanego pliku PDF. Czy jest to możliwe (i jak) wykonać to w raporcie lub w bibliotece Pythona?Jak dołączyć stronę do pliku PDF w dokumencie PDF w Pythonie

Wiem, że mogę korzystać z innych narzędzi, takich jak narzędzie PDF Toolkit (pdftk), ale szukam rozwiązania opartego na Python.

Odpowiedz

6

Obecnie używam PyPDF do czytania, pisania i łączenia istniejących plików PDF i ReportLab w celu generowania nowej treści. Korzystanie z dwóch pakietów wydawało się działać lepiej niż jakikolwiek pakiet, który udało mi się znaleźć.

+0

Tak, podoba mi się ten pakiet. Pierwszy przykład jest tym, czego chcę, spróbuję. – Jiri

1

Istnieje dodatek do ReportLab — PageCatcher.

+0

OK, to wydaje się być odpowiednie narzędzie. Niestety jest w komercyjnej wersji zestawu narzędzi reportlab i nie mogę go użyć bezpośrednio - używam wersji opensource. I nie ma ceny - wygląda na to, że muszę wynegocjować jakąś cenę z raportem przed pobraniem. – Jiri

2

Jeśli chcesz umieścić istniejące strony PDF w dokumentach Reportlab, polecam pdfrw. W przeciwieństwie do PageCatchera jest bezpłatny.

Użyłem go do kilku projektów, w których muszę dodać kody kreskowe itp. Do istniejących dokumentów i działa bardzo dobrze. Na stronie projektu znajduje się kilka z nich: examples, jak używać go z Reportlab.

Kilka rzeczy, aby pamiętać, iż:

Jeśli źródło PDF zawiera błędy (ze względu na program pochodzący następujące PDF spec niedoskonale na przykład), pdfrw może zawieść, chociaż coś Adobe Reader nie ma widocznych problemów czytanie pliku PDF. pdfrw nie jest obecnie bardzo odporny na błędy.

Ponadto, pdfrw działa jako całkowicie agnostyczny względem rzeczywistej zawartości strony PDF, którą umieszczasz. Na przykład nie można użyć pdfrw do sprawdzenia strony, aby zobaczyć, czy zawiera ona pewien ciąg tekstu w prawym dolnym rogu. Jednak, jeśli nie musiszzrobić nic takiego, powinieneś być w porządku.