Biblioteka szablonów PHP PDF z wyjściem PDF?

Czy istnieje jakaś biblioteka PHP PDF, która może zastąpić zmienne zastępcze w istniejącym dokumencie PDF, ODT lub DOCX i wygenerować plik PDF jako efekt końcowy, bez spieprzania układu?

Wymagania:

  • Nie potrzebuje usług internetowych stron trzecich

  • Możliwość uruchomienia na współdzielonym hostingu byłaby idealna (nie wymaga instalacji binarnych / pakietów)

Pamiętaj, biblioteka, która jest w stanie załadować istniejący plik PDF i wstawianie tekstu programowo w określonym miejscu to za mało dla mojego przypadku użycia.

Z moich badań wynika, że nie ma biblioteki, która mogłaby to zrobić:

  • TCPDF może generować dokumenty tylko od zera

  • FPDI może odczytywać istniejące szablony PDF, ale może dodawać zawartość Tylko programowo (bez wymiany zmiennej szablonu)

  • Istnieją różne biblioteki szablonów DOCX/ODT, ale nie generują plików PDF

PHPDOCx twierdzi, że jest w stanie zrobić dokładnie to, czego potrzebuję - ale nie oferują wersji próbnej i nie zamierzam kupić kota w torbie, zwłaszcza gdy wydaje się, że nie ma żadnego innego produktu w sieci, który to robi. Trudno mi uwierzyć, że mogą to zrobić bez problemów - jeśli udało Ci się to zrobić za pomocą produktu, napisz tutaj.

Czy coś przeoczyłem?

Czy można to zrobić za pomocą formularzy PDF? I tworzenie dokumentów źródłowych w OpenOffice 3.

Być może będę w stanie użyć standardowych poleceń Linuksa (pdftk jest dostępny na przykład, wypróbowanie tego teraz.)

Aktualizacja: *Argh!Zostałem wezwany z biura, a nagroda wygasła w międzyczasie. Rozpoczynając nowy bounty: o ile moje testy pokazują, żadne rozwiązanie nie działa dla mnie doskonale jeszcze.

Update II: wkrótce będę szukał podejścia pdftk, ale zaczynam również kolejny nagroda za jeszcze jedną rundę zbierania dodatkowego wkładu. To pytanie ma teraz 1300 punktów rep w nagrodach, musi być jakiś rekord :)

 58
Author: Pekka 웃, 2010-12-11

15 answers

Pekka,

Zajrzałem do tego wcześniej, myślę, że można użyć pdftk (Narzędzie wiersza poleceń), aby wypełnić formularz PDF za pomocą Plików danych FDF/XFDF, które można łatwo wygenerować z poziomu PHP. To była najlepsza opcja jaką do tej pory widziałem, choć może być też rodzima biblioteka.

Pdftk jest całkiem przydatny w ogóle, warto się temu przyjrzeć.

Update: zobacz tutaj: http://php.net/manual/en/book.fdf.php

 13
Author: Orbling,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-11 12:33:39

Nie jest to zbyt praktyczne, ale dla kompletności: jeśli masz już szablon ODT, możesz zachować go jako szablon. Modyfikowanie zawartości OpenDocument.xml i zastępowanie w nim elementów zastępczych jest dość proste. Jeśli tak, możesz użyć unoconv lub pyodconverter aby przekształcić ODT w ostateczny plik PDF.

unoconv -f pdf -o final.pdf template.odt

Oczywiście wymaga to pełnej konfiguracji OpenOffice (UNO i Writer) na serwerze. I oczywiście nie każdy webhoster pójdzie z tym! haha. Nawet jeśli jest to proste w konfiguracji Debiana lub Fedory. Szybkość wykonania prawdopodobnie też nie byłaby gwiezdna. Ale wtedy może to być najczystsze podejście, ponieważ OOo rządzi obydwoma formatami znacznie lepiej niż jakakolwiek Klasa PHP kiedykolwiek mogła.

 15
Author: mario,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-23 14:44:37

Nie wprowadziłeś darmowego wymogu, więc proponujęLiveDocX . Mają darmową opcję, ale nie spełnia ona twojego , a nie wymogu 3rd party, co oznacza, że będziesz musiał licencjonować ją na serwer).

Istnieje również Pakiet ZF do tego:

 7
Author: Gordon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-11 12:37:03

Rozważałeś użycie czegoś takiego jak xsl:formatowanie obiektów (XSL:FO)? Zasadniczo są to dokumenty XML, które są przetwarzane i przekształcane w pliki PDF. Wykonywanie ciągów-lub lepiej, DOM-zamienników w tym zakresie powinno być dość proste. Obsługuje osadzanie obrazów, linków, adnotacji itp.

To nie jest PHP, ale istnieje wiele wrapperów PHP do niego wraz ze sposobami korzystania z niego przez exec, itp. Nie jest ideałem, ale całkowicie zajmuje się częścią szablonu. Aby uzyskać więcej informacji: http://techportal.inviqa.com/2009/12/16/transforming-xml-with-php-and-xsl/

Jest implementacja dostępna jako projekt Apache - http://xmlgraphics.apache.org/fop/

 5
Author: CaseySoftware,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-14 15:08:58

To nie spełni twojego "zakazu binarnego", ale PDFlib ma ładny system szablonów za pomocą "bloków", które są metadanymi specyficznymi dla PDFlib, które można "narysować" w pliku PDF za pomocą wtyczki Acrobat, a następnie programowo wypełnić w czasie wykonywania za pomocą jednego wywołania funkcji na blok. Bloki mogą być tekstowe( z pseudo-html dla prostego formatowania czcionki twarzy / rozmiar/kolor), obrazy (większość wszystkiego, co może być wyświetlane w formacie PDF) i same pliki PDF, dzięki czemu można osadzić całe inne dokumenty lub fragmenty dokumentów w bloku.

Może to zrobić z wcześniej istniejącego pliku PDF (załaduj go, Wstaw zawartość/wypełnij blok/itp.., wyjście), lub zbudować nowy PDF od podstaw (poważnie bolesne do zrobienia programowo, ale możliwe).

Z powodzeniem użyłem bloków do wygenerowania prostego systemu szablonów dla Klienta, w którym mogli rysować bloki do dokumentu z małymi bitami metadanych osadzonych, które następnie były analizowane po stronie serwera, aby wygenerować formularz z prośbą o wstawienie danych do tych bloków w czasie generowania dokumentu.

 3
Author: Marc B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-29 05:41:20

Fpdf i jest na nim jeszcze jedno rozszerzenie, którego nie pamiętam, które pozwala na import szablonów

 3
Author: renevdkooi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-24 12:03:04

Najlepiej byłoby wygenerować cały dokument w locie, z szablonem zdefiniowanym programowo za pomocą fpdf lub czegoś podobnego. W ten sposób Twój tekst nie zostanie odcięty akapitami lub innymi podobnymi rzeczami i możesz łatwo pozycjonować obrazy/inne elementy zgodnie z wymaganiami.

 3
Author: John Cartwright,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-26 22:41:02

PDFlib jest ładny, a Twój współdzielony host może już go mieć. Udało mi się osiągnąć takie rzeczy http://www.housejockey.com/flyers/12/80/MyListing.pdf z PDFlib dość łatwo, ale podstawową techniką jest drop-In tekst akapitu...to, co powiedziałeś, nie jest dobre.

Pracowałem również z abcPDF dla ASP / ASP.NET i okazało się, że jest całkiem dobry do szturchania wewnątrz plików PDF, ale ponownie, nie zaprojektowany do kopania wewnątrz istniejących obszarów tekstu.

Praca z solidnym szablony i elementy zastępcze to skok złożoności w stosunku do zawartości rozwijanej. Ponowne dodanie istniejącego tekstu do pliku PDF jest zazwyczaj niemożliwe. Wymaga dodatkowej struktury dokumentu, do czego są zaprojektowane drogie pakiety oprogramowania do zmiennych danych, takie jak XMPie i Creo...

PHPDOCX zaczyna brzmieć naprawdę dobrze! Powodzenia.

 2
Author: Matt Montag,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-06 06:28:54

Późno, ale można użyć opensource template designer https://github.com/applicius/dhek/releases , aby zdefiniować pkaceholdery / obszary nad dowolnym istniejącym plikiem PDF, następnie załaduj go w PHP (jako format JSON) i zapisz odpowiednio na oryginalnym pliku PDF za pomocą FPDF lib, aby wygenerować niestandardowy plik PDF z dynamicznymi danymi zapisanymi na nim.

 2
Author: cchantep,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-05 07:58:27

Ale nie dokładnie to, o co prosiłeś, możesz rozważyć zrobienie tego w dwóch krokach: użycie jakiegoś systemu szablonów php (smarty, dwuo ) do wygenerowania strony html, a następnie za pomocą narzędzi takich jak Html2Pdf przekonwertować go do formatu pdf. Używam go, a wyniki są dobre (brak problemów z układem strony itp.)

Oczywiście zależy to od twoich dokumentów wejściowych (czy możesz użyć html zamiast PDF / ODT jako źródła) i złożoności ich układu.

 1
Author: ts.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-30 10:14:13

Ok staram się pomóc ci rozwiązać problem trochę.

Najpierw odpowiedź na kilka twoich pytań.

P-czy coś przeoczyłem?

A-Nie. Istnieje Biblioteka PHP PDF, która może zastąpić zmienne zastępcze w istniejącym pliku PDF i wygenerować plik PDF jako wynik końcowy, bez spieprzania układu

Q-Czy można to zrobić za pomocą formularzy PDF?

A-Tak. absolutely tric to zrobić jest za pomocą formularza PDF

Dla obu odpowiedź możesz użyć Justin Koivisto wypełnij formularz pdf pole php library. Więcej szczegółów można znaleźć na stronie http://koivi.com/fill-pdf-form-fields/tutorial.php . Zajrzyj tam, aby uzyskać dodatkowe informacje.

Podziękowania dla Justina Koivisto za jego pracę

P. S

Dla obejścia wyświetlania tabeli jak wyjście z formularza pdf zapraszamy do lektury Oracle Business Intelligence Publisher User ' s Guide-Tworzenie szablonu PDF

 1
Author: Gajahlemu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-30 07:09:16

Udało mi się zastąpić wartości zastępcze wdocx poprzez bibliotekę na GitHubie o nazwie phpdocx (https://github.com/djpate/phpdocx) (nie ten wymieniony gdzie indziej)

Następnie z powodzeniem umieściłem przenośną wersję libreoffice na serwerze mojego hosta, którą wywołuję za pomocą PHP, aby wykonać konwersję wiersza poleceń .docx itp. do pdf. w locie. Nie mam uprawnień administratora na serwerze mojego hosta. Oto mój wpis na blogu o tym, co ja "did": {]}

Http://geekswithblogs.net/robertphyatt/archive/2011/11/19/converting-.docx-to-pdf-or-.doc-to-pdf-or-.doc.aspx

To częściowo odpowiada na twoje pytanie. Mam nadzieję, że to pomoże.

 1
Author: Robert Hyatt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-20 02:00:00

Dodam nową odpowiedź, ponieważ rozszerzenie PHP FDF jest teraz martwe.

Po prostu wykonałem te instrukcje i skończyło się na wykonaniu jednego skryptu Perla, a następnie polecenia pdftk

Jestem całkiem świadomy, że nie jest to prawdziwe rozwiązanie PHP, ale jest niezawodne i dość łatwe do wdrożenia na każdej platformie * nix.

Narzędzia tam opisane są również dostępne w Debianie, tak na wszelki wypadek, gdybyś się zastanawiał.

 1
Author: Capsule,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-31 09:47:54

Jest trochę późno, ale spójrz na bibliotekę PDFTemplate robi exatly to, co chcesz. Możesz tworzyć otwarte pliki dokumentów (ODT) i dodawać do nich symbole zastępcze. Biblioteka PDFTemplate może wypełnić te elementy zastępcze (nawet obrazami) i utworzyć plik PDF.

Pliki ODT z elementami zastępczymi do PDF

 0
Author: Nikolai Fischer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-09 18:18:21

Jeśli chcesz skorzystać z usługi zewnętrznej, PDF Otter może rozwiązać twój problem. Istnieje bezpłatny plan, który możesz zarejestrować i natychmiast zintegrować z aplikacją.

Dodatkowe zalety korzystania z PDF Otter obejmują mniej zależności w aplikacji i bardziej przyjazne doświadczenie wybierając pola, które należy wypełnić (używałem ręcznych prób i błędów, aby uzyskać pozycje pól w przeszłości, i było to czasochłonne).

 0
Author: mr_mariusz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-24 22:19:55