如何在Flutter PDF生成中添加阿拉伯字符

时间:2020-07-14 22:01:00

标签: android flutter pdf dart

我正在尝试使用PDF软件包在Flutter中生成pdf,这是我的代码:

  final doc = pw.Document();
  var data = await rootBundle.load("assets/fonts/arial.ttf");
  var myFont = Font.ttf(data);
  String test = 'الشكرمون طاخ فى الترارولى';
  var data2 = utf8.encode(test);
  doc.addPage(
    pw.Page(
      build: (pw.Context context) => pw.Center(
        child: pw.Text(test, style: pw.TextStyle(fontSize: 80,font: myFont)),
      ),
    ),
  );

这是它的生成方式:

enter image description here

虽然预期的实际结果不应以字符分隔,但这是我应该看到的示例:

enter image description here

3 个答案:

答案 0 :(得分:2)

如果您的所有小部件都具有rtl父项,且所有小部件都具有pw.Directionality并设置了TextDirection.rtl,或者在单个文本小部件中使用TextDirection.rtl

答案 1 :(得分:1)

只需将 theme: ThemeData.withFont(base: ttf,) 添加到 Page 小部件,如下所示:

  var data = await rootBundle.load("fonts/IRANSansWeb(FaNum)_Bold.ttf");
  final ttf = Font.ttf(data);

 Page(
      pageFormat: PdfPageFormat.a4,
      theme: ThemeData.withFont(
        base: ttf,
      ),
      orientation: PageOrientation.landscape,
      build: (Context context) {
return Align(
  alignment: Alignment.center,
  child: new Column(
      mainAxisAlignment: MainAxisAlignment.spaceBetween,
      crossAxisAlignment: CrossAxisAlignment.center,
      children: [
        Column(
          children: [
            Row(
              children: [
                Text(
                  'خلیج فارس',
                 textDirection: TextDirection.rtl,
                )
              ]
            )
          ]
        ),
        Column(
          children: [
            Image(compareChartImage),
          ]
        ),
        Column(
          children:[
            Image(timingChartImage),
          ]
        )
      ]
  ));
 }
)

答案 2 :(得分:0)

只需将textDirection: pw.TextDirection.rtl添加到文本小部件中,就像这样:

 pw.Page(
      build: (pw.Context context) => pw.Center(
        child: pw.Text(test, style: pw.TextStyle(fontSize: 80,font: myFont),textDirection: 
        pw.TextDirection.rtl),
      ),
    ),

注意:如果文本中包含一些数字,则可能会出现问题

相关问题