C# System.DllNotFoundException:&x27;gdi32.dll程序集:<;未知组件>;类型:<;未知类型>;成员:(空)和#x27;

C# System.DllNotFoundException:&x27;gdi32.dll程序集:<;未知组件>;类型:<;未知类型>;成员:(空)和#x27;,c#,pdf,xamarin.android,gdi,itext7,C#,Pdf,Xamarin.android,Gdi,Itext7,我必须在itext7 pdf文件中编写一个表。该表必须包括阿拉伯语单词。我已经试着解决这个问题好几个小时了。我找到了这段代码,所以我尝试了一下: string[] sources = new string[] { "english.xml", "arabic.xml", "hindi.xml", "tamil.xml" }; PdfWriter writer = new PdfWriter(D

我必须在itext7 pdf文件中编写一个表。该表必须包括阿拉伯语单词。我已经试着解决这个问题好几个小时了。我找到了这段代码,所以我尝试了一下:

string[] sources = new string[] { "english.xml", "arabic.xml", "hindi.xml", "tamil.xml" };
            PdfWriter writer = new PdfWriter(DEST);
            PdfDocument pdfDocument = new PdfDocument(writer);
            Document document = new Document(pdfDocument);
            FontSet set = new FontSet();
            set.AddFont("NotoNaskhArabic-Regular.ttf");
            set.AddFont("NotoSansTamil-Regular.ttf");
            set.AddFont("FreeSans.ttf");
            document.SetFontProvider(new FontProvider(set));
            document.SetProperty(Property.FONT, new String[] { "MyFontFamilyName" });
            foreach (string source in sources)
            {
                XmlDocument doc = new XmlDocument();
                var stream = new FileStream(source, FileMode.Open);
                doc.Load(stream);
                XmlNode element = doc.GetElementsByTagName("text").Item(0);
                Paragraph paragraph = new Paragraph();
                XmlNode textDirectionElement = element.Attributes.GetNamedItem("direction");
                Boolean rtl = textDirectionElement != null && textDirectionElement.InnerText.Equals("rtl");
                if (rtl)
                {
                    paragraph.SetTextAlignment(TextAlignment.RIGHT);
                }
                paragraph.Add(element.InnerText);
                document.Add(paragraph);
            }
            document.Close();
我是从你那儿得到的。我开始得到例外,我的字体集和字体集提供程序是空的,所以我猜我没有代码中提到的字体。我开始寻找安装它们的方法,我找到了这个答案,因此我添加了以下代码:

public class user
    {
       
        [DllImport("gdi32.dll", EntryPoint = "AddFontResourceW", SetLastError = true)]
        public static extern int AddFontResource([In][MarshalAs(UnmanagedType.LPWStr)]
                                     string lpFileName);
         
    }
在我的主要活动中:

var result = user.AddFontResource(@"C:\MY_FONT_LOCATION\NotoNaskhArabic-Regular.ttf");
但它不起作用,我得到了异常:System.DllNotFoundException:'gdi32.dll程序集:type:member:(null)'。我该怎么办?我走对了吗?
提前感谢

对于iText,您不需要使用
DllImport
,只需检查您的
set.AddFont
即可返回
true
。如果它返回
false
,那么您可能提供了不正确的路径。是的,它返回false,但我不明白为什么,我将我的ttf文件放在资产、资源中,并尝试了不同的路径,但仍然不起作用。请您告诉我我的字体应该放在哪里,以及如何访问iTunes
File.Exists
C#函数,以检查给定路径的文件系统中是否可以找到该文件。如果找到了,但
set.AddFont
返回false,则问题出在iText中。如果找不到文件,那么问题出在您提供的文件路径上。我真的觉得奇怪,我的电脑的路径都不工作。我尝试了以下代码:
FontSet=new FontSet();int totalfonts=PdfFontFactory.RegisterDirectory(@“C:\Users\User\Desktop\fonts”);如果(totalfonts>0){Toast.MakeText(this,totalfonts.ToString(),ToastLength.Long);foreach(PdfonFactory.GetRegisteredFonts()中的字符串字体){set.AddFont(font);Toast.MakeText(this,font,ToastLength.Long);}document2.SetFontProvider(new FontProvider(set));
但是我得到了我的totalfonts=0。这可能是因为没有路径在工作吗?请针对您的路径运行
File.Exists
函数以检查.NET是否可以找到它