diff --git a/CHANGELOG-client.md b/CHANGELOG-client.md index 8bb2863..c72b367 100644 --- a/CHANGELOG-client.md +++ b/CHANGELOG-client.md @@ -5,6 +5,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.0.85] - 2026-06-27 + +### 改进 +- 出库单 / 入库单打印改为针式打印机友好版式:全部纯黑、去除灰色底纹、表格改纯黑实线边框、字体加粗加大,针打输出更清晰、不再发淡发糊;同时优化列宽,避免单价 / 金额 / 日期等数字被换行截断。 + ## [1.0.84] - 2026-06-26 ### 修复 diff --git a/client/lib/core/utils/print_util_stub.dart b/client/lib/core/utils/print_util_stub.dart index 9938185..1d85944 100644 --- a/client/lib/core/utils/print_util_stub.dart +++ b/client/lib/core/utils/print_util_stub.dart @@ -660,7 +660,8 @@ const _orderHeaders = [ '商品编号', '商品名称', '系列', '规格', '批次号', '生产日期', '数量', '单价', '金额', '备注', ]; -const _orderColFlex = [1.5, 2.0, 1.1, 1.3, 1.6, 1.3, 0.7, 1.1, 1.2, 0.9]; +// 针打版式列宽:日期 / 单价 / 金额 加宽,避免大字号下数字、日期断行。 +const _orderColFlex = [1.4, 1.8, 1.0, 1.2, 1.6, 1.45, 0.7, 1.45, 1.45, 0.7]; /// 温馨提示文案(入库/出库统一)。 const _kTipsText = @@ -709,17 +710,21 @@ List _buildOrderDoc({ required double totalQty, required double totalAmt, }) { - // 样式三「紧凑报表」:左侧竖线点缀 + 抬头左对齐内联 + 灰底信息条 + 密集明细表 - // + 数字等宽(内置 Courier,ASCII 数字适用)+ 灰底总计条。 - final mono = pw.Font.courier(); + // 针打友好版式:全纯黑、无灰底纹、纯黑实线边框、字号加大。 + // 针式打印机打不出灰色(只能抖成稀疏散点→淡而糊),且小号汉字笔画易糊; + // 故正文加粗(重击更黑)、字号上调、所有灰色一律改纯黑。 + // 数字等宽(内置 Courier,ASCII 数字适用)。 + final mono = pw.Font.courierBold(); final monoBold = pw.Font.courierBold(); - final cellStyle = pw.TextStyle(font: font, fontSize: 8.5); - final numStyle = pw.TextStyle(font: mono, fontSize: 8.5); + final cellStyle = pw.TextStyle( + font: bold, fontSize: 9, fontWeight: pw.FontWeight.bold); + final numStyle = pw.TextStyle(font: mono, fontSize: 9); final headStyle = - pw.TextStyle(font: bold, fontSize: 8.5, fontWeight: pw.FontWeight.bold); - final metaStyle = pw.TextStyle(font: font, fontSize: 9); + pw.TextStyle(font: bold, fontSize: 9.5, fontWeight: pw.FontWeight.bold); + final metaStyle = pw.TextStyle( + font: bold, fontSize: 10, fontWeight: pw.FontWeight.bold); final metaBold = - pw.TextStyle(font: bold, fontSize: 9, fontWeight: pw.FontWeight.bold); + pw.TextStyle(font: bold, fontSize: 10.5, fontWeight: pw.FontWeight.bold); pw.Widget metaText(String label, String value, pw.TextAlign align) => pw.Text('$label:$value', style: metaStyle, textAlign: align); @@ -742,10 +747,11 @@ List _buildOrderDoc({ padding: const pw.EdgeInsets.only(bottom: 1.5), child: pw.Text(title, style: pw.TextStyle( - font: font, - fontSize: 11, + font: bold, + fontSize: 12, + fontWeight: pw.FontWeight.bold, letterSpacing: 3, - color: PdfColors.grey700)), + color: PdfColors.black)), ), ], ), @@ -753,8 +759,7 @@ List _buildOrderDoc({ // ── 抬头信息:灰底信息条(两行三列)──────────────────────────── pw.Container( decoration: pw.BoxDecoration( - color: PdfColors.grey100, - border: pw.Border.all(color: PdfColors.grey400, width: 0.5), + border: pw.Border.all(color: PdfColors.black, width: 0.8), ), padding: const pw.EdgeInsets.symmetric(horizontal: 8, vertical: 6), child: pw.Column( @@ -796,14 +801,13 @@ List _buildOrderDoc({ pw.SizedBox(height: 8), // ── 明细表(密集、灰底表头、数字等宽)────────────────────────── pw.Table( - border: pw.TableBorder.all(color: PdfColors.grey500, width: 0.5), + border: pw.TableBorder.all(color: PdfColors.black, width: 0.8), columnWidths: { for (var i = 0; i < _orderColFlex.length; i++) i: pw.FlexColumnWidth(_orderColFlex[i]) }, children: [ pw.TableRow( - decoration: const pw.BoxDecoration(color: PdfColors.grey300), children: [ for (final h in _orderHeaders) pw.Padding( @@ -834,8 +838,7 @@ List _buildOrderDoc({ pw.Container( width: double.infinity, decoration: pw.BoxDecoration( - color: PdfColors.grey100, - border: pw.Border.all(color: PdfColors.grey400, width: 0.5), + border: pw.Border.all(color: PdfColors.black, width: 0.8), ), padding: const pw.EdgeInsets.symmetric(horizontal: 10, vertical: 5), child: pw.Row( @@ -860,13 +863,15 @@ List _buildOrderDoc({ pw.Container( width: double.infinity, decoration: pw.BoxDecoration( - border: pw.Border.all(color: PdfColors.grey400, width: 0.5), - color: PdfColors.grey50, + border: pw.Border.all(color: PdfColors.black, width: 0.8), ), padding: const pw.EdgeInsets.all(5), child: pw.Text(_kTipsText, style: pw.TextStyle( - font: font, fontSize: 8.5, color: PdfColors.grey800)), + font: bold, + fontSize: 9, + fontWeight: pw.FontWeight.bold, + color: PdfColors.black)), ), ], pw.SizedBox(height: 24),