ItextSharp(Itext)- 设置段落的自定义字体

11

我想将自定义字体设置为段落的字体,但是我无法使其起作用。我尝试设置.Font=,但它只在字体大小方面有效,而忽略了字体本身。你能帮忙解决吗?

Paragraph T = new Paragraph(newTempLine);
iTextSharp.text.Font contentFont = iTextSharp.text.FontFactory.GetFont("Webdings", 12, iTextSharp.text.Font.NORMAL);
T.Font = contentFont;
myDocument.Add(T);
2个回答

13

构造函数中设置:

Font contentFont = FontFactory.GetFont(…);
Paragraph para = new Paragraph(newTempLine, contentFont);

2
你是否了解为什么这个能够工作而T.Font = ...不行? - Joel Peltonen
2
@Nenotlep 我并不是iText内部的权威,我需要查看源代码或者其他东西,但是我猜测设置字体属性只会改变你稍后添加到段落中的文本的字体。(这是基于“段落”具有“add(Element)”方法的事实,因此它似乎本身就是一个复合元素。) - millimoose
1
@Nenotlep 请记住,PDF不是声明性标记语言,它是PostScript的派生物,一种优化了渲染非常大的文档而无需完全在内存中保留的命令式绘图语言。为了允许流输出,iText也不会在内存中构建文档表示 - 我相信当您向文档添加元素时,它通常会立即写出。因此,看起来您正在操作文档结构的逻辑表示,但流可能会通过此抽象泄漏。 - millimoose
1
@Nenotlep 另外,为了将其从我的假设和推断领域中拿出来,如果您对使用 PDF 工作感兴趣,您可能需要购买并查看 iText in Action。我相信它涵盖了足够的 PDF 格式底层工作方式,使您能够在使用库生成 PDF 时进行良好的推理。 - millimoose
非常感谢您的评论,这很有教育意义,现在想起来听起来很合理。下次我订购 Manning 的东西时可能会买这本书。 - Joel Peltonen

0

请检查以下是否有效:

string name = "Century Gothic Bold";
if (!FontFactory.IsRegistered(name))
{
    string systemRoot = Environment.GetEnvironmentVariable("SystemRoot");
    string path = Path.Combine(systemRoot, "fonts", @"GOTHICB.TTF");
    FontFactory.Register(path);
}

var font = FontFactory.GetFont(name, fontSize, textColor);
var paragraph = new Paragraph(text, font);
Phrase phrase = new Phrase(paragraph);
var myPdfCell = new PdfPCell(phrase);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接