【问题标题】:Some data has already been output, can't send PDF file部分数据已输出,无法发送PDF文件
【发布时间】:2015-03-12 07:54:37
【问题描述】:

我在 php 中创建 pdf 时使用 fpdf,运行时出现此错误:

Notice: Undefined index: id in C:\xampp1\htdocs\arvin2\public\pdf2\id.php on line 3
FPDF error: Some data has already been output, can't send PDF file

这是我的php代码(report.php):

<form action="http://localhost/pdf2/id.php" method="post" target="_blank">
<input type="text" name="id">
<input type="submit" name="submitpdf" value="Print"/>
</form>

另一个(eto.php):

<?php
require('mysql_table.php');
$id=$_POST['id'];

class PDF extends PDF_MySQL_Table
{
function Header()
{
//Title
$this->SetFont('Arial','',18);
$this->Cell(0,6,'Type of Leave',0,1,'C');
$this->Ln(10);
//Ensure table header is output
parent::Header();
}
}

mysql_connect('localhost','root','');
mysql_select_db('auth');


$pdf=new PDF();
//First table: put all columns automatically
$pdf->AddPage();
//Second table: specify 3 columns
$pdf->AddCol('leave_id',20,'','C');
$pdf->AddCol('fullname',40,'Fullname');
$pdf->AddCol('type_of_leave',40,'Type of Leave','R');
$prop=array('HeaderColor'=>array(255,150,100),
        'color1'=>array(210,245,255),
        'color2'=>array(255,255,210),
        'padding'=>2);
$pdf->Table('select leave_id, fullname, type_of_leave from application where     id_no="$_POST[id]"',$prop);
$pdf->Output();

?>

当我输入时:

if(isset($_POST['submitpdf']))
{
    $id=$_POST['id'];
    //your code goes here
}

错误提示:

Parse error: syntax error, unexpected '$pdf' (T_VARIABLE) in C:\xampp1\htdocs\arvin2\public\pdf2\id.php on line 34

输出应该是在pdf表单中打印的文本字段中输入的所有ID号信息。

【问题讨论】:

  • 对于“一些数据已经输出”,您应该确保&lt;?php ... ?&gt; 代码周围没有任何额外的(空格?)字符。对于未定义的索引,看起来您的 id 表单字段始终为空。
  • 小心 SQL 注入。
  • “额外输出”是错误信息,所以通过删除 ID 问题,另一个也会成功
  • 没有空格,先生..
  • @AndréDaniel 是的,它总是空着,我该如何解决?

标签: php pdf-form


【解决方案1】:

把 if isset 放在你的代码上。即

if(isset($_POST['submitpdf']))
{
//$id=$_POST['id'];
//your code goes here
}

这是为了确保您的代码仅在读取表单数据后才能运行

编辑:

我猜你的新错误来自选择字符串。

$pdf->Table('select leave_id, fullname, type_of_leave from application where     id_no="$_POST[id]"',$prop);

改成这样:

$pdf->Table("select leave_id, fullname, type_of_leave from application where id_no=".$_POST[id],$prop);

【讨论】:

  • 解析错误:语法错误,意外的 '' (T_ENCAPSED_AND_WHITESPACE),在 C:\xampp1\htdocs\arvin2\public\pdf2\ 中需要标识符 (T_STRING) 或变量 (T_VARIABLE) 或数字 (T_NUM_STRING) id.php 在第 29 行
  • 不,它们不在同一个文件中
  • 先生,现在它说:解析错误:语法错误,第 30 行 C:\xampp1\htdocs\arvin2\public\pdf2\id.php 中的意外 '$pdf' (T_VARIABLE)
  • 能否请您更新上面发布的代码和问题?我无法想象为什么它会给你一个错误。顺便检查一下你的分号和括号
  • 请尝试应用必要的更改。就像 if isset 一样。以及用于选择的修改后的字符串。看看它是否会起作用。然后再次更新您的问题
【解决方案2】:

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

您可以使用 2 行代码来解决此问题

  1. 你应该写页面顶部

ob_start()

  1. 在您的 PDF 输出行之前 $pdf->Output(); 添加新行

ob_end_flush();

$pdf->输出();

我认为您可以解决这个问题并享受更多乐趣!

谢谢

Md Salahuddin Khan

MegamindIT

【讨论】:

    【解决方案3】:

    我遇到了同样的错误。

    Data has already been sent to output, unable to output PDF file
    

    这意味着在使用 mPDF 创建 pdf 之前,一些数据存储在发送到浏览器的缓冲区中。因此无法创建 PDF。

    只要这样做.. 如果您正在为 pdf 准备数据,请在页面第一行的 php 内置函数下方添加。

    op_start();
    

    并在 mPDF 代码之前(在您调用 mpdf 之前)之前添加以下 php 内置函数

    ob_end_flush();
    
    require_once __DIR__ . '/vendor/autoload.php';
    
    $mpdf = new \Mpdf\Mpdf();
    $mpdf->WriteHTML($html);
    $mpdf->Output();
    

    这样它会在处理 mPDF 之前清除所有缓冲区输出。

    【讨论】:

      【解决方案4】:

      您应该在要输出pdf的数据之前使用。

      ob_start();
      

      然后使用 ob_end_clean()。

      ob_end_clean();
      $pdf->Output(time().'.pdf', 'D')
      

      【讨论】:

        猜你喜欢
        • 2018-01-10
        • 2017-01-05
        • 2020-05-15
        • 2019-08-30
        • 2017-09-28
        • 1970-01-01
        • 2012-03-17
        • 1970-01-01
        相关资源
        最近更新 更多