Php dompdf在wordpress上创建有缺陷的pdf

Php dompdf在wordpress上创建有缺陷的pdf,php,wordpress,dompdf,Php,Wordpress,Dompdf,我想用dompdf在我的wordpress主页上创建一个pdf。使用xampp的本地计算机没有问题,一切正常。 在wordpress上,我正在使用插件“用于帖子的PHP代码”。我复制到插件文件夹的dompdf文件夹。 pdf已创建,但有缺陷 <?php if(isset($_POST['button'])) { require_once("dompdf/dompdf_config.inc.php"); spl_autoload_register('DOMPDF_autol

我想用dompdf在我的wordpress主页上创建一个pdf。使用xampp的本地计算机没有问题,一切正常。 在wordpress上,我正在使用插件“用于帖子的PHP代码”。我复制到插件文件夹的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"}};

测试–;测试主页
window.\u wpemojiSettings={“baseUrl”:“https:\/\/s.w.org\/images\/core\/emoji\/72x72\/”,“ext:.png”,“source:{“concatemoji”:“http:\/\/test homepage.de\/wp包括\/js\/wp emoji release.min.js?ver=4.5.3”};

如果您想坚持使用当前使用的Wordpress插件并启用输出缓冲,这可能是一个解决方案(webserver和php.ini都可以控制输出缓冲;有关详细信息,请参阅php.net页面上的

<?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)");
    }
}

?>
启用缓冲后,我可以控制缓冲区并根据需要生成PDF文件


进一步诊断 我只是想确保我们没有遗漏什么,您能否将此添加到您的PDF生成代码中:

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

下载PDF文件并在记事本或类似程序中打开它。检查文档的标题,在大多数情况下,您会发现一个PHP错误或警告消息扰乱了PDF标题。还要检查文件大小,如果文件大小为0KB,则DOMPDF lib会在将文档流式传输到客户端之前将其保存在临时文件夹中t、 起初,文件没有0 KB。使用记事本,我也找不到任何错误。我在上面的问题中添加了记事本中的代码。“在wordpress上,我使用的插件“用于帖子的PHP代码”-这可能是问题的一部分…该插件很可能是为了插入PHP代码的短片段(对应于它们的输出)进入呈现的帖子内容–但这并不会阻止整个模板“围绕”它被呈现,因此最终你仍然会得到一个完整的HTML文档,而这不是一个有效的PDF。因为它看起来不像你在代码中使用任何WP功能(?),将其称为独立脚本可能更容易。正如Cbroe所提到的,插件通常只向Wordpress添加功能,在大多数情况下,它将作为Wordpress布局的一部分加载,因此将包含模板中的HTML。根据您的php.ini设置,可能会有可用的破解;我将添加一个示例作为示例n回答以显示其工作原理。我之所以使用此插件是因为短代码。我想要创建一个woocommerce目录,而不是“添加到购物车”按钮,我想要一个用于创建pdf的按钮。我从csv文件导入此目录的产品。我的csv导入插件有一个修复保存的模板,我可以在其中添加php短代码。因此我可以肯定,我总是在所有产品页面上都有pdf创建按钮。也许会有一个更优雅的方式,但我没有学习php,所以这对我来说是非常新和困难的。谢谢。但我得到了和以前一样的结果。pdf也有缺陷,记事本中的代码实际上与我上面发布的相同。我不知道e您的服务器上已启用错误日志记录,如果您有权访问日志文件目录,但我假设您在非自托管状态下无法直接访问它。请使用
die
语句交换上述
error\u log
条目,并查看是否已访问其中一条语句。它可能是一条路径(即DOMPDF不可用)或者正如前面提到的权限问题。我认为路径是正确的,因为如果我用错误的路径更改它,我的主页上会出现错误,并且不会创建pdf。我用die函数更改了error_log函数,但是我没有得到任何语句,我应该如何达到这个语句?我更新了上面的答案,并添加了一些调试步骤您需要执行。让我们知道您找到了什么!再次感谢。我无法更改php.ini,但我现在已将php_值输出_缓冲添加到.htcaccess文件。输出_缓冲的本地值现在已打开,但输出_缓冲的主值仍然没有值。我不知道如何更改主值。通过此设置,创建了pdf文件它仍然有缺陷。
<?php ob_start(); ?>
if(isset($_POST['button']))
{
  $sent = headers_sent($file, $line);
  die("The output started in {$file} and at line {$line}");
}