我正在为我的项目使用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格式。
答案 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编码和答案 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();
?>
答案 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上传?)可能会使文件的编码混乱,在这种情况下,此线程中提到的其他修复均无济于事。