我在wordpress插件中使用mpdf在chrome中显示pdf内联时遇到问题。 pdf在firefox中显示正常,如果我下载pdf也是如此。但是,我什至无法在chrome中显示hello world示例。 Chrome显示错误:无法加载PDF文档。
在mpdf中启用调试会显示此错误:检测到错误。 PDF文件生成被中止:unserialize():在两个浏览器中偏移7个字节的0时出错,但是如果我禁用调试,则它在Firefox中再次显示正常,并且在chrome中返回失败的加载错误。如果我下载了文件,也可以使用计算机上的文档查看器打开文件。使用文本查看器查看下载的pdf,我首先看到的是我网站的html(就像所有页面一样),而不是我要添加到$ mpdf的html。前几行如下。
<!DOCTYPE html>
<html lang="en-US">
<head>
最终,文档中有些奇怪的字符无法正确显示,我也不认为这是正确的。
在将html写入$ mpdf对象之前,我曾尝试清除任何其他数据的输出缓冲区,但我不确定自己在做什么,基本上只是把东西扔在墙上看什么坚持。在添加任何ob_命令之前,我已经看到了相同的行为,但是我将它们留在下面的代码中,因为这是我尝试过的最新操作。
<?php
function show_pdf() {
try {
$mpdf = new \Mpdf\Mpdf([
'orientation' => 'P',
'tempDir' => Plugin_BASE_DIR . '/includes/composer/vendor/mpdf/mpdfTmp'
#'debug' => true
]);
ob_start();
echo '<h1>Hello world!</h1>';
$html = ob_get_contents();
ob_end_clean();
$mpdf->WriteHTML($html);
$mpdf->Output('filename.pdf', \Mpdf\Output\Destination::INLINE);
exit;
} catch (\Mpdf\MpdfException $e) { // Note: safer fully qualified exception
// name used for catch
// Process the exception, log, print etc.
echo $e->getMessage();
}
} # function show_pdf() {
我希望pdf能够在所有浏览器中显示,并且文件中没有错误的数据,但是事实就是如此,我认为是造成问题的原因。有谁知道如何控制将什么输出到mpdf对象?
更新:我注意到(在诸如记事本之类的文本编辑器中打开下载的pdf)文档顶部的html是由主题模板页面创建的html。因此,我创建了一个新的模板页面文件,其中没有任何页眉或页脚等,而只是包含the_content()函数的while循环。
<?php /* Template Name: Project Template */
while ( have_posts() ) : the_post();
the_content();
endwhile;
?>
现在,当我在文本编辑器中打开pdf文件时,我看到两个回车,然后是%PDF-1.4,尽管chrome仍然抛出错误,但我认为这是进步。有谁知道如何在Wordpress中创建不添加任何空行或其他HTML的模板页面?我认为关键是要使页面仅包含pdf数据。
Update2 :我知道了。问题是页面模板html和pdf页面中显示的空格-除了pdf文本外,该页面的源代码中没有任何内容。我制作了一个新模板,只在其中显示PDF的功能,然后将该模板应用于我制作的显示pdf和poof的页面。现在可以在chrome和firefox中使用。
<?php /* Template Name: PDF Template */
show_pdf();