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

时间:2012-02-28 02:42:05

标签: php drupal fpdf

我正在为我的项目使用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格式。

15 个答案:

答案 0 :(得分:40)

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

<?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工作的必要条件。

答案 1 :(得分:18)

给我一​​个错误如下:
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

答案 2 :(得分:18)

在顶部添加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(); 
?>

答案 3 :(得分:4)

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

在Notepad ++上,您应该选择菜单:编码,“在没有BOM的情况下以UTF-8编码”。

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

答案 4 :(得分:2)

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

<?

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

?>
欢呼: - )

答案 5 :(得分:2)

FPDF错误消息将指向发送某些内容的PHP Line。

如果你没有提示什么文件&amp;行发送一些内容,您可能在include / require文件中存在编码不匹配。

对我来说

  • fpdf.php是ANSI编码的,
  • 我的pdf-generator.php是UTF-8编码和
  • 我的database-connect-inlude是UTF-8编码的(这种UTF-8编码确实引起了FPDF错误。我不得不将其切换回ANSI)

答案 6 :(得分:2)

就我而言,我已经设定了:

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

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

答案 7 :(得分:1)

第一步 检查文件夹的权限 第二步 把这个

ob_start(); 
行前

$pdf->Output();

答案 8 :(得分:1)

如果您在PDF生成之前输出代码输出通知/警告,请尝试将其关闭。 error_reporting(0)。然后在

之后处理警告

答案 9 :(得分:1)

我使用了以下内容,它对我有用

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

答案 10 :(得分:0)

您需要调用库

  

require('fpdf.php');

<?php
require('fpdf.php');

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

http://www.fpdf.org/

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

答案 11 :(得分:0)

添加到脚本的开头

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
#include <fcntl.h>

//lock.c is the file name
void lock() {
    struct flock fl;

    fl.l_type = F_WRLCK;
    fl.l_len = 10;
    fl.l_start = 0;
    fl.l_whence = SEEK_SET;
    fl.l_pid = getpid();

    int fd1 = open("lock.c", O_RDWR);
    printf("Try to set the lock!\n");
    int res = fcntl(fd1, F_SETLKW, &fl);
    printf("Set the lock with status: %d\n", res);

    sleep(20);
}

int main(void)
{
    lock();
}

最后,在$./lock Try to set the lock! Set the lock with status: 0

之后
ob_start();
require ('fpdf.php');

对我有用! =)

答案 12 :(得分:0)

致命错误:未捕获的异常'Exception'和消息'FPDF错误:已经输出了一些数据,无法发送PDF文件(输出始于/home/asri123/public_html/bill/invoice/invoice.php:743 )'/home/asri123/public_html/bill/invoice/fpdf.php:271中的堆栈跟踪:#0 /home/asri123/public_html/bill/invoice/fpdf.php(1052):FPDF->Error('Some data有一个...')#1 /home/asri123/public_html/bill/invoice/fpdf.php(1012):FPDF-> _ checkoutput()#2 /home/asri123/public_html/bill/invoice/mirasbill.php( 262):FPDF-> Output('MSFS / 2018-19 / 76 ...','D')#3 {main}放在第271行的/home/asri123/public_html/bill/invoice/fpdf.php中< / p>

答案 13 :(得分:0)

所包含的php文件中即使只有一个空格也会导致该警告。不应有任何形式的输出。

答案 14 :(得分:0)

另一个没有人在这里发布的答案... 仔细检查您的PHP文件的编码,并确保它不是UTF-8以外的其他内容。错误的代码编辑器(或FTP上传?)可能会使文件的编码混乱,在这种情况下,此线程中提到的其他修复均无济于事。