mpdf 生成空白页
mpdf generates blank page
所以我在尝试使用 mpdf 从 URL 生成 pdf 时遇到困难
代码:
<form action="generate.php" method="POST">
url: <input type="text" name="url"><br>
<input type="submit">
</form>
generate.php:
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$url = test_input($_POST["url"]);
$pdf=file_get_contents($url);
include('mpdf60/mpdf.php');
$mpdf=new mPDF();
$mpdf->debug = true;
$mpdf->WriteHTML($pdf);
$mpdf->Output();
exit;
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
Returns 没有错误,只是空白的 pdf 页面。
你没有详细说明正在 given.I 的 url 输入,希望 url 指向相同的 server.Else mpdf 将显示错误
您的 code.Please 检查没有任何文件权限问题。
我在使用 mPDF 5.6 时遇到了同样的问题。当我使用 xdebug 时,我发现了这两行:
$str = @preg_replace('/\&\#([0-9]+)\;/me', "code2utf('\1',{$lo})",$str);
$str = @preg_replace('/\&\#x([0-9a-fA-F]+)\;/me', "codeHex2utf('\1',{$lo})",$str);
如您所见,有“@”字符阻止错误输出。因此,如果您有 php >=7.0,您将永远不会收到有关 "e" 修饰符已弃用的错误。所以你所有的 HTML 在这些行之后都将是 NULL。
我更新了这个函数:
// mpdf/includes/functions.php
if (!function_exists('strcode2utf')) {
function strcode2utf($str,$lo=true)
{
//converts all the &#nnn; and &#xhhh; in a string to Unicode
if ($lo) { $lo = 1; } else { $lo = 0; }
// Deprecated modifier "E" in preg_replace
//$str = @preg_replace('/\&\#([0-9]+)\;/me', "code2utf('\1',{$lo})",$str); // blocked errors output!! wtf?
//$str = @preg_replace('/\&\#x([0-9a-fA-F]+)\;/me', "codeHex2utf('\1',{$lo})",$str);
$str = preg_replace_callback('/\&\#([0-9]+)\;/m',
function($num) use ($lo) {
return code2utf($num, $lo);
}, $str);
$str = preg_replace_callback('/\&\#x([0-9a-fA-F]+)\;/m',
function($num) use ($lo) {
return codeHex2utf($num, $lo);
}, $str);
return $str;
}
}
所以我在尝试使用 mpdf 从 URL 生成 pdf 时遇到困难 代码:
<form action="generate.php" method="POST">
url: <input type="text" name="url"><br>
<input type="submit">
</form>
generate.php:
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$url = test_input($_POST["url"]);
$pdf=file_get_contents($url);
include('mpdf60/mpdf.php');
$mpdf=new mPDF();
$mpdf->debug = true;
$mpdf->WriteHTML($pdf);
$mpdf->Output();
exit;
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
Returns 没有错误,只是空白的 pdf 页面。
你没有详细说明正在 given.I 的 url 输入,希望 url 指向相同的 server.Else mpdf 将显示错误
您的 code.Please 检查没有任何文件权限问题。
我在使用 mPDF 5.6 时遇到了同样的问题。当我使用 xdebug 时,我发现了这两行:
$str = @preg_replace('/\&\#([0-9]+)\;/me', "code2utf('\1',{$lo})",$str);
$str = @preg_replace('/\&\#x([0-9a-fA-F]+)\;/me', "codeHex2utf('\1',{$lo})",$str);
如您所见,有“@”字符阻止错误输出。因此,如果您有 php >=7.0,您将永远不会收到有关 "e" 修饰符已弃用的错误。所以你所有的 HTML 在这些行之后都将是 NULL。
我更新了这个函数:
// mpdf/includes/functions.php
if (!function_exists('strcode2utf')) {
function strcode2utf($str,$lo=true)
{
//converts all the &#nnn; and &#xhhh; in a string to Unicode
if ($lo) { $lo = 1; } else { $lo = 0; }
// Deprecated modifier "E" in preg_replace
//$str = @preg_replace('/\&\#([0-9]+)\;/me', "code2utf('\1',{$lo})",$str); // blocked errors output!! wtf?
//$str = @preg_replace('/\&\#x([0-9a-fA-F]+)\;/me', "codeHex2utf('\1',{$lo})",$str);
$str = preg_replace_callback('/\&\#([0-9]+)\;/m',
function($num) use ($lo) {
return code2utf($num, $lo);
}, $str);
$str = preg_replace_callback('/\&\#x([0-9a-fA-F]+)\;/m',
function($num) use ($lo) {
return codeHex2utf($num, $lo);
}, $str);
return $str;
}
}