magento FPDF错误:一些数据已经输出,可以';t发送PDF文件


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

我遇到了下一个问题:

我试图在一个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或其他什么。我对马根托很陌生。

谢谢。

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

因此,FPDF的Output()函数也在发送标头信息,它将"内容类型"声明为"application/pdf"。这里的主要问题是你不能仅仅把一个PDF文件放在HTML标签之间。PDF是一种自己的格式,需要与HTML不同的预测机制。与您提供的示例链接一样,PDF文件由具有正确内容类型声明的嵌入标记嵌入:

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

还有其他方法可以将PDF文件嵌入HTML中:推荐将PDF嵌入HTML中的方法?

编辑:例如,可以创建两个视图操作。第一个渲染HTML。在HTML中,嵌入标记调用将生成PDF的第二个操作。我不认为这是最好的解决方案,但它应该很容易工作:

class Foo_Pdf_Controller_SomeController extends Mage_Core_Controller_Front_Action
{
    public function viewAction()
    {
        // View stuff
    }
    public function getPdfAction()
    {
        // create pdf
        $fpdf->output();
    }
}

嵌入标记调用getPdf()操作:

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