FPDF错误:某些数据已经输出,无法发送PDF

Won*_*der 27 php drupal fpdf

我正在为我的项目使用fpdf库,我正在使用它来扩展其中一个drupal模块.这些线

$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output();
Run Code Online (Sandbox Code Playgroud)

给我一个错误:FPDF错误:有些数据已经输出,无法发送PDF

我尝试在drupal区域名称test.php之外的单独文件中创建它,并且当它被查看时它工作.这里的任何人都知道为什么这不起作用?或者这里的任何人都可以指出一个正确的pdf库,我可以在drupal中使用它来查看HTML格式的PDF格式.

Gor*_*ley 43

为了使fpdf正常工作,除了fpdf生成之外,根本不能有任何输出.例如,这将起作用:

<?php
$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output();
?>
Run Code Online (Sandbox Code Playgroud)

虽然这不会(注意开始<?标记之前的前导空格)

 <?php
$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output();
?>
Run Code Online (Sandbox Code Playgroud)

此外,这也不会起作用(echo会破坏它):

<?php
echo "About to create pdf";
$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output();
?>
Run Code Online (Sandbox Code Playgroud)

我不确定drupal方面的东西,但我知道绝对零非fpdf输出是fpdf工作的要求.

  • 是的。那是你的问题。使用 `echo` 也会破坏 fpdf (我将编辑我的答案来表明这一点)。短标签与长标签应该没有什么区别,但是您必须确保 php 标签之外甚至没有一个字符。 (2认同)

小智 22

添加ob_start ();在顶部和末尾添加ob_end_flush();

<?php
    ob_start();
    require('fpdf.php');
    $pdf = new FPDF();
    $pdf->AddPage();
    $pdf->SetFont('Arial','B',16);
    $pdf->Cell(40,10,'Hello World!');
    $pdf->Output();
    ob_end_flush(); 
?>
Run Code Online (Sandbox Code Playgroud)


小智 18

给我一个错误如下:
FPDF error: Some data has already been output, can't send PDF

过来这个错误:转到fpdf.php那里,转到第996行

function Output($name='', $dest='')
Run Code Online (Sandbox Code Playgroud)

之后进行如下更改:

function Output($name='', $dest='') {   
    ob_clean();     //Output PDF to so
Run Code Online (Sandbox Code Playgroud)


小智 5

尝试在没有选项的情况下保存文件:“BOM 注释”,即在 Adob​​e Dreamweaver 中,您将文件另存为...,取消选中文件名下方的“包含 Unicode 签名(BOM) ”框。

在 Notepad++ 上,您应该选择菜单:Encoding,“ Encode in UTF-8 without BOM ”。

并将其设置为您创建的其他文件的默认值,它会在将来为您省去很多麻烦。