FPDF错误:部分数据已输出,无法发送PDF

问题描述 投票:0回答:16

我正在为我的项目使用 fpdf 库,并且我使用它来扩展 drupal 模块之一。这些行

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

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

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

php drupal fpdf
16个回答
54
投票

为了让 fpdf 正常工作,除了 fpdf 生成的内容之外,根本不能有 any 输出。例如,这将起作用:

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

虽然这不会(请注意开始

<?
标签之前的前导空格)

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

此外,这也不起作用(

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();
?>

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


42
投票

在顶部添加

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(); 
?>

26
投票

给我一个错误如下:

FPDF error: Some data has already been output, can't send PDF

克服这个错误: 转到

fpdf.php
,转到第 996 行

function Output($name='', $dest='')

之后进行如下更改:

function Output($name='', $dest='') {   
    ob_clean();     //Output PDF to so

5
投票

尝试在不使用“BOM 注释”选项的情况下保存文件,即在 Adobe Dreamweaver 中,将文件另存为...,取消选中文件名下方显示“包含 Unicode 签名 (BOM)”的框。

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

并将其设置为您创建的其他文件的默认值,这将使您将来免去很多麻烦。


3
投票

您好,您的页面顶部有会话标题吗? 或任何包括 如果您尝试在页面顶部添加此代码,它应该可以正常工作。

<?

while (ob_get_level())
ob_end_clean();
header("Content-Encoding: None", true);

?>

干杯:-)


3
投票

就我而言,我设置了:

ini_set('display_errors', 'on');
error_reporting(E_ALL | E_STRICT);

当我请求生成报告时,浏览器中会显示一些警告(例如使用已弃用的功能)。
转动

off
选项,报告生成成功。
    


2
投票

如果您没有得到什么文件和行发送某些内容的提示,您的包含/需要文件中可能存在编码不匹配。

对于我来说

    display_errors
  • 采用 ANSI 编码,
    我的 
  • fpdf.php
  • 是 UTF-8 编码的并且
    我的数据库连接包含是UTF-8编码的
  • (这个UTF-8编码确实引发了FPDF错误。我不得不将其切换回ANSI)

2
投票
pdf-generator.php

。然后再处理警告

    


2
投票

error_reporting(0)

最后,在
ob_start(); require ('fpdf.php');

之后

output()

这对我有用! =)


2
投票


1
投票

ob_end_flush();

行前

ob_start();



1
投票

$pdf->Output();



0
投票

需要('fpdf.php');

require_once ('pdf/fpdf.php'); $pdf = new FPDF(); $pdf->AddPage(); $pdf->SetFont('Arial','B',16); $pdf->Cell(40,10,'Hello World!'); $pdf->Output(F,'/var/www/html/PATH/filename.pdf'); ob_end_flush();
http://www.fpdf.org/

http://www.fpdf.org/es/tutorial/tuto1.htm


0
投票


0
投票
仔细检查 PHP 文件的编码

并确保它不是 UTF-8 以外的编码。错误的代码编辑器(或 FTP 上传?)可能会扰乱文件的编码,在这种情况下,本线程中提到的其他修复均无济于事。


0
投票

解决此问题的方法如下: 第 1 步:确保没有先前输出

确保在生成 PDF 之前没有发送空格或任何其他输出。这包括任何包含的文件中开始标记之前的任何空格或换行符。

<?php require('fpdf.php'); $pdf = new FPDF(); $pdf->AddPage(); $pdf->SetFont('Arial','B',16); $pdf->Cell(40,10,'¡Hola, Mundo!'); $pdf->Output(); ?>

	
© www.soinside.com 2019 - 2024. All rights reserved.