2009-03-08 1 views
2

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

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

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

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

EDIT: Да, этот коммерческий скрипт http://www.setasign.de/products/pdf-php-solutions/setapdf-linkreplacer/ выполняет именно то, что мне нужно.

ответ

-4

Если у вас есть шаблон 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; 

Doc ссылка: http://ca2.php.net/manual/en/function.file-get-contents.php http://ca2.php.net/manual/en/function.str-replace.php

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

+0

да им не уверен, если я могу сделать поиск и замену в PDF-документе Но я дам ему шанс.:) – Ian

+1

Это не работает. PDF, очевидно, не является простым текстом, но, в отличие от PostScript, даже текстовые части - это простой текст. Что вы можете сделать, так это сохранить PostScript или другой (DocBook?) «Исходный код» и сделать замену или динамическую генерацию, используя ps2pdf, docbook2pdf, что угодно. –

1

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

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

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

1

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

$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 protected])>> 
/F ("http://www.example.com/blankpdfform.pdf") /ID [ <"SomeUniqueID"> 
] >> \nendobj\ntrailer<< 
/Root 1 0 R 
>> 
%%EOF 
Смежные вопросы