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

Delphi Tokyo10.2+Quick Report热敏打印机长收据打印异常求助

解决Delphi Tokyo+Quick Report 6热敏打印机长收据多页/超长页问题

核心问题分析

你当前的代码直接累加设计时的Band高度,忽略了动态内容换行后的实际高度,再加上页面设置、打印机驱动的配置偏差,导致分页异常。

具体解决方案

1. 精准匹配热敏纸页面设置

  • 打开QuickReport设计器,进入页面设置:
    • 纸张类型选「自定义」,宽度设为80mm(换算像素约283,1mm≈3.5433像素),高度设为超大值(比如10000像素,连续纸无需固定高度)
    • 上下左右边距全部设为0或1mm,热敏打印机不需要冗余边距
    • 关闭页眉/页脚的打印(如果不需要),避免空占高度导致不必要的分页

2. 修正Band高度计算逻辑

替换你当前的DetailBand AfterPrint代码,改用实际打印的Band高度累加:

// 先在QuickRep的BeforePrint事件初始化总高度
procedure TForm1.QuickRep_ticket_Food_taille_80mmBeforePrint(Sender: TCustomQuickRep; var PrintReport: Boolean);
begin
  // 基础高度=页眉+页脚的设计高度(如果有),没有则设为0
  Band_Ttl_height := QRHeaderBand.Height + QRFooterBand.Height;
end;

// 在DetailBand的AfterPrint事件累加实际打印高度
procedure TForm1.QRBand69AfterPrint(Sender: TQRCustomBand; BandPrinted: Boolean);
begin
  if BandPrinted then
  begin
    // 用Sender.Height获取Band实际打印的高度(含动态换行后的高度)
    inc(Band_Ttl_height, Sender.Height);
    QuickRep_ticket_Food_taille_80mm.Height := Band_Ttl_height;
  end;
end;
  • 确保DetailBand内的文本组件(QRMemo/QRLabel)开启AutoSize=True和WordWrap=True,让Band自动适应内容高度

3. 关闭强制分页设置

  • 检查所有Band的PageBreak属性,全部设为pbNone
  • 删除报表中可能存在的QRPageBreak组件
  • 把QuickRep的Options.FirstPageHeader和Options.LastPageFooter设为False,避免空页

4. 验证打印机驱动配置

  • 打开Windows打印机设置,找到你的热敏打印机:
    • 把自定义的80mm连续纸设为默认纸张
    • 关闭驱动内的「自动切纸」「分页打印」功能
    • 打印模式选「连续纸」而非「单页纸」

5. 测试排查技巧

  • 先打印到PDF(比如虚拟PDF打印机),查看PDF的页面高度是否和收据内容匹配,排除打印机驱动问题
  • 给报表Band设置浅色背景,打印预览时观察Band的实际渲染高度是否符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 16:35:09