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

如何使用Flutter PDF 1.3.24创建适配热敏打印机的自定义宽度收据PDF?

解决Flutter PDF包自定义热敏打印机页面尺寸问题

我帮你搞定这个适配80mm热敏打印机的问题!你用的pdf 1.3.24包其实完全支持自定义页面尺寸,不用局限于预定义的PdfPageFormat.standard格式,下面是具体的实现方案:

步骤1:转换80mm到PDF单位

PDF的尺寸单位是点(pt),1mm≈2.83465pt,所以80mm宽度对应的pt值可以这样计算:

const double thermalRollWidthMm = 80;
final double thermalWidthPt = thermalRollWidthMm * 2.83465; // 结果约为226.77pt

步骤2:创建专属热敏纸页面格式

直接实例化PdfPageFormat就能定义符合需求的格式,因为是连续卷纸,我们可以把高度设为无限长,再按需调整边距:

final PdfPageFormat thermalReceiptFormat = PdfPageFormat(
  width: thermalWidthPt,
  height: PdfPageFormat.infinite, // 无限高度适配连续卷纸
  marginLeft: 5,    // 左侧边距,按需调整
  marginRight: 5,   // 右侧边距,按需调整
  marginTop: 10,    // 顶部边距,按需调整
  marginBottom: 10, // 底部边距,按需调整
);

步骤3:在MultiPage中使用自定义格式

把之前的PdfPageFormat.standard.copyWith(...)替换成刚创建的自定义格式即可:

pdf.addPage(
  MultiPage(
    pageFormat: thermalReceiptFormat, // 替换为自定义格式
    crossAxisAlignment: CrossAxisAlignment.start,
    header: (Context context) {
      // 你的header逻辑保持不变
    },
    // 其他页面内容...
  ),
);

额外小提示

  • 因为热敏打印机打印宽度有限,建议调整内容的字体大小、元素间距,确保所有内容都在80mm范围内,避免被截断;
  • 如果你的收据内容长度固定,也可以把height设为一个具体的pt值,不用infinite,比如设为500pt,根据实际内容长度调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:29:25