Динамически вставлять содержимое в PDF-файлы с помощью PHP - PullRequest
2 голосов
/ 09 марта 2009

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

Я кратко рассмотрел http://us.php.net/pdf и FPDF, но мне было интересно, какой конкретный метод я бы использовал для вставки этих данных.

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

Кто-нибудь может указать мне правильное направление? У меня есть опыт работы с PHP, но не с редактированием / генерацией PDF-документов из php.

РЕДАКТИРОВАТЬ: Да, этот коммерческий сценарий http://www.setasign.de/products/pdf-php-solutions/setapdf-linkreplacer/ делает именно то, что мне нужно.

Ответы [ 4 ]

3 голосов
/ 09 марта 2009

Пока это выглядит так, будто это моя лучшая ставка:

http://www.setasign.de/products/pdf-php-solutions/setapdf-linkreplacer/

Попытка получить ее копию, обновит сообщение с результатами.

2 голосов
/ 10 марта 2009

Без использования Adobe LiveCycle Designer самый простой способ создать собственный PDF-файл - это использовать файл FDF. Существует множество способов сделать это, один из которых - загрузить двоичные файлы из Adobe и установить их на свой сервер. Но ничего из этого действительно не нужно. Все, что вам нужно, это PDF-файл с заполняемыми формами и простой скрипт, который делает и файл FDF. FDF просто содержит данные, которые необходимо заполнить, и указатель на файл PDF, который необходимо заполнить. Я использую это для наших рабочих расписаний. Данные поступают в веб-форму, но должны быть статичными и безобразными, используя бумагу 30-летней давности. Вот как будет выглядеть ваш fdf-файл (как с кодом, так и в формате raw):

 $file = "http://www.example.com/blankpdfform.pdf";
 $data = "%FDF-1.2\n%âãÏÓ\n1 0 obj\n<< \n/FDF << /Fields [ ";
 foreach($datafields as $field => $val) {

      $data.='<< /T ('.$field.') /V ('.trim($val).')>> ';
 }

 $data.="] \n/F (".$file.") /ID [ <".md5(time()).">\n] >>".
      " \n>> \nendobj\ntrailer\n".
      "<<\n/Root 1 0 R \n\n>>\n%%EOF\n";

Конечный результат:

 %FDF-1.2\n%âãÏÓ\n1 0 obj\n<< \n/FDF << /Fields [<< /T (email) /V (email@address.com)>>
 /F ("http://www.example.com/blankpdfform.pdf") /ID [ <"SomeUniqueID">
 ] >> \nendobj\ntrailer<<
 /Root 1 0 R 
 >>
 %%EOF
1 голос
/ 09 марта 2009

Вы можете сделать это с расширением FPDI для FPDF http://www.setasign.de/products/pdf-php-solutions/fpdi/

это позволяет fpdf импортировать существующие файлы PDF, хотя я не уверен, как можно заменить ссылки.

Я бы сказал, что лучшим вариантом будет сгенерировать все это в php или просто сохранить его в html, заменить ссылки в html, а затем преобразовать html в pdf.

0 голосов
/ 09 марта 2009

Если у вас есть шаблон PDF с токеном электронной почты, который хранится в файле на веб-сервере, вы можете сделать это довольно легко. Сначала вам нужно прочитать файл с помощью PHP. Вы можете сделать это, используя метод file_get_contents. Затем используйте str_replace, чтобы заменить токен электронной почты реальным. Наконец, предоставьте файл с правильным типом содержимого.

$pdf = file_get_contents( 'template.pdf' );
$pdf = str_replace( '__EMAIL__TEMPLATE__', $userEmail, $pdf );
header( 'Content-type: application/pdf' );
print $pdf;

Ссылки на документы: http://ca2.php.net/manual/en/function.file-get-contents.php http://ca2.php.net/manual/en/function.str-replace.php

(Я на самом деле не пробовал этого, и вы можете столкнуться с некоторыми проблемами, поскольку PDF - это двоичный формат, но теоретически он должен работать ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...