PDF二进制ZF2

时间:2014-07-09 13:41:13

标签: php zend-framework pdf zend-framework2

我正在尝试从二进制文件中获取PDF。我的旧代码正在运行,但现在我使用ZF2,PDF似乎已损坏,我不确定原因。

旧代码

echo $html->link($zvk,array('controller'=>'daten', 'action'=>'download',$id,$zvk),array('escape' => false)); 

动作

header('Content-Disposition: attachment; filename=doc_' . $zvk . '.pdf');
header("Cache-control: private");
header("Content-transfer-encoding: binary");
header("Content-type: application/pdf;");
header('Content-length: ' . strlen($binary));
echo $binary;

ZF2代码

// Disable layout and view
$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender(true);

// Generate PDF filename
$sFilename = sprintf("doc(%s, %s) - %s.pdf",
            $oSelectedP->name,
            $oSelectedZ->Zvk,
            date("Y-m-d"));

$this->getResponse()
->setHeader("Content-type", "application/pdf")
->setHeader("Content-disposition", "attachment; filename=\"" . $sFilename . "\"")
->setHeader("Content-length", strlen($aData[0]["dokument"]))
->setHeader("Cache-control", "private")
->setHeader("Content-transfer-encoding", "binary")
->setBody($aData[0]["dokument"]);

我没有收到任何错误消息,只是损坏的文件。有什么建议吗?

检查损坏的PDF给出了这个

  

打开文件。   0x80410108 - E - 找不到文件结束标记。        - 文件:C:\ Windows \ TEMP \ tmpCB04.tmp   0x8041010A - E - ' startxref'找不到关键字或外部参照位置。        - 文件:C:\ Windows \ TEMP \ tmpCB04.tmp   0x80410108 - E - 找不到文件结束标记。        - 文件:C:\ Windows \ TEMP \ tmpCB04.tmp   关闭文件。

但我不知道如何设置它们。我没有必要以第一种方式做到这一点,所以我猜它是二进制文件的一部分。

1 个答案:

答案 0 :(得分:0)

我必须" SET TEXTSIZE 167772160"在MSSQL DB中。 但我不确定为什么。如果有人能向我解释,我会很高兴。