使用php动态地将内容插入到pdf文件中

时间:2009-03-08 23:48:30

标签: php pdf

我有一个单词的电子书,在转发给我的客户之前我转换为PDF。我想动态地将他们的电子邮件地址插入电子书中的所有链接,以允许他们访问我网站上仅限会员的内容,并且我希望动态执行此操作,作为图书下载过程的一部分。

我简要地查看了http://us.php.net/pdf和FPDF,但我想知道我用什么具体技术来插入这些数据。

我在想我会插入一个电子邮件令牌字符串,我想要电子邮件地址,然后使用某些功能更新PDF文档中的这些令牌。

有人能指出我正确的方向吗?我有PHP经验,但不是从php编辑/生成pdf文档。

编辑:是的,这个商业剧本http://www.setasign.de/products/pdf-php-solutions/setapdf-linkreplacer/完全符合我的需要。

4 个答案:

答案 0 :(得分:3)

到目前为止看起来这是我最好的选择:

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

尝试使用它的eval副本,将更新结果。

答案 1 :(得分:2)

不使用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@address.com)>>
 /F ("http://www.example.com/blankpdfform.pdf") /ID [ <"SomeUniqueID">
 ] >> \nendobj\ntrailer<<
 /Root 1 0 R 
 >>
 %%EOF

答案 2 :(得分:1)

您可以使用FPDI扩展为FPDF http://www.setasign.de/products/pdf-php-solutions/fpdi/

执行此操作

它使fpdf能够导入现有的pdf文件,但我不确定如何替换链接。

我会说你最好的镜头是在php中生成整个内容,或者只是将其保存在html中,替换html中的链接,然后将html转换为pdf。

答案 3 :(得分:-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;

文档链接: http://ca2.php.net/manual/en/function.file-get-contents.php http://ca2.php.net/manual/en/function.str-replace.php

(我实际上没有试过这个,你可能会遇到一些问题,因为PDF是二进制格式,但理论上它应该有用......)

相关问题