首页 > 解决方案 > 使用 TCPDF 的条码

问题描述

我是 Laravel 的新手并使用条形码生成 pdf,我能够为每个项目的 id 生成条形码并将其作为 html 存储在 db 中,而不是我试图使用 tcpdf 将条形码保存到 pdf 文件,但输出不是'预计。

那是将条形码保存到工作正常的数据库中:

 $products = Product::get();
    foreach ($products as $p) {
        if ($p->barcode == NULL) {
        $generator = new Picqer\Barcode\BarcodeGeneratorHTML();
        $barcode = $generator->getBarcode($p->id, $generator::TYPE_CODE_128);
        $pro = Product::find($p->id);
        $pro->barcode = $barcode;
        $pro->save();
        }
    }

这就是我在浏览器中查看条形码的方式

@foreach ($products as $p)
                            <div class="barcode">
                             {!! html_entity_decode( $p->barcode ) !!} 
                             
                               <p>Id: {{ $p->id }} </p>   
                               <p> {{ $p->name}} </p>
                               </div>
                           
                               
                            @endforeach

这就是条形码存储在数据库中的方式

    <div style="font-size:0;position:relative;width:92px;height:30px;">
 <div style="background-color:black;width:4px;height:30px;position:absolute;left:0px;top:0">&nbsp;</div>
 <div style="background-color:black;width:2px;height:30px;position:absolute;left:6px;top:0">&nbsp;</div>
 <div style="background-color:black;width:2px;height:30px;position:absolute;left:12px;top:0">&nbsp;</div>
 <div style="background-color:black;width:2px;height:30px;position:absolute;left:22px;top:0">&nbsp;</div>
 <div style="background-color:black;width:6px;height:30px;position:absolute;left:28px;top:0">&nbsp;</div>
 <div style="background-color:black;width:4px;height:30px;position:absolute;left:38px;top:0">&nbsp;</div>
 <div style="background-color:black;width:4px;height:30px;position:absolute;left:44px;top:0">&nbsp;</div>
 <div style="background-color:black;width:6px;height:30px;position:absolute;left:52px;top:0">&nbsp;</div>
 <div style="background-color:black;width:2px;height:30px;position:absolute;left:62px;top:0">&nbsp;</div>
 <div style="background-color:black;width:4px;height:30px;position:absolute;left:66px;top:0">&nbsp;</div>
 <div style="background-color:black;width:6px;height:30px;position:absolute;left:76px;top:0">&nbsp;</div>
 <div style="background-color:black;width:2px;height:30px;position:absolute;left:84px;top:0">&nbsp;</div>
 <div style="background-color:black;width:4px;height:30px;position:absolute;left:88px;top:0">&nbsp;</div>
 </div>
 

这就是我试图将其保存为pdf的方式

// set style for barcode
    PDF::SetMargins(3, 3, 3);

    // remove default header/footer
    PDF::setPrintHeader(false);
    PDF::setPrintFooter(false);

    PDF::setFontSubsetting(true);
    PDF::SetFont('freeserif', '', 12);
    // define barcode style
    $style = array(
        'border' => true,
        'hpadding' => 'auto',
        'vpadding' => 'auto',
        'fgcolor' => array(0,0,0),
        'bgcolor' => false, //array(255,255,255),
        'text' => true,
        'font' => 'helvetica',
        'fontsize' => 8,
        'stretchtext' => 4
    );

    PDF::SetTitle('Hello World');
    PDF::AddPage();
    
    PDF::Cell(0, 0, $products[0]->name, 0, 1);
    $code = PDF::serializeTCPDFtagParameters($products[0]->barcode);
    PDF::write1DBarcode($code, 'C39', '5', '5', '60', 14, 0.4, $style, 'N');
    PDF::Ln(5);
    PDF::Output('example_049.pdf', 'I');

这就是我得到的输出:

输出

提前致谢

标签: phpmysqllaravelbarcodetcpdf

解决方案


我认为您应该将 db 中的 id 保存为 ID,而不是 html。然后,您从数据库中获取 ID 并在 HTML 中为页面视图和/或在 PDF 中生成条形码。


推荐阅读