Php dompdf在wordpress上创建有缺陷的pdf
我想用dompdf在我的wordpress主页上创建一个pdf。使用xampp的本地计算机没有问题,一切正常。 在wordpress上,我正在使用插件“用于帖子的PHP代码”。我复制到插件文件夹的dompdf文件夹。 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
<?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 – test-homepage</title>
<link rel="alternate" type="application/rss+xml" title="test-homepage » 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}");
}