我使用 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();
我的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();