首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >PHP创建动态pdf

PHP创建动态pdf
EN

Stack Overflow用户
提问于 2014-08-06 11:47:38
回答 5查看 1.5K关注 0票数 2

我试图使用php创建一个动态pdf,

提交表单后,我可以加载pdf,但当我尝试编辑pdf时,它将无法加载。

我缩短了代码以保持它向前。

PDF结构

代码语言:javascript
运行
AI代码解释
复制
Your Name is : <<NAME>>

PHP动态脚本

代码语言:javascript
运行
AI代码解释
复制
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;

如果我注释掉输出,它会很好地加载表单,但是当我尝试运行函数来替换占位符时,它就无法加载。以前有人做过这样的事吗?

EN

回答 5

Stack Overflow用户

发布于 2014-08-20 00:23:53

我已经尝试过您的代码,我可以假设有以下原因之一可能导致问题:

当您调用pdf_replace()时,PHP返回对替换()函数的不推荐的通知。这会破坏PDF结构并导致PDF无法加载。从PHP5.3.0开始,这个函数就不再受欢迎了。简单的解决方案是开始使用替换()

代码语言:javascript
运行
AI代码解释
复制
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,但是有很多这样的库。

票数 0
EN

Stack Overflow用户

发布于 2014-08-20 01:11:02

我是一个网页设计师,我使用ezPDF来创建pdf文件来制作报告,并在任何浏览器中查看它。下面是我寻找教程的网页:example.php3?ExampleID=4804

我希望这会有帮助:)

票数 0
EN

Stack Overflow用户

发布于 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();

代码语言:javascript
运行
AI代码解释
复制
<?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;

?>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25168902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档