diff --git a/client/assets/fonts/NotoSansSC-Regular.ttf b/client/assets/fonts/NotoSansSC-Regular.ttf index fc0fda9..088da51 100644 Binary files a/client/assets/fonts/NotoSansSC-Regular.ttf and b/client/assets/fonts/NotoSansSC-Regular.ttf differ diff --git a/client/test/print_perf_test.dart b/client/test/print_perf_test.dart new file mode 100644 index 0000000..c689973 --- /dev/null +++ b/client/test/print_perf_test.dart @@ -0,0 +1,26 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:flutter/services.dart'; +import 'package:pdf/widgets.dart' as pw; + +// 回归测试:打印用的中文字体必须是 TrueType(glyf) 轮廓。 +// 若误用 OpenType/CFF 字体(如 Noto 的 .otf),dart_pdf 渲染中文会抛 +// "This font does not support Unicode characters",标签打印会在原生 onLayout +// 回调里抛异常导致 Windows 打印卡死。此测试确保打印 PDF 能正常生成中文。 +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + test('打印字体能渲染中文(防止退回 CFF 字体导致打印卡死)', () async { + final data = await rootBundle.load('assets/fonts/NotoSansSC-Regular.ttf'); + final font = pw.Font.ttf(data); + + final doc = pw.Document(); + doc.addPage(pw.Page( + build: (_) => pw.Text('入库单 茅台飞天 53度 500ml 扫码溯源', + style: pw.TextStyle(font: font, fontSize: 12)), + )); + + // 若字体是 CFF,会在此抛 Latin1/Unicode 异常。 + final bytes = await doc.save(); + expect(bytes.isNotEmpty, true); + }); +}