当前位置:首页 > PHP

php实现小票打印

2026-02-27 23:49:11PHP

PHP实现小票打印的方法

方法一:使用ESC/POS指令直接控制打印机

通过PHP发送原始ESC/POS指令到热敏打印机,适用于USB、网络或串口连接的POS打印机。需要安装打印机驱动并配置好连接。

// 连接网络打印机示例
$printerIP = "192.168.1.100";
$printerPort = 9100;

$fp = fsockopen($printerIP, $printerPort, $errno, $errstr, 10);
if (!$fp) {
    echo "连接失败: $errno - $errstr";
} else {
    // ESC/POS指令
    $commands = "";
    $commands .= chr(27)."@"; // 初始化
    $commands .= "=== 销售小票 ===\n";
    $commands .= chr(27)."E".chr(1)."商品名称\t单价\t数量\n"; // 加粗
    $commands .= chr(27)."E".chr(0); // 取消加粗
    $commands .= "------------------------\n";
    $commands .= "可乐\t15.00\t2\n";
    $commands .= "薯片\t8.50\t1\n";
    $commands .= "------------------------\n";
    $commands .= "总计: 38.50元\n";
    $commands .= chr(29)."V".chr(65).chr(0); // 切纸

    fwrite($fp, $commands);
    fclose($fp);
}

方法二:通过打印服务中间件

使用如PrintNode、CUPS等打印服务,通过API发送打印任务。适用于云服务器或需要远程打印的场景。

// 使用PrintNode API示例
$printJob = [
    'printerId' => 'your_printer_id',
    'title' => 'Sales Receipt',
    'contentType' => 'raw_base64',
    'content' => base64_encode("=== 销售小票 ===\n商品1\t10.00\n商品2\t20.00")
];

$ch = curl_init('https://api.printnode.com/printjobs');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Authorization: Basic '.base64_encode('your_api_key:'),
    'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($printJob));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);

方法三:生成PDF/图片后打印

使用TCPDF、FPDF或GD库生成小票的PDF/图片文件,再通过系统命令打印。

// 使用TCPDF生成PDF小票
require_once('tcpdf/tcpdf.php');

$pdf = new TCPDF('P', 'mm', array(80, 200), true, 'UTF-8', false);
$pdf->AddPage();
$pdf->SetFont('helvetica', '', 10);
$pdf->Cell(0, 0, '=== 销售小票 ===', 0, 1);
$pdf->Cell(0, 0, '商品名称    单价    数量', 0, 1);
$pdf->Cell(0, 0, '可乐        15.00    2', 0, 1);
$pdf->Cell(0, 0, '总计: 30.00元', 0, 1);
$pdfContent = $pdf->Output('receipt.pdf', 'S');

// 打印PDF(Linux系统)
exec('lp receipt.pdf');

方法四:浏览器直接打印

通过HTML/CSS设计小票模板,使用JavaScript的window.print()触发浏览器打印。

php实现小票打印

// PHP生成HTML小票
echo '<!DOCTYPE html>
<html>
<head>
    <style>
        @media print {
            body { width: 80mm; font-size: 12px; }
            .item { display: flex; justify-content: space-between; }
        }
    </style>
</head>
<body>
    <h3>=== 销售小票 ===</h3>
    <div class="item"><span>商品名称</span><span>价格</span></div>
    <div class="item"><span>可乐</span><span>15.00</span></div>
    <div class="item"><span>总计:</span><span>15.00元</span></div>
    <script>window.print();</script>
</body>
</html>';

注意事项

  • 热敏打印机通常需要特定驱动和连接配置,确保设备支持ESC/POS指令集
  • 网络打印需开放对应端口,考虑防火墙设置
  • 云打印服务可能有API调用限制和费用
  • 浏览器打印依赖用户端打印机配置,适合本地POS系统
  • 小票内容应简洁,宽度通常限制在58-80mm之间

扩展功能建议

  • 添加条形码/二维码生成功能用于促销或订单追踪
  • 实现自动切纸指令(ESC/POS: GS V 66 0)
  • 考虑多联打印需求,设置打印浓度
  • 添加打印状态回执确认机制
  • 设计模板系统支持不同商户的小票格式

标签: 小票php
分享给朋友:

相关文章

php 路由实现

php 路由实现

PHP 路由实现方法 在 PHP 中实现路由功能有多种方式,以下是几种常见的实现方法: 使用原生 PHP 实现 通过解析 URL 并匹配对应的控制器和动作: $request = $_SERVER…

php 实现无限分类

php 实现无限分类

无限分类的实现方法 无限分类通常用于构建多层级结构的数据,如商品分类、菜单管理等。以下是几种常见的实现方式: 邻接列表模型(Adjacency List) 这是最简单的实现方式,每个分类记录存储其父…

php登陆功能实现

php登陆功能实现

实现PHP登录功能 数据库准备 创建一个用户表存储登录信息,基本字段包括用户名、密码(需加密)等: CREATE TABLE users ( id INT AUTO_INCREMENT PR…

php 实现md5

php 实现md5

使用 PHP 内置函数实现 MD5 PHP 提供了 md5() 函数,可以直接计算字符串的 MD5 哈希值。该函数接受一个字符串参数,返回 32 字符的十六进制哈希值。 $string = "H…

php 购物车实现session

php 购物车实现session

PHP 购物车实现(基于 Session) 在 PHP 中,使用 Session 实现购物车功能是一种常见方法。Session 可以跨页面存储用户数据,适合临时保存购物车信息。 初始化 Sessio…

php实现下载功能

php实现下载功能

PHP实现文件下载功能 使用PHP实现文件下载功能可以通过设置HTTP头信息控制浏览器行为,以下是几种常见实现方式: 基础下载方法 $file_path = '/path/to/file.pdf';…