如何使用iTextSharp设置monospaced字体?

这是我到目前为止管理我的字体的方式:

BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1250, BaseFont.EMBEDDED, false); Font titleFont = new Font(bf, 20); 

现在,我想设置monospaced(固定宽度)字体用于字符串格式化。 我是否必须下载一些ttf文件(正如我正在阅读的那样)或iTextSharp中已包含等宽字体

如果您不想嵌入字体,可以使用:

 BaseFont bf = BaseFont.createFont( BaseFont.COURIER, BaseFont.CP1250, BaseFont.NOT_EMBEDDED); Font titleFont = new Font(bf, 20); 

Helvetica是一种比例字体。 如果需要等宽字体,则需要使用Courier等字体。 请参阅有关等宽字体的Wikipedia页面 。

请注意,您的代码没有创建嵌入的字体:Helvetica(就像Courier一样)是所谓的标准类型1字体之一。 从不嵌入标准Type 1字体,因为iText只能访问这些字体的AFM文件,而不能访问PFB文件。 阅读例如: 为什么在创建PDFA / 1a时会出现字体嵌入错误? 。 在其他一些情况下,即使您不想,iText也会嵌入字体。 例如: 为什么即使我指定不嵌入,iText也会嵌入字体?

如果你想嵌入等宽字体,或者如果你不喜欢Courier,你需要一个字体文件,例如一个ttf文件。 我用Google搜索了“性感”的等宽字体,我发现这些页面: 十大最受欢迎的等宽字体和十种免费的等宽字体用于编程 。 如果您在Windows上工作,您可以选择Courier New和Lucida Sans Typewriter,如本知识库文章中所述 。

获得TTF文件后,只需使用标准的iText代码即可。 在Lucida Sans Typewriter Regular的情况下,你需要这样的东西:

 BaseFont bf = BaseFont.createFont( "c:/windows/fonts/LTYPE.TTF", BaseFont.CP1250, BaseFont.EMBEDDED); Font titleFont = new Font(bf, 20); 

注意:请始终检查您要使用的字体是否支持您要使用的编码。 不要假设每种字体都知道每种编码。

请注意,大多数字体都不是免费的。 另请参阅使用iText时是否需要Windows字体许可证? 。 您可以下载字体这一事实并不意味着您可以免费使用它(对于iText也是如此;如果您要为客户构建应用程序,则必须购买iText许可证)。