C# 如何在Itext7中使用任何印地语字体?

C# 如何在Itext7中使用任何印地语字体?,c#,fonts,itext7,truetype,C#,Fonts,Itext7,Truetype,我正在使用iText 7.net根据用户语言选择输入创建印地语或英语的pdf,但我无法找到任何方法将我选择的印地语.ttf字体文件转换为iText Pdfonts。它可以用标准的Itext字体在英语中很好地工作 这是我的代码: PdfFontFactory.Register(HindiFont1.ToString(), "HindiFont1"); //Error at this line: Font Not Recognized PdfFont myHindiFont

我正在使用iText 7.net根据用户语言选择输入创建印地语或英语的pdf,但我无法找到任何方法将我选择的印地语.ttf字体文件转换为iText Pdfonts。它可以用标准的Itext字体在英语中很好地工作

这是我的代码:

    PdfFontFactory.Register(HindiFont1.ToString(), "HindiFont1");

    //Error at this line: Font Not Recognized
    PdfFont myHindiFont1 = PdfFontFactory.CreateFont("HindiFont1", PdfEncodings.IDENTITY_H, true);
    //Create Writer
    PdfWriter writer = new PdfWriter(path);

    //Create Pdf Document Object
    PdfDocument pdf = new PdfDocument(writer);
    Document document = new Document(pdf, size);
    PdfPage page1 = pdf.AddNewPage();
     PdfCanvas canvas3 = new PdfCanvas(page3);
    Rectangle pageSize3 = page3.GetPageSize();

    //String in Title9 Paragraph is a translation of English Phrase
     iText.Layout.Element.Paragraph Title9 = new iText.Layout.Element.Paragraph("ew[;kad fo'kslrk;sa%");

    Title9.SetTextAlignment(iText.Layout.Properties.TextAlignment.CENTER);
   // Title9.SetFont(myHindiFont1);

     document.Close();
代码在顶部保存pdf第二行时出错。变量HindiFont1保存印地语字体.ttf文件

标题9段落中的字符串是英语短语的翻译


有人能帮我使用印地语字体吗?我想使用4-5种字体。

首先,要检索以前注册的字体,请使用
PdfFontFactory
方法
CreateRegisteredFont
而不是
CreateFont
。因此,替换

PdfFont myHindiFont1 = PdfFontFactory.CreateFont("HindiFont1", PdfEncodings.IDENTITY_H, true);

然后,如果要向要以特定字体绘制的段落添加文本,请先设置字体,然后添加文本。因此

iText.Layout.Element.Paragraph Title9 = new iText.Layout.Element.Paragraph("ew[;kad fo'kslrk;sa%");
Title9.SetFont(myHindiFont1);

或者,您可以将该字体设置为文档默认字体:

Document document = new Document(pdf, size);
document.SetFont(myHindiFont1);

iText.Layout.Element.Paragraph Title9 = new iText.Layout.Element.Paragraph("ew[;kad fo'kslrk;sa%");
最后,将新段落添加到某个实体中,例如

document.Add(Title9);
结果是:


这里是我用来成功渲染上述屏幕截图的最后一段代码:

String HindiFont1 = @"LEOPALMHINDI15K710.TTF";
PageSize size = PageSize.A4;

PdfFontFactory.Register(HindiFont1, "HindiFont1");

//Error at this line: Font Not Recognized
PdfFont myHindiFont1 = PdfFontFactory.CreateRegisteredFont("HindiFont1", PdfEncodings.IDENTITY_H, true);
//Create Writer
PdfWriter writer = new PdfWriter(@"UseLeopalmhindi15K710LikeDivyanshuAgarwalImproved.pdf");

//Create Pdf Document Object
PdfDocument pdf = new PdfDocument(writer);
Document document = new Document(pdf, size);
//document.SetFont(myHindiFont1);
//String in Title9 Paragraph is a translation of English Phrase
//iText.Layout.Element.Paragraph Title9 = new iText.Layout.Element.Paragraph("ew[;kad fo'kslrk;sa%");
iText.Layout.Element.Paragraph Title9 = new iText.Layout.Element.Paragraph().SetFont(myHindiFont1).Add("ew[;kad fo'kslrk;sa%");

Title9.SetTextAlignment(iText.Layout.Properties.TextAlignment.CENTER);

document.Add(Title9);

document.Close();

对于印地语的支持,您通常应该查看。但是,关于您的具体问题:“代码在顶部保存pdf第二行时出错”-到底是哪个错误?您是否可以共享足够的数据(特别是有问题的字体)以允许再现问题?错误是font.is.not.recognized,我尝试使用的字体是LeoPalmHindi15K710。如何与您共享字体文件?我没有看到任何附加文件按钮在这里。我可以通过google drive共享字体文件吗?此链接将允许您从我的驱动器下载字体文件。Itext PdfCalligraph是商业工具吗?我需要购买它还是可以下载它的免费库?它是商业的,你需要许可证。不过,你可以要求免费试用。我现在就要试一试。手指交叉了。好的,我不知道你是如何让它工作的,但在我这边抛出了这个错误..NullReferenceException:对象引用未设置为对象的实例iText.Layout.Renderer.TextRenderer.ConvertToGlyphLine(System.String text)(at:0)iText.Layout.Renderer.TextRenderer.ConvertWaitingStringToGlyphLine()(at:0)iText.Layout.Renderer.textdrenderer.ApplyOtf()(at:0)iText.Layout.Renderer.LineRenderer.Layout(iText.Layout.Layout.Layout.Layout.ParagraphRenderer.Layout)(at:0)iText.Layout.Renderer.RootRenderer.AddChild(iText.Layout.Renderer.IRenderer.i渲染器)(at:0)iText.Layout.RootElement
1[T].Add[T2](iText.Layout.Element.BlockElement
1[T]元素)(at:0)iText.Layout.Document.Add[T](iText.Layout.Element.BlockElement`1[T]元素)(at:0)Panel.HindiPdf()(at Assets/Scripts/Panel.cs:7123)Panel+d_112.MoveNext()(at Assets/Scripts/Panel.cs:6791)UnityEngine.SetupCoroutine.InvokeMoveNext(System.Collections.IEnumerator枚举器,System.IntPtr returnValueAddress)(位于C:/buildslave/unity/build/Runtime/Export/Coroutines.cs:17)
document.Add(Title9);
String HindiFont1 = @"LEOPALMHINDI15K710.TTF";
PageSize size = PageSize.A4;

PdfFontFactory.Register(HindiFont1, "HindiFont1");

//Error at this line: Font Not Recognized
PdfFont myHindiFont1 = PdfFontFactory.CreateRegisteredFont("HindiFont1", PdfEncodings.IDENTITY_H, true);
//Create Writer
PdfWriter writer = new PdfWriter(@"UseLeopalmhindi15K710LikeDivyanshuAgarwalImproved.pdf");

//Create Pdf Document Object
PdfDocument pdf = new PdfDocument(writer);
Document document = new Document(pdf, size);
//document.SetFont(myHindiFont1);
//String in Title9 Paragraph is a translation of English Phrase
//iText.Layout.Element.Paragraph Title9 = new iText.Layout.Element.Paragraph("ew[;kad fo'kslrk;sa%");
iText.Layout.Element.Paragraph Title9 = new iText.Layout.Element.Paragraph().SetFont(myHindiFont1).Add("ew[;kad fo'kslrk;sa%");

Title9.SetTextAlignment(iText.Layout.Properties.TextAlignment.CENTER);

document.Add(Title9);

document.Close();