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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 13:54:51