Files
jiu/client/test/print_perf_test.dart
T
wangjia 93f4f87e44 fix(client): 打印字体改 TrueType,修复 Windows 打印卡死
打印字体实为 OpenType/CFF,dart_pdf 只支持 TrueType(glyf),渲染中文
抛 'does not support Unicode';标签打印时异常抛在原生 onLayout 回调内
导致打印插件死等->卡死。用 fonttools 将字体转为 TrueType/glyf 替换。
加回归测试防止退回 CFF 字体。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 01:08:45 +08:00

27 lines
1.1 KiB
Dart

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);
});
}