我试图使用php创建一个动态pdf,
提交表单后,我可以加载pdf,但当我尝试编辑pdf时,它将无法加载。
我缩短了代码以保持它向前。
PDF结构
Your Name is : <<NAME>>
PHP动态脚本
set_time_limit(180);
//Create Variable Names
$name = $_POST['name'];
function pdf_replace($pattern, $replacement, $string) {
$len = strlen($pattern);
$regexp = '';
for($i = 0; $i <$len; $i++) {
$regexp .= $pattern[$i];
if($i < $len - 1) {
$regexp .= "(\)\-{0,1}[0-9]*\(){0,1}";
}
}
return ereg_replace ($regexp, $replacement, $string);
}
header('Content-Disposition: filename=cert.pdf');
header('Content-type: application/pdf');
//$date = date('F d, Y');
$filename = 'testform.pdf';
$fp = fopen($filename, 'r');
$output = fread($fp, filesize($filename));
fclose($fp);
//Replace the holders
$output = pdf_replace('<<NAME>>', $name, $output);
echo $output;
如果我注释掉输出,它会很好地加载表单,但是当我尝试运行函数来替换占位符时,它就无法加载。以前有人做过这样的事吗?
发布于 2014-08-20 00:23:53
我已经尝试过您的代码,我可以假设有以下原因之一可能导致问题:
当您调用pdf_replace()时,PHP返回对替换()函数的不推荐的通知。这会破坏PDF结构并导致PDF无法加载。从PHP5.3.0开始,这个函数就不再受欢迎了。简单的解决方案是开始使用替换()。
function pdf_replace($pattern, $replacement, $string) {
return preg_replace('/'.preg_quote($pattern,'/').'/', $replacement, $string);
}
如果您不能这样做,那么解决方案是要么编辑php.ini文件,要么编辑报告参数。可以将"^ E_DEPRECATED“添加到当前配置值中,以禁用已弃用的通知。其他选项是在脚本开头添加具有适当值的报告()。
我没有看到您使用的PDF,但是一些PDF生成器编码PDF源代码。在这种情况下,在那里查找文本是一个问题。例如,我在Mac上尝试了“打印到PDF”的功能,但是我无法在源代码中找到纯文本。因此,fopen或ereg_replace都可以抱怨文件格式错误。在这种情况下,您应该使用一些可以更巧妙地处理PDF的库。我更喜欢FPDF,但是有很多这样的库。
发布于 2014-08-20 01:11:02
我是一个网页设计师,我使用ezPDF来创建pdf文件来制作报告,并在任何浏览器中查看它。下面是我寻找教程的网页:example.php3?ExampleID=4804
我希望这会有帮助:)
发布于 2014-08-22 06:26:42
您的代码似乎有两个问题。
首先,ereg_replace()
是一个不推荐的函数。因此,php脚本抛出了一个错误,错误消息破坏了pdf结构。将函数更改为preg_replace(),它应该可以工作。
,其次,,我用一个pdf-表单样本尝试了你的代码。ereg_replace()似乎无法处理某些字符。在我使用的pdf-表单中,该函数在字符串( pdf-form数据)满足特定字符(即§
. )后截断它。这就是为什么即使您使用error_reporting(E_ALL ^ E_DEPRECATED);
,来抑制错误,即使这样,代码也不能工作。
所以,你最好去找preg_replace();
<?php
set_time_limit(180);
//Create Variable Names
$name = $_POST['name'];
function pdf_replace($pattern, $replacement, $string) {
$len = strlen($pattern);
$regexp = '';
for($i = 0; $i <$len; $i++) {
$regexp .= $pattern[$i];
if($i < $len - 1) {
$regexp .= "(\)\-{0,1}[0-9]*\(){0,1}";
}
}
return preg_replace ($regexp, $replacement, $string);
}
header('Content-Disposition: filename=cert.pdf');
header('Content-type: application/pdf');
//$date = date('F d, Y');
$filename = 'testform.pdf';
$fp = fopen($filename, 'r');
$output = fread($fp, filesize($filename));
//fclose($fp);
//Replace the holders
$output = pdf_replace('<<NAME>>', $name, $output);
echo $output;
?>
https://stackoverflow.com/questions/25168902
复制相似问题