PHP FPDF标签,如果打印的标签不足,则输出乱码/垃圾数据,但如果标签足够,则可以正常工作

问题描述

我有一个标签生成器,如果您有足够的标签可以打印,那么它可以正常工作,在我的情况下,这大约是3页的5160,或大约70个单独的条目。如果您的数量少于该数量,则最终会查看该数量而不是下载PDF:

enter image description here

但是,如果您有足够的条目,它将可以正常工作,如下所示:

enter image description here

值得注意的是,当我从真实数据更改为虚拟数据时,我可以对其进行屏幕截图,需要的页面数约为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标头处理中存在错误?我真的不确定。