我正在尝试从二进制文件中获取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 关闭文件。
但我不知道如何设置它们。我没有必要以第一种方式做到这一点,所以我猜它是二进制文件的一部分。
答案 0 :(得分:0)
我必须" SET TEXTSIZE 167772160"在MSSQL DB中。 但我不确定为什么。如果有人能向我解释,我会很高兴。