我使用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');
知道为什么会这样吗?
答案 0 :(得分:0)
问题是您echo
保存操作的结果。如果该函数没有返回任何内容,它仍然会回显一些东西(产生输出)。这显然是在您发送标题信息之前发生的,因此请尝试删除echo
语句,然后在第165行删除$this->dom->save(...)
。