Flutter Syncfusion PDF土耳其字符报错问题咨询
解决syncfusion_flutter_pdf生成PDF时土耳其字符报错问题
问题原因
你当前使用的PdfStandardFont(PdfFontFamily.helvetica)属于PDF标准字体,仅支持基础ASCII字符集,不包含ş、ğ、ı这类土耳其特殊字符,因此触发字符不支持的错误。
解决方案
嵌入支持Unicode的TrueType字体(比如Arial Unicode MS、Roboto等),确保字体包含土耳其字符的字形,具体步骤如下:
1. 配置字体资源
- 将支持土耳其字符的字体文件(如
Roboto-Regular.ttf)放入项目的assets/fonts/目录 - 在
pubspec.yaml中声明字体资源:
flutter: assets: - assets/fonts/Roboto-Regular.ttf
2. 修改代码加载自定义字体
替换原有的PdfStandardFont为PdfTrueTypeFont,加载嵌入的字体文件:
import 'package:flutter/services.dart'; Future<void> generateInvoice() async { // 加载字体文件 final ByteData fontData = await rootBundle.load('assets/fonts/Roboto-Regular.ttf'); final Uint8List fontBytes = fontData.buffer.asUint8List(); final PdfDocument document = PdfDocument(); final PdfPage page = document.pages.add(); final Size pageSize = page.getClientSize(); page.graphics.drawRectangle( bounds: Rect.fromLTWH(0, 0, pageSize.width, pageSize.height), pen: PdfPen(PdfColor(142, 170, 219))); drawHeader(page, pageSize, fontBytes); final List<int> bytes = document.saveSync(); document.dispose(); await saveAndLaunchFile(bytes, 'Invoice.pdf'); } void drawHeader(PdfPage page, Size pageSize, Uint8List fontBytes) { page.graphics.drawRectangle( brush: PdfSolidBrush(PdfColor(91, 126, 215)), bounds: Rect.fromLTWH(0, 0, pageSize.width - 115, 90)); // 使用支持土耳其字符的自定义字体 final PdfFont turkishFont = PdfTrueTypeFont(fontBytes, 30); page.graphics.drawString( 'iş planı', turkishFont, brush: PdfBrushes.white, bounds: Rect.fromLTWH(25, 0, pageSize.width - 115, 90), format: PdfStringFormat(lineAlignment: PdfVerticalAlignment.middle)); }
关键注意点
- 确保选用的字体文件确实包含土耳其特殊字符的字形
- 字体文件路径需与
pubspec.yaml中的声明完全匹配 - 原代码中
drawHeader方法未返回PdfLayoutResult,若不需要该返回值可修改方法类型为void(如上代码)
内容的提问来源于stack exchange,提问作者srtcoztrk
相关产品推荐
相关产品推荐

