我使用 FPDF 和 PHP 制作了一个 PDF 生成器,但它只能在刷新后工作

I made a PDF generator using FPDF and PHP, but it only works after a refresh

我的PDF只有在刷新页面后才会显示,否则会变成奇怪的符号。当它确实显示时,它的全屏(header 消失了),当我按返回时,URL 发生了变化,但页面仍然显示 DPF,当我刷新时,它又自行修复了。

我也在用JQuery手机,可能跟这个有关系。

这是一些代码:

<meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Hondensectie</title>
    <link rel="stylesheet" href="themes/themerollertest.min.css" />
    <link rel="stylesheet" href="themes/jquery.mobile.icons.min.css" />
    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.5/jquery.mobile.structure-1.4.5.min.css" />
    <script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
    <script src="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>
    <link type="text/css" rel="stylesheet" href="css/style.css"/>

这是头^^

<div data-role="page" data-theme="a">
<div data-role="header" style="overflow:hidden;" data-position="fixed">
    <h1>PDF Maker</h1>
    <a href="stafindex.php" class="ui-btn ui-corner-all ui-shadow ui-icon-back ui-btn-icon-left ui-btn-icon-notext">Back</a>
    <a href="stafindex.php" class="ui-btn ui-corner-all ui-shadow ui-icon-home ui-btn-icon-left ui-btn-icon-notext">Home</a>

</div>
<div data-role="content" data-theme="a">
<div data-role="collapsible" data-content-theme="a">      
<h4>Gebruikers</h4>
<p>              
    <section id="hondppp" data-ajax='false'>
    <?php
        ob_start();
        //call the FPDF library
        require('fpdfmap/fpdf.php');

        //A4 width : 219mm
        //default margin : 10mm each side
        //writable horizontal : 219-(10*2)=189mm

        //create pdf object
        $pdf = new FPDF('P','mm','A4');
        //add new page
        $pdf->AddPage();
        $pdf->Output();
        ob_end_flush();
    ?>   
    </section>
    </p>
    </div>
</div>

当您想要显示 PDF 文件时,服务器必须 return 一个包含 Content-Type: application/pdf header 的响应。据我所知,FPDF 在调用 Output 函数时设置此 header。但是,发送响应后不能设置 header,这通常发生在 HTML 的第一行与您的 PHP 脚本一起显示时。实际上我很惊讶你能看到 PDF,而且你没有得到臭名昭著的 "headers already sent" 错误(尽管如果你知道在哪里看的话,这个错误可能会显示在日志中的某个地方)。

关键是,不要在 PDF 内容前后写任何 HTML。您的整个 PHP 脚本应该只包含这些行:

    //call the FPDF library
    require('fpdfmap/fpdf.php');

    //A4 width : 219mm
    //default margin : 10mm each side
    //writable horizontal : 219-(10*2)=189mm

    //create pdf object
    $pdf = new FPDF('P','mm','A4');
    //add new page
    $pdf->AddPage();
    $pdf->Output();

在调用输出函数之前,使用 ob_end_clean 函数删除并放弃可能已经发送到浏览器的任何其他输出。

$pdf = new FPDF('P','mm','A4');
$pdf->AddPage();
ob_end_clean();  // clear out anything that may have already been output
$pdf->Output();