PHPpdf头已经发送错误

时间:2014-01-31 20:31:26

标签: php xml pdf

我使用psliwa PHPPdf库来生成PDF文件。加载PHPPdf库后,我动态创建xml文件并将其保存在DOMImplementation::save('path/xmlfile.xml')服务器上,然后让PHPPdf读取此xml文件以创建PDF文件。

//pdf.php file
require_once __VENDORS__ . 'psliwa/php-pdf/lib/PHPPdf/Autoloader.php';

PHPPdf\Autoloader::register();
PHPPdf\Autoloader::register(__VENDORS__ . 'psliwa/php-pdf/lib/vendor/Zend/library');
PHPPdf\Autoloader::register(__VENDORS__ . 'psliwa/php-pdf/lib/vendor/ZendPdf/library');
PHPPdf\Autoloader::register(__VENDORS__ . 'psliwa/php-pdf/lib/vendor/Imagine/lib');
$engine = isset($_GET['engine']) ? $_GET['engine'] : 'pdf';
$facade = PHPPdf\Core\FacadeBuilder::create()->setEngineType($engine)
    ->setEngineOptions(array(
        'format' => 'jpg',
        'quality' => 70,
        'engine' => 'imagick',
    ))
    ->build();

$invoice = new Invoice();
$invoice->setInvoiceId($_GET['id']);

$xml = new InvoiceXmlBuilder($invoice);
$xml->generate();
$xml->save();

$name =  'xmlfile.xml';
$documentFilename =__DIRDOCS__ .$name;
$stylesheetFilename = __DIRDOCS__ . '/xmlfile-style.xml';
... Rest of the PHPPdf code

当我在本地计算机上执行此操作时,没有问题但是在服务器上我已经发送了标题已经发送错误,该错误在下面。

Warning: Cannot modify header information - headers already sent by (output started at /path/controllers/InvoiceXmlBuilder.php:165) in /path/pdf.php on line 56

// Line 165 in InvoiceXmlBuilder.php 
echo $this->dom->save(__DIRDOCS__ . "xmlfile.xml");

// Line 56 in pdf.php
header('Content-Type: application/pdf');

知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

问题是您echo保存操作的结果。如果该函数没有返回任何内容,它仍然会回显一些东西(产生输出)。这显然是在您发送标题信息之前发生的,因此请尝试删除echo语句,然后在第165行删除$this->dom->save(...)