允许使用itext7(xamarin android)在pdf表格中显示阿拉伯文本

允许使用itext7(xamarin android)在pdf表格中显示阿拉伯文本,pdf,xamarin.android,itext7,Pdf,Xamarin.android,Itext7,我必须把我的列表数据放在一个pdf文件的表格中。我的数据有一些阿拉伯语单词。生成我的pdf时,不会显示阿拉伯语单词。我搜索并发现我需要itext7.pdfcalligraph,所以我在我的应用程序中安装了它。我也找到了这段代码,并尝试做一些类似的事情,允许在我的表中使用阿拉伯语单词,但我无法理解 在我将其应用于真实列表之前,这是一个试用代码: var path2 = global::Android.OS.Environment.ExternalStorageDirectory.AbsoluteP

我必须把我的列表数据放在一个pdf文件的表格中。我的数据有一些阿拉伯语单词。生成我的pdf时,不会显示阿拉伯语单词。我搜索并发现我需要itext7.pdfcalligraph,所以我在我的应用程序中安装了它。我也找到了这段代码,并尝试做一些类似的事情,允许在我的表中使用阿拉伯语单词,但我无法理解

在我将其应用于真实列表之前,这是一个试用代码:

var path2 = global::Android.OS.Environment.ExternalStorageDirectory.AbsolutePath;
filePath = System.IO.Path.Combine(path2.ToString(), "myfile2.pdf");
stream = new FileStream(filePath, FileMode.Create);
PdfWriter writer = new PdfWriter(stream);
PdfDocument pdf2 = new iText.Kernel.Pdf.PdfDocument(writer);
            
Document document = new Document(pdf2, PageSize.A4);
FontSet set = new FontSet();
set.AddFont("ARIAL.TTF");


document.SetFontProvider(new FontProvider(set));
document.SetProperty(Property.FONT, "Arial");
 
string[] sources = new string[] { "يوم","شهر 2020" };
 iText.Layout.Element.Table table = new iText.Layout.Element.Table(2, false);
 foreach (string source in sources)
                {
                    Paragraph paragraph = new Paragraph();
                    Bidi bidi = new Bidi(source, Bidi.DirectionDefaultLeftToRight);
                    if (bidi.BaseLevel != 0)
                    {
                        paragraph.SetTextAlignment(iText.Layout.Properties.TextAlignment.RIGHT);
                    }

                    paragraph.Add(source);
                    table.AddCell(new Cell(1, 1).SetTextAlignment(iText.Layout.Properties.TextAlignment.CENTER).Add(paragraph));
                }
                document.Add(table);
                document.Close();
我更新了代码并将arial.ttf添加到我的资产文件夹中。我得到以下异常:

System.InvalidOperationException:“FontProvider和FontSet为空。没有初始化的FontProvider(请参阅RootElement#setFontProvider),无法解析字体系列名称(请参阅ElementPropertyContainer#setFontFamily)。' 我还是不明白。有什么想法吗? 提前感谢

-C#

我对土耳其语角色也有类似的情况,我一直在关注这些 步骤:

  • 在项目根文件夹下创建一个文件夹,即:/wwwroot/font
  • 在字体文件夹下添加
    OpenSans Regular.ttf
字体的路径是=>
。/wwwroot/Fonts/OpenSans Regular.ttf

  • 创建如下字体:
然后像这样使用它:

paragraph.Add(source)
         .SetFont(FontFactory.CreateOpenSansRegularFont());  //set font in here

table.AddCell(new Cell(1, 1)
     .SetTextAlignment(iText.Layout.Properties.TextAlignment.CENTER)
     .Add(paragraph));
这就是我使用字体工厂处理土耳其语字符的方式,例如:“ü,I,ç,ş,ö”

对于Xamarin Android,您可以尝试

string documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 
var path = Path.Combine(documentsPath, "Fonts/Arial.ttf");

请修改您的代码,使其自包含并且是最小的可复制样本。现在它有未定义的
表项
项以及冗余的
文本视图
土司
rMultiItem
,注释代码。请让我知道编辑的代码是否正确。错误本身说明:
FontProvider和FontSet为空。
。检查
set.AddFont(“ARIAL.TTF”)
的返回值-根据文档,该方法返回
true
,如果成功添加字体,则返回
false
,否则返回false是的,我将字体路径更改为:
set2.AddFont(“C:\\Windows\\font\\ARIAL.TTF”)但还是一样的。我该怎么办?它返回的是真还是假?
新文件(“C:\\Windows\\font\\Arial.TTF”).exists()
是否返回true或false?嘿,先生,谢谢您的回复,但是我在哪里可以找到xamarin android的wwwroot文件夹,我使用了几种方法来访问在我的资产文件夹中找到的ttf文件的路径,但我一直遇到这样的异常:System.IO.IOException:我的路径未作为文件或资源找到。当然,先生,我一直在不断更改代码以找到解决方案,但我使用的所有路径都会出现我提到的异常PdfFont arab=PdfFontFactory.CreateFont(@“C:\Windows\Fonts\Arial.ttf”);文档2.SetFont(阿拉伯语);`我在createfont函数中找到了它是的,先生,我也试过了,我把它添加到了我的资产文件夹中,但是我遇到了同样的问题,很幸运,我无法修复它:(似乎托管环境是为web提供的。我试过以下方法:
string fn=“Arial.ttf”;string fp=System.environment.GetFolderPath(System.Environment.SpecialFolder.Personal);字符串pc=System.IO.Path.Combine(fp,fn);Pdfont俄语=PdfontFactory.CreateFont(pc);
但仍然相同请检查此项
string documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 
var path = Path.Combine(documentsPath, "Fonts/Arial.ttf");