如何使mpdf在chrome中输出pdf内联?

时间:2019-05-23 06:29:59

标签: php wordpress mpdf

我在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();

0 个答案:

没有答案