问题描述
我有一个标签生成器,如果您有足够的标签可以打印,那么它可以正常工作,在我的情况下,这大约是3页的5160,或大约70个单独的条目。如果您的数量少于该数量,则最终会查看该数量而不是下载PDF:
值得注意的是,当我从真实数据更改为虚拟数据时,我可以对其进行屏幕截图,需要的页面数约为6,因此,如果没有足够的原始文本而不是单个文本,它似乎会失败项。
我不知道如何调试它。这是我正在使用的代码:
$pdf = new PDF_Label('5160');
$pdf->AddPage();
foreach ($entries as $entry) {
$name = 'Demo thing';
$date = Carbon::create($order->{'Delivery Date'})->format('M d,Y');
$text = sprintf("%s\n%s,%s,%s\n%s\n%s",'Business','Employee','4A','Floor 7' ?? '---',$date,$name);
$pdf->Add_Label($text);
}
$pdf->Output();
在使用FPDF_Label之前是否有人遇到过这种情况?任何帮助将不胜感激,谢谢!
编辑:有关FPDF进行错误检查的更多信息:
protected function _checkoutput()
{
if(PHP_SAPI!='cli')
{
if(headers_sent($file,$line))
$this->Error("Some data has already been output,can't send PDF file (output started at $file:$line)");
}
if(ob_get_length())
{
var_dump('test');
// The output buffer is not empty
if(preg_match('/^(\xEF\xBB\xBF)?\s*$/',ob_get_contents()))
{
// It contains only a UTF-8 BOM and/or whitespace,let's clean it
ob_clean();
}
else
$this->Error("Some data has already been output,can't send PDF file");
}
}
//below is within the main output function
$this->_checkoutput();
if(PHP_SAPI!='cli')
{
// We send to a browser
header('Content-Type: application/pdf');
header('Content-disposition: inline; '.$this->_httpencode('filename',$name,$isUTF8));
header('Cache-Control: private,max-age=0,must-revalidate');
header('Pragma: public');
}
echo $this->buffer;
break;
当我看到我的错误时,它将经历这段代码,并且不会输出您看到的任何错误,因此我们可以说缓冲区中没有已发送或输出的标头。
解决方法
尽管它没有解决潜在的问题,但我找到了解决方案。我在“网络”选项卡中比较了正常和不正常情况下的标题,并注意到对于较短的条目集(加上一些其他更改),删除了“内容类型:应用程序/ pdf”。由于这不是在Laravel网站之外发生的,因此我尝试添加“退出”; '$ pdf-> Output();'之后的行并且现在不管有多少条目都可以使用。
在较长的条目表中,我注意到它添加了“ Transfer-Encoding:chunked”,并保留了“ Content-Type:application / pdf”。也许与此相关的Laravel标头处理中存在错误?我真的不确定。