C# System.DllNotFoundException:&x27;gdi32.dll程序集:<;未知组件>;类型:<;未知类型>;成员:(空)和#x27;
我必须在itext7 pdf文件中编写一个表。该表必须包括阿拉伯语单词。我已经试着解决这个问题好几个小时了。我找到了这段代码,所以我尝试了一下: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
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文件放在资产、资源中,并尝试了不同的路径,但仍然不起作用。请您告诉我我的字体应该放在哪里,以及如何访问iTunesFile.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是否可以找到它