PHP шаблон библиотеки PDF с выводом PDF? - PullRequest
58 голосов
/ 11 декабря 2010

Существует ли какая-либо PHP PDF-библиотека, которая может заменить переменные-заполнители в существующем документе PDF, ODT или DOCX и сгенерировать файл PDF в качестве конечного результата, не испортив макет?

Требования:

  • Не требуется сторонний веб-сервис

  • Возможность запуска на общем веб-хостинге была бы идеальной (без бинарных установок / пакетов)обязательно)

Обратите внимание, библиотека, которая может загружать существующий файл PDF и вставлять текст программным способом в определенную позицию, недостаточно для моего варианта использования.

Насколько показывают мои исследования, нет библиотеки, которая могла бы сделать это:

  • TCPDF может генерировать документы только с нуля

  • FPDI может читать существующие шаблоны PDF, но может только добавлять содержимое программным способом (без замены переменных шаблона)

  • Существуют различные библиотеки шаблонов DOCX / ODT, но они не выводятPDF

PHPDOCx утверждает, что может делать именно то, что мне нужно - но они не предлагают пробную версию, и я не собираюсь покупать кошкув сумке, особенно если в сети, кажется, нет другого продукта , который делает это.Мне трудно поверить, что они могут сделать это без проблем - если вы успешно сделали это с помощью продукта, пожалуйста, напишите здесь.

Я что-то пропускаю?

Есть ли способсделать это с помощью форм PDF?Я создаю исходные документы в OpenOffice 3.

Возможно, я смогу использовать стандартные команды Linux (например, pdftk, попробую это прямо сейчас.)

Обновление: * Ааааа! * Меня вызвали из офиса, и за это время срок действия награды истек.Начало новой награды: насколько показывает мое тестирование, у меня пока что нет идеального решения.

Обновление II: Скоро я буду искать подход pdftk, но я также начинаю другоевознаграждение за еще один раунд сбора дополнительных материалов.Этот вопрос теперь видел 1300 точек повторений в наградах, должно быть, какой-то записи:)

Ответы [ 16 ]

15 голосов
/ 23 декабря 2010

Это не очень практично, но для полноты: если у вас уже есть шаблон ODT, вы вполне можете сохранить его в качестве шаблона.Изменить файл OpenDocument content.xml и заменить в нем заполнители довольно просто.Если это так, вы можете использовать unoconv или pyodconverter для преобразования ODT в окончательный PDF.

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

Очевидно, что для этого требуется полный OpenOfficeнастройка (UNO и Writer) на веб-сервере.И, очевидно, не каждый веб-хостер пойдет на это!ха-ха.Даже если это просто на любой установке Debian или Fedora.Скорость выполнения, вероятно, также не будет звездной.Но тогда это может быть самым чистым подходом, поскольку OOo управляет обоими форматами лучше, чем любой класс PHP.

13 голосов
/ 11 декабря 2010

Пекка,

Я рассмотрел это ранее, я думаю, вы можете использовать pdftk (утилита командной строки), чтобы заполнить PDF-форму, используя файлы данных FDF / XFDF, которые вы можете легко сгенерировать из PHP , Это был лучший вариант, который я когда-либо видел, хотя вполне может быть и нативная библиотека.

pdftk в целом довольно полезен, стоит посмотреть.

Обновление: Посмотрите здесь: http://php.net/manual/en/book.fdf.php

7 голосов
/ 11 декабря 2010

Вы не сделали бесплатным требованием, поэтому я собираюсь предложить LiveDocX . У них есть бесплатная опция, но она не отвечает вашим требованиям сторонних производителей , что означает, что вам придется лицензировать их на сервере)

Для этого есть также пакет ZF:

5 голосов
/ 24 декабря 2010

Рассматривали ли вы использовать что-то вроде XSL: Форматирование объектов (XSL: FO)?В основном это XML-документы, которые обрабатываются и превращаются в PDF-файлы.Делать строки - или лучше DOM - замены внутри этого должно быть довольно просто.Он поддерживает встраивание изображений, ссылок, аннотаций и т. Д.

Это не PHP, но есть несколько оберток PHP для него, а также способы его использования через exec и т. Д. Не идеально, но он заботится ошаблонная часть полностью.Для получения дополнительной информации: http://techportal.inviqa.com/2009/12/16/transforming-xml-with-php-and-xsl/

Существует реализация, доступная как проект Apache - http://xmlgraphics.apache.org/fop/

3 голосов
/ 27 января 2011

Лучше всего будет сгенерировать весь документ на лету, с шаблоном, определенным программно с использованием fpdf или чего-то подобного.Таким образом, ваш текст не будет обрезан абзацами или чем-то подобным, и вы сможете легко размещать изображения / другие элементы по мере необходимости.

3 голосов
/ 24 января 2011

fpdf и еще одно расширение, которое я не могу вспомнить, которое позволяет импортировать шаблоны

3 голосов
/ 29 декабря 2010

Это не будет соответствовать вашему «без двоичного» мандата, но PDFlib имеет хорошую систему шаблонов, использующую «блоки», которые представляют собой специфичные для PDFlib метаданные, которые можно «рисовать» в PDF с помощью Acrobatплагин, а затем программно заполнить во время выполнения с помощью одного вызова функции на блок.Блоки могут быть текстовыми (с псевдо-html для простого форматирования текста шрифта / размера / цвета), изображениями (большинство всего, что может быть отображено в PDF) и самими PDF-файлами, так что вы можете вставлять целые другие документы или фрагментыдокументов в блоке.

Он может сделать это из существующего PDF-файла (загрузить его, вставить содержимое / заполнить блок / и т. Д., Вывести) или создать новый PDF-файл с нуля (серьезно больно делать программно, новозможно).

Я успешно использовал блоки, чтобы сгенерировать простую систему шаблонов для клиента, где они могли рисовать блоки в документе с небольшими битами встроенных метаданных, которые затем анализировались на стороне сервера для генерацииформа для запроса данных для вставки в эти блоки во время создания документа.

2 голосов
/ 05 августа 2014

Поздно, но вы можете использовать конструктор шаблонов OpenSource https://github.com/applicius/dhek/releases, чтобы определять держатели / области pkace для любого существующего PDF, затем загружать его в PHP (в формате JSON) и писать соответствующим образом в исходный PDF, используя fpdf lib, создать пользовательский PDF с динамическими данными, записанными на.

2 голосов
/ 06 января 2011

PDFlib хорош, и ваш общий хост может уже иметь его.Мне удалось довольно легко выполнить такие вещи http://www.housejockey.com/flyers/12/80/MyListing.pdf с PDFlib, но основной прием - это текст выпадающего абзаца ... который, как вы сказали, бесполезен.с abcPDF для ASP / ASP.NET и нашел, что он довольно хорош для работы с PDF-файлами, но, опять же, не предназначен для копания в существующих текстовых областях.выше содержание вставки.Перефразирование существующего текста в формате PDF обычно невозможно.Требуется дополнительная структура документа, а это то, для чего предназначены дорогие программные пакеты с переменными данными, такие как XMPie и Creo ...

PHPDOCX начинает звучать действительно хорошо!Удачи.

1 голос
/ 31 января 2014

Я добавлю этот новый ответ, поскольку расширение FDF PHP теперь не работает.

Я только что следовал этим инструкциям и закончил тем, что выполнил один сценарий perl, а затем команду pdftk

Я прекрасно понимаю, что это далеко не настоящее PHP-решение, но оно надежное и довольно простое в реализации на любой платформе * nix.

Описанные здесь инструменты также доступны в Debian, только весли вам интересно.

...