使用php或js生成条形码、二维码
最近要开发一个打印物品铭牌标签的页面,从DB里面调出信息,打印出带n个条形码(水平和竖直方向都有)的12*10cm的标签,这种应用以前接触的少,特意研究记录下。
要打印非标准纸张,首先需要在目标打印机上新建纸张类型,规格设置为12*10cm,步骤如下:
设置-设备-打印机和扫描仪-打印服务器属性-创建新纸张规格,新的规格设置完成后设置为默认规格。
可以使用js或者php生成:
1 使用php生成
首先百度下找到了Download - Barcode Generator by Barcode Bakery 的php版本,支持显示文字信息,设置dpi,设置单个条码宽度,高度,选中角度等,功能很全面了,然而商用却需要购买授权
<?php require __DIR__ . '/libs/barcodegen.1d-php.v6.0.1/autoload.php'; use BarcodeBakery\Common\BCGColor; use BarcodeBakery\Common\BCGDrawing; use BarcodeBakery\Common\BCGFontFile; use BarcodeBakery\Common\BCGLabel; $font = new BCGFontFile(__DIR__ . '/libs/barcodegen.1d-php.v6.0.1/font/Arial.ttf', 18); $text = 'hello'; $dpi = 300; $file_type = 'PNG'; $code = 'BCGcode128'; $rotate = '270'; $scale = 3; $thickness = 25; function convertText($text) { $text = stripslashes($text); if (function_exists('mb_convert_encoding')) { $text = mb_convert_encoding($text, 'ISO-8859-1', 'UTF-8'); } return $text; } $filetypes = array('PNG' => BCGDrawing::IMG_FORMAT_PNG, 'JPEG' => BCGDrawing::IMG_FORMAT_JPEG, 'GIF' => BCGDrawing::IMG_FORMAT_GIF); $finalClassName = 'BarcodeBakery\\Barcode\\' . $code; $drawException = null; try { $color_black = new BCGColor(0, 0, 0); $color_white = new BCGColor(255, 255, 255); $code_generated = new $finalClassName(); $code_generated->setScale($scale); $code_generated->setBackgroundColor($color_white); $code_generated->setForegroundColor($color_black); $code_generated->setThickness($thickness); // Thickness // $code_generated->setFont($font); // Font (or 0) $code_generated->setFont(0); // Font (or 0) 值为0-不显示文字信息,只显示条码 if ($text !== '') { $text = convertText($text); $code_generated->parse($text); } } catch (Exception $exception) { $drawException = $exception; } $drawing = new BCGDrawing('', $color_white); if ($drawException) { $drawing->drawException($drawException); } else { $drawing->setBarcode($code_generated); $drawing->setRotationAngle($rotate); $drawing->setDPI($dpi === 'NULL' ? null : max(72, min(300, intval($dpi)))); $drawing->draw(); } switch ($file_type) { case 'PNG': header('Content-Type: image/png'); break; case 'JPEG': header('Content-Type: image/jpeg'); break; case 'GIF': header('Content-Type: image/gif'); break; } $drawing->finish($filetypes[$file_type]);
然后偶然发现了以前使用的生成pdf文件的包TCPDF可以生成条形码和二维码,使用也很简单,GitHub - tecnickcom/TCPDF: Official clone of PHP library to generate PDF documents and barcodes
<?php require './libs/tcpdf/vendor/autoload.php'; //条形码 $barcodeobj = new TCPDFBarcode('hello', 'C128'); echo $barcodeobj->getBarcodeHTML(2, 30, 'black'); // $barcodeobj->getBarcodeSVG(2, 30, 'black'); // $barcodeobj->getBarcodePNG(2, 30, array(0, 0, 0)); ?> <hr> <?php //二维码 $barcodeobj = new TCPDF2DBarcode('http://www.tcpdf.org', 'QRCODE,H'); echo $barcodeobj->getBarcodeHTML(6, 6, 'black'); // $barcodeobj->getBarcodePNG(6, 6, array(0, 0, 0)); // $barcodeobj->getBarcodeSVG(6, 6, 'black');
2 使用JS生成
js生成条形码可以使用JsBarcode这个包
<script src="./plugins/JsBarcode-master/dist/JsBarcode.all.min.js"></script> <img id="barcode2" /> <script> JsBarcode("#barcode2", "9780199532179", { format: "EAN13", displayValue: true, fontSize: 10, lineColor: "#0cc", }); </script>
js生成二维码可以使用qrcodejs这个包
<script type="text/javascript" src="./plugins/qrcodejs-master/jquery.min.js"></script> <script type="text/javascript" src="./plugins/qrcodejs-master/qrcode.min.js"></script> <div id="qrcode" style="width: 100px; height: 100px; margin-top: 15px"></div> <script type="text/javascript"> var qrcode = new QRCode(document.getElementById("qrcode"), { width: 100, height: 100, }); qrcode.makeCode("https://www.cnblogs.com/"); </script>
js打印页面的部分区域
<style> @media print { @page { size: 21cm 29.7cm; margin: 0; padding: 0; } } </style> <div id="print_area">content</div> <button onclick="doPrint()">print</button> <script> function doPrint() { let body = document.body.innerHTML; document.body.innerHTML = document.getElementById("print_area").innerHTML; window.print(); setTimeout(location.reload(), 2000); } </script>
使用print.js打印,'pdf'
, 'html'
, 'image'
and 'json'
<script src="./plugins/print/print.min.js"></script> <link rel="stylesheet" type="text/css" href="./plugins/print/print.min.css" /> <button type="button" onclick="printJS('./html-demos/files/example_015.pdf')">Print PDF</button> <hr /> <table id="table"> <tr> <th>col1</th> <th>col2</th> </tr> <tr> <td>1</td> <td>2</td> </tr> </table> <button type="button" onclick="printJS('table', 'html')">Print Html</button> <hr /> <button type="button" onclick="printJS({ printable: 'images/1.jpg', type: 'image', header: 'My cool image header' })">Print Img</button> <hr /> <script> let someJSONdata = [ { name: "John Doe", email: "john@doe.com", phone: "111-111-1111", }, { name: "Barry Allen", email: "barry@flash.com", phone: "222-222-2222", }, { name: "Cool Dude", email: "cool@dude.com", phone: "333-333-3333", }, ]; </script> <button type="button" onclick="printJS({printable: someJSONdata, properties: ['name', 'email', 'phone'], type: 'json'})">Print JSON Data</button>
使用css的media查询设置打印区域
<script src="./plugins/JsBarcode-master/dist/JsBarcode.all.min.js"></script> <style media="print"> @page { size: 12cm 10cm; margin: 0; padding: 0; } /* 打印时不显示 */ button { display: none; } </style> <div> <img id="barcode2" /> <script> JsBarcode("#barcode2", "9780199532179", { format: "EAN13", displayValue: true, fontSize: 10, lineColor: "#0cc", }); //使默认水平显示的条形码旋转为竖直显示 document.getElementById("barcode2").style.transform = "rotate(270deg)"; </script> </div> <button onclick="window.print()">print</button>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix