You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel使用TCPDF导出数据库存储的HTML条码至PDF输出异常

问题根因

你调用TCPDF的write1DBarcode()方法时,传入的参数是数据库中存储的HTML条码渲染片段,但该方法设计上仅接收原始条码数值(即你生成条码时使用的商品ID),传入HTML内容会导致TCPDF解析异常,输出不符合预期的错误条码。同时你当前代码中指定的条码类型为C39(对应CODE 39格式),和你之前用Picqer生成的CODE 128格式不匹配,也会导致条码无法正常识别。

解决方案

方案1:直接用商品ID生成条码(推荐)

无需调用数据库中存储的HTML条码,直接将商品ID传入write1DBarcode方法即可,修改导出代码如下:

// 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,
    'text' => true,
    'font' => 'helvetica',
    'fontsize' => 8,
    'stretchtext' => 4
);

PDF::SetTitle('商品条码导出');
PDF::AddPage();

PDF::Cell(0, 0, $products[0]->name, 0, 1);
// 直接传商品ID,条码类型修改为对应CODE 128的C128
PDF::write1DBarcode($products[0]->id, 'C128', '5', '5', '60', 14, 0.4, $style, 'N');
PDF::Ln(5);
PDF::Output('product_barcode.pdf', 'I');

该方案生成的条码清晰度更高,渲染性能更好。

方案2:渲染已存储的HTML条码

如果你需要完全复用数据库中已存储的HTML条码样式,可改用TCPDF的writeHTML()方法直接渲染HTML内容,无需调用条码生成接口:

// 其他配置保持不变
PDF::SetTitle('商品条码导出');
PDF::AddPage();

PDF::Cell(0, 0, $products[0]->name, 0, 1);
// 解码HTML后直接写入PDF
PDF::writeHTML(html_entity_decode($products[0]->barcode));
PDF::Ln(5);
PDF::Output('product_barcode.pdf', 'I');

内容的提问来源于stack exchange,提问作者Bebo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 04:12:03