使用fpdf+fpdi向现有PDF写入条形码显示乱码问题求助
问题根因
你使用的bar128()函数输出的是HTML格式的条形码渲染代码,仅可在浏览器中正常解析显示,而FPDF的Write()、Cell()均为纯文本输出方法,无法识别HTML标签,直接传入就会把HTML源码当文本输出,也就是你看到的“乱码”效果。
可行解决方案
- 第一步:更换条形码生成逻辑,改用支持生成PNG/GIF等图片格式的Code128生成类,不要用输出HTML的版本。
- 第二步:将生成的条形码图片保存为本地临时文件(对新手推荐存临时文件,操作更稳妥,也可直接传入二进制流)。
- 第三步:调用FPDI自带的
Image()方法插入条形码图片到PDF指定位置,不要使用文本输出方法。
修正后代码示例
<?php session_start(); $serialnumber = $_SESSION['serialnumber']; // 此处替换为你用的生成图片格式条形码的代码,示例为生成临时条码文件barcode_temp.png // 示例(用php-barcode-generator库): // $generator = new Picqer\Barcode\BarcodeGeneratorPNG(); // file_put_contents('barcode_temp.png', $generator->getBarcode($serialnumber, $generator::TYPE_CODE_128)); include('lib/FPDI-2.3.6/src/autoload.php'); require('lib/fpdf184/fpdf.php'); require('lib/FPDI-2.3.6/src/fpdi.php'); $pdf = new Fpdi(); $pagecount= $pdf->setSourceFile("lib/test3.pdf"); $tpl = $pdf->importPage(1); $pdf->AddPage(); $pdf->useTemplate($tpl); // 插入条形码图片,参数依次为 图片路径、X坐标、Y坐标、宽度、高度,可根据实际需求调整数值 $pdf->Image('barcode_temp.png', 0, 5, 60, 15); $pdf->Output(); // 可选:生成PDF后删除临时条码文件 unlink('barcode_temp.png'); ?>
注意事项
- 要保证临时文件保存目录有可写权限,避免生成图片失败
- 插入图片时的坐标、尺寸参数可根据你PDF里需要放条码的位置自由调整
- 如果不想生成临时文件,也可将图片二进制流通过data URI的方式传给
Image方法,兼容更高版本的FPDF
内容的提问来源于stack exchange,提问作者Saeed Eisakhani
相关产品推荐
相关产品推荐

