dompdf在wordpress上创建有缺陷的pdf

时间:2016-08-30 08:12:48

标签: php wordpress dompdf

我想用dompdf在我的wordpress主页上创建一个pdf。本地我的电脑与xampp没有问题,一切正常。 在wordpress上我使用的是插件" PHP Code for Posts"。我复制到插件文件夹的dompdf文件夹。 pdf已创建但有缺陷。

<?php

if(isset($_POST['button']))
{
    require_once("dompdf/dompdf_config.inc.php");
    spl_autoload_register('DOMPDF_autoload');

    function pdf_create($filename, $paper, $orientation, $stream=TRUE)  
    {
        $dompdf = new DOMPDF();
        $dompdf->set_paper($paper, $orientation);
        $dompdf->load_html('TEST');
        $dompdf->render();
        $dompdf->stream($filename.".pdf");
    }

    $filename = 'file_name';
    $dompdf = new DOMPDF();
    pdf_create($filename, 'A4', 'portait');  
}

?>

<form method="post" >
    <p>Test: <input type="text" name="price" /></p>
    <p><input type="submit" name="button" value="PDF" /></p> 
</form>

我希望有人可以帮助我。我不知道为什么它在本地工作,在wordpress上它会创建一个有缺陷的文件。

更新:

这是用记事本打开有缺陷文件时的代码。

<!DOCTYPE html>

<html lang="de-DE">

<head>


<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1">

<link rel="profile" href="http://gmpg.org/xfn/11">

<link rel="pingback" href="http://test-homepage.de/xmlrpc.php">


<!--[if lt IE 9]>
<script src="http://test-homepage.de/wp-content/themes/zerif-pro/js/html5.js"></script>
<link rel="stylesheet" href="http://test-homepage.de/wp-content/themes/zerif-pro/css/ie.css" type="text/css">
<![endif]-->

<title>Test &#8211; test-homepage</title>
<link rel="alternate" type="application/rss+xml" title="test-homepage &raquo; Feed" href="http://test-homepage.de/feed/" />
        <script type="text/javascript">
            window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/72x72\/","ext":".png","source":{"concatemoji":"http:\/\/test-homepage.de\/wp-includes\/js\/wp-emoji-release.min.js?ver=4.5.3"}};

1 个答案:

答案 0 :(得分:0)

如果您想坚持使用当前使用的Wordpress插件并启用输出缓冲(webserver和php.ini都可以控制输出缓冲;请参阅PHP.net页面上的output buffering section,这可能是一个解决方案更多细节。

<?php
if(isset($_POST['button']))
{
    // make sure that output buffering has been enabled
    if (ob_start()) {
        // clear previous contents from the server output cache
        ob_clean();
        try {
            require_once("dompdf/dompdf_config.inc.php");
            spl_autoload_register('DOMPDF_autoload');

            $filename = 'file_name';
            $paper= 'A4';
            $orientation= 'portrait';

            $dompdf = new DOMPDF();
            $dompdf->set_paper($paper, $orientation);
            $dompdf->load_html('TEST');
            $dompdf->render();
            $dompdf->stream($filename.".pdf");

            // make sure the content of the buffer is sent to the client.
            ob_flush();
            // terminate the script to make sure no additional content is sent.
            exit(0);
        } catch (Exception $ex) {
            error_log(sprintf("PDF generation failed with %s in line %d", $ex->getMessage(), $ex->getLine()));
        }
    } else {
        // log a message in default error log
        error_log("Output buffering could not be enabled (PDF routine)");
    }
}

?>

调试您的设置

正如您所说,您对PHP非常陌生,请创建一个包含以下内容的文件:

<?php
phpinfo();

将文件上传到您的服务器并使用浏览器打开文件,向下滚动,直至找到&#34;配置&#34; &GT; &#34; PHP Core&#34;。在下面的列表中,搜索条目&#34; output_buffering&#34;。如果设置为&#34; 0&#34;,则已通过php.ini禁用输出缓冲。如果它已被禁用,则页面的所有输出都将直接发送到客户端,并且没有编程方式可以在不更改服务器设置的情况下完成所需的操作。

enter image description here

启用缓冲可能有多种方法,即您的提供商可能允许通过Web配置软件更改某些设置,或者您可以在您的网络目录中添加.htaccess文件,以按照here所述启用它。

另一次更新

正如您已经发现的那样,输出缓冲已正确启用,因此我们应该能够修改输出缓冲区以创建PDF,即使之前已提供输出。我复制了你的代码,在一些输出已经发送到浏览器之后运行了PHP部分,同样的情况发生在你的网页上,静态HTML内容也包含在我的PDF文档中。主要问题是Wordpress内部不使用输出缓冲并将输出直接发送到浏览器。

这是我所做的解决问题的方法 - &gt;在index.php:

中尽快启动输出缓冲
<?php ob_start(); ?>

启用缓冲后,我能够控制缓冲区并根据需要生成PDF文件。

进一步诊断

我只是想确保我们没有遗漏某些内容,您是否可以将其添加到PDF生成代码中:

if(isset($_POST['button']))
{
  $sent = headers_sent($file, $line);
  die("The output started in {$file} and at line {$line}");
}