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

如何将FGL打印命令存储为变量以实现Boca打印机门票打印需求

FGL打印命令灵活配置方案

完全可以实现,你可以通过拆分固定打印模板和可变数据的方式实现灵活配置,不需要把命令硬编码在代码里,具体方案如下:

  • 抽离FGL打印模板
    把固定的命令结构和可变数据的占位符预先定义好,你需要动态修改的引导文本、打印结束标记都可以做成占位符,模板整体可以存在配置文件中,修改时直接更新配置即可,无需调整业务代码。
    你提到的需要修改的提示文本Access our map, audio, and more at foo.org/guide可以单独作为配置项存储,也可以集成在模板的占位符中。
    参考模板格式如下:
<RU><RC600,200><QRV2><QR6,0,1,0>{{uuid}}<F3><HW1,1><RC380,760>{{eventName}}<RC340,760>{{ticketTypeName}}<RC300,760>${{unitPrice}}<RC260,760>{{guideText}}{{endTag}}
  • 优化现有代码逻辑
    你当前的代码存在大量重复内容,两个分支仅末尾的结束标记不同,完全可以合并逻辑,减少冗余,同时把原硬编码的命令全部替换为模板占位符替换逻辑,优化后的参考代码如下:
// 从配置文件读取模板与自定义文本,无需硬编码
string fglPrintTemplate = 配置读取方法("FglTicketTemplate");
string ticketGuideText = 配置读取方法("TicketGuideTip");

foreach (var (ticket, index) in tickets.Select((item, idx) => (item, idx)))
{
    // 仅最后一张票使用<p>结束标记,其余使用<q>
    string endTag = index == tickets.Count - 1 ? "<p>" : "<q>";
    // 批量替换模板占位符
    string printerCommands = fglPrintTemplate
        .Replace("{{uuid}}", ticket.uuid.ToString())
        .Replace("{{eventName}}", ticket.eventName)
        .Replace("{{ticketTypeName}}", ticket.ticketTypeName)
        .Replace("{{unitPrice}}", ticket.unitPrice.ToString("F2"))
        .Replace("{{guideText}}", ticketGuideText)
        .Replace("{{endTag}}", endTag);
    
    // 执行打印逻辑
    var response = Transmit(printerCommands);
    ps.status = response;
    ps.dataPrinted = $"uuid: {ticket.uuid}, eventDateTime: {ticket.eventDateTime}, eventName: {ticket.eventName}, ticketTypeName: {ticket.ticketTypeName}";
}
  • 扩展说明
    如果后续需要调整打印位置、字体大小、二维码参数等样式,直接修改配置文件中的模板即可,不需要改动业务代码;如果需要支持多套打印模板,也可以把多个模板存储在配置中,根据业务场景动态选择调用。
    注意替换占位符时提前做好数据格式校验,比如价格统一保留两位小数,避免打印出来的内容格式错乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:54:01