我正在开始更新针对iText5编写的代码以使用iText7。
iText7中是否有类似于FontSelector类的机制,您可以在其中加载字体,“Process”操作会自动确定要使用的字体(并返回可以添加到文档中的格式化pdf“块”) )?这是代码片段(这是C ++,但我的“本地”语言是C#,所以可以随意回答C#)。
try {
doc = gcnew Document();
pdfWriter = PdfWriter::GetInstance(doc, pdfStream);
FontSelector^ selector = gcnew FontSelector();
selector->AddFont(gcnew Font(BaseFont::CreateFont("Fonts\\cour.ttf"), BaseFont::IDENTITY_H, BaseFont::NOT_EMBEDDED), 10.0f));
selector->AddFont(gcnew Font(BaseFont::CreateFont("Fonts\\arialuni.ttf"), BaseFont::IDENTITY_H, BaseFont::NOT_EMBEDDED), 10.0f));
doc->Open();
while (textReader->EndOfStream == false)
{
String^ line = textReader->ReadLine();
doc->Add(selector->Process(line + "\n"));
}
答案 0 :(得分:1)
iText7确实提供了类似的机制。甚至有一种方法可以隐式地使其工作,而无需处理块并手动将它们添加到文档中。您要查找的班级名为FontProvider
。首先,您需要创建一个实例并将字体添加到其中:
FontProvider provider = new FontProvider();
provider.AddFont(fontsFolder + "NotoSans-Regular.ttf");
provider.AddFont(fontsFolder + "FreeSans.ttf");
provider.GetFontSet().AddFont(fontsFolder + "Puritan2.otf", PdfEncodings.IDENTITY_H);
然后,您需要layout
的{{1}}实例,这些实例可能是这样创建的,或者是以任何其他方式创建的:
Document
然后,您只需将字体提供程序设置为文档,最重要的是,设置首选字体名称以触发字体选择器机制。如果您未选择首选字体名称且未明确设置PdfDocument pdfDoc = new PdfDocument(new PdfWriter(outFileName));
Document doc = new Document(pdfDoc);
,则将使用默认字体PdfFont
。
执行上述操作的代码可能如下所示:
Helvetica
最后,不要忘记关闭文档:
doc.SetFontProvider(provider);
doc.SetFont("NotoSans");
Paragraph paragraph = new Paragraph("Hello world! \u05E2\u05B4\u05D1\u05B0\u05E8\u05B4\u05D9\u05EA\u202C");
doc.Add(paragraph);