magento FPDF错误:有些数据已经输出,无法发送PDF文件

时间:2013-12-11 13:40:07

标签: php magento pdf fpdf fpdi

我遇到了下一个问题:

我尝试在一个magento phtml中看到一个pdf,这是我的代码:

$fileName = Mage::getConfig()->getOptions()->getMediaDir()."/pdf/Gutschein-v2.pdf";

$pdf = new FPDI();
$pdf->addPage();
$pdf->setSourceFile($fileName);

$tplIdx = $pdf->importPage(1);
// use the imported page and place it at point 10,10 with a width of 100 mm

$pdf->useTemplate($tplIdx, 10, 10, 100);

// now write some text above the imported page
$pdf->SetFont('Helvetica');
$pdf->SetTextColor(255, 0, 0);
$pdf->SetXY(30, 30);
$pdf->Write(0, 'This is just a simple text');

//ob_start();
$pdf->Output();
//ob_end_flush(); 

当我评论ob_start();我在屏幕上看到下一个错误: FPDF错误:某些数据已经输出,无法发送PDF文件

当我不评论我看到正常的pdf格式而不是白页时 我的pdf,我试图用纯PHP做到这一点,一切都很好的例子: http://milton.bommelme.com/fpdf/pddf.php

但是使用magento有些东西不是直觉,也许我不知道如何加载pdf或其他东西。我对magento很新。

谢谢。

1 个答案:

答案 0 :(得分:0)

错误“某些数据已经输出,无法发送PDF文件”出现,因为Magento已经发送了标头输出。请查看http://php.net/manual/en/function.header.php以获取更多信息。

因此FPDF的Output()函数也发送头信息,它将'Content-Type'声明为'application / pdf'。这里的主要问题是您不能只在HTML标记之间放置PDF文件。 PDF是一种自己的格式,需要一种比HTML更不同的预设机制。就像在示例链接中一样,您给PDF文件嵌入了带有正确Content-Type声明的embed-tag:

<embed width="100%" height="100%" name="plugin" src="http://milton.bommelme.com/fpdf/pddf.php" type="application/pdf">

还有其他方法可以在HTML中嵌入PDF文件:Recommended way to embed PDF in HTML?

编辑:例如,您可以创建两个视图操作。第一个呈现HTML。在HTML内部,embed-tag调用将生成PDF的第二个动作。 我不认为这是最好的解决方案,但它应该很容易实现:

class Foo_Pdf_Controller_SomeController extends Mage_Core_Controller_Front_Action
{

    public function viewAction()
    {
        // View stuff
    }

    public function getPdfAction()
    {
        // create pdf

        $fpdf->output();
    }
}

embed-tags调用getPdf()动作:

<embed width="100%" height="100%" name="plugin" src="url_to_getPdf_action" type="application/pdf">