Есть ли какая-либо PHP-библиотека PDF, которая может заменить переменные-заполнители в существующем документе PDF, ODT или DOCX и генерировать PDF-файл в качестве конечного результата, не закручивая макет?
Требования:
Не требуется сторонний веб-сервис
Возможность работать на общем веб-хостинге была бы идеальной (никаких бинарных инсталляций / пакетов не требуется)
Имейте в виду, что библиотека, которая может загружать существующий файл PDF и вставлять текст программно в определенную позицию, недостаточно для моего варианта использования.
Насколько показывает мое исследование, нет библиотеки, которая может это сделать:
TCPDF может создавать документы только с нуля
FPDI может читать существующие шаблоны PDF, но может только добавлять содержимое программно (без замены шаблона)
Существуют различные библиотеки шаблонов DOCX / ODT, но они не выводят PDF
PHPDOCx утверждает, что может делать именно то, что мне нужно, но они не предлагают пробную версию, и я не собираюсь покупать кошку в сумке, особенно если нет, как кажется, в Интернете нет другого продукта , который это. Мне трудно поверить, что они могут сделать это без проблем – если вы успешно сделали это с помощью продукта, пожалуйста, оставьте здесь.
Я что-то пропускаю?
Есть ли способ сделать это с помощью PDF-форм? Я создаю исходные документы в OpenOffice 3.
Я могу использовать стандартные команды Linux (например, pdftk
доступен, попробовав это прямо сейчас).
Обновление: * Argh! * Меня вызвали из офиса, и щедрость истекло. Запуск новой щедрости: насколько показывает мое тестирование, ни одно решение не работает для меня отлично.
Обновление II: я буду искать подход pdftk в ближайшее время, но я также начинаю еще одну награду за еще один раунд сбора дополнительного ввода. Этот вопрос теперь видел 1300 репрессий в наградах, должен быть какой-то рекорд 🙂
Пекка,
Я уже рассмотрел это ранее, я думаю, вы можете использовать pdftk (утилиту командной строки), чтобы заполнить форму PDF, используя файлы данных FDF / XFDF, которые вы можете легко создать из PHP. Это был лучший вариант, который я видел до сих пор, хотя вполне может быть родная библиотека.
pdftk весьма полезен вообще, стоит взглянуть на него.
Обновление: посмотрите здесь: http://php.net/manual/en/book.fdf.php
Это не очень практично, но для полноты: если у вас уже есть шаблон ODT, вы можете очень хорошо сохранить это как шаблон. Изменение содержимого Content.xml OpenDocument и замена замещающих элементов в нем довольно просто. Если это так, вы можете использовать unoconv
или pyodconverter
для преобразования ODT в окончательный PDF.
unoconv -f pdf -o final.pdf template.odt
Очень очевидно, что для этого требуется полная настройка OpenOffice (UNO и Writer) на веб-сервере. И, очевидно, не каждый веб-хостер пошел бы с этим! ха-ха. Даже если это просто на любой установке Debian или Fedora. Скорость выполнения, вероятно, также не будет звездной. Но тогда это может быть самый чистый подход, поскольку OOo управляет обоими форматами лучше, чем любой PHP-класс.
Вы не сделали бесплатное требование, поэтому я собираюсь предложить LiveDocX . У них есть бесплатный вариант, но он не соответствует вашему требованию сторонней стороны , а это значит, что вам придется лицензировать сервер).
Для этого есть также пакет ZF:
Вы рассматривали использование чего-то вроде 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/
Это не будет соответствовать вашему мандату «нет двоичного», но в PDFlib есть хорошая система шаблонов, использующая «блоки», которые представляют собой метаданные, специфичные для PDFlib, которые вы можете «рисовать» в PDF, используя плагин Acrobat, а затем программно заполнять во время выполнения с одним вызовом функции для каждого блока. Блоки могут быть текстовыми (с псевдо-html для простого форматирования текста шрифта face / size / color), изображений (большинство всего, что может отображаться в формате PDF) и самих PDF-файлов, поэтому вы можете вставлять целые другие документы или фрагменты документов в блоке.
Он может делать это из ранее существовавшего PDF (загружать его, вставлять контент / блок заполнения / etc .., output) или создавать новый PDF с самого начала (серьезно больно делать программно, но возможно).
Я успешно использовал блоки для создания простой системы шаблонов для клиента, где они могли бы нарисовать блоки в документе с небольшими битами метаданных, встроенных, которые затем анализировались на стороне сервера, чтобы создать форму для запроса данных для вставки в эти блоки во время создания документа.
fpdf, и на нем есть еще одно расширение, которое я не помню, что позволяет вам импортировать шаблоны
Лучше всего было бы сгенерировать весь документ «на лету», с шаблоном, определяемым программным путем с помощью fpdf или чего-то подобного. Таким образом, ваш текст не будет обрезаться абзацами или что-то в этом роде, и вы можете легко позиционировать изображения / другие элементы по мере необходимости.
PDFlib хорош, и ваш общий хост может иметь его уже. Мне удалось довольно легко выполнить такие вещи, как http://www.housejockey.com/flyers/12/80/MyListing.pdf, с помощью PDFlib, но основной техникой является текст абзаца абзаца …, который вы сказали не хорошо.
Я также работал с abcPDF для ASP / ASP.NET и нашел, что он хорош для того, чтобы выталкивать внутри PDF-файлов, но опять же не предназначен для копания внутри существующих текстовых областей.
Работа с надежными шаблонами и заполнителями – это скачок сложности над выпадающим контентом. Устранение существующего текста в формате PDF обычно невозможно. Это требует дополнительной структуры документа, и это то, что предназначены для дорогостоящих программных пакетов данных, таких как XMPie и Creo …
PHPDOCX начинает звучать очень хорошо! Удачи.
Поздно, но вы можете использовать конструктор шаблонов OpenSource https://github.com/applicius/dhek/releases , чтобы определить pkaceholders / areas над любым существующим PDF-файлом, а затем загрузить его на PHP (как это формат JSON) и записать соответственно в оригинальном PDF-файле используя fpdf lib, для создания пользовательского PDF с динамическими данными, записанными на.
Хотя вы точно не задали вопрос, вы можете сделать это в два этапа: используя некоторые php templating sytem ( smarty , dwoo ) для создания html-страницы, а затем используя такие инструменты, как Html2Pdf, конвертируйте их в pdf. Я использую его, и результаты хорошие (никаких проблем с макетом страницы и т. Д.),
Конечно, это зависит от ваших входных документов (вы можете использовать html вместо PDF / ODT в качестве источника) и сложность их компоновки.
Хорошо, я пытаюсь помочь вам решить проблему немного.
Сначала ответ за пару вопросов.
Q – Я что-то пропускаю?
A – Нет. Существует библиотека PHP PDF, которая может заменить переменные-заполнители в существующем PDF-файле и генерировать PDF-файл в качестве конечного результата, не закручивая макет
Q – Есть ли способ сделать это с помощью PDF-форм?
A – Да. absolutelly tric, чтобы сделать это, используя PDF-формы
Для обоих ответов вы можете использовать Justin Koivisto fill pdf form field php library. Для более подробной информации перейдите на страницу http://koivi.com/fill-pdf-form-fields/tutorial.php . Посмотрите там дополнительную информацию.
Кредит Джастину Койвисто за его работу
PS
Чтобы обходной путь для отображения таблицы, такой как вывод из формы PDF, рассмотрите, пожалуйста, некоторое чтение в руководстве пользователя Oracle Business Intelligence Publisher – Создание шаблона PDF
Я смог заменить значения placeholder в .docx через библиотеку github под названием phpdocx (https://github.com/djpate/phpdocx) (а не ссылку на нее в другом месте)
Затем я успешно разместил переносимую версию libreoffice на веб-сервере своего хоста, которую я вызываю с помощью PHP, чтобы выполнить преобразование командной строки из .docx и т. Д. В pdf. на лету. У меня нет прав администратора на веб-сервере моего хоста. Вот мое сообщение в блоге о том, что я сделал:
Это частично отвечает на ваш вопрос. Надеюсь, это полезно.
Я добавлю этот новый ответ, поскольку расширение FDF PHP уже мертво.
Я только что выполнил эти инструкции и закончил выполнение одного скрипта perl, а затем команду pdftk
Я прекрасно понимаю, что это далеко не настоящее решение для PHP, но оно надежно и довольно легко реализовать на любой платформе * nix.
Описанные там инструменты также доступны на Debian, на случай, если вам интересно.
Это немного поздно, но взгляните на библиотеку PDFTemplate, она действительно делает то, что вы хотите. Вы можете создавать файлы Open Document (odt) и добавлять в него заполнители. Библиотека PDFTemplate может заполнить эти заполнители (даже с изображениями) и создать файл PDF.
Файлы ODT с заполнителями в PDF
Если вы хотите использовать внешнюю службу, PDF Otter может решить вашу проблему. Есть бесплатный план, который вы можете подписаться и сразу интегрировать в свое приложение.
Дополнительные профи с использованием PDF Otter включают в себя меньшее количество зависимостей в вашем приложении и более дружественный опыт при выборе полей, которые вам нужно заполнить (я использовал ручную пробную и ошибочную информацию, чтобы получить позиции полей в прошлом, и это занимало много времени ).