如何在vb中使用itextsharp为utf char字体着色,c#

时间:2013-10-13 04:12:12

标签: c# vb.net colors itextsharp

我有一个代码,在visual studio中使用itextsharp在表中写入一个三角形char(它可能是vb或c#)。 为此,我使用包含它的threbuchet字体。它工作正常,但我想将三角形​​染成红色。当尝试使用iTextSharp.text.FontFactory.GetFont(我认为很好获得颜色)这样做时,根本没有符号写入pdf。

是否有其他方法可以为New iTextSharp.text.Font(bf, 8)内的字体着色?

这是代码

' table
Dim nTbl As PdfPTable = New PdfPTable(2)
nTbl.HorizontalAlignment = PdfContentByte.ALIGN_CENTER
nTbl.SetTotalWidth({40, 60})

' this works and adds the triangle char
Dim FONT As String = "fonts\trebucbd.ttf"
Dim bf As BaseFont = BaseFont.CreateFont(FONT, BaseFont.IDENTITY_H, BaseFont.EMBEDDED)
Cell = New PdfPCell(New Phrase("Δ", New iTextSharp.text.Font(bf, 8)))
Cell.HorizontalAlignment = 1
Cell.VerticalAlignment = 1
nTbl.AddCell(Cell) 

' this does not work, when trying to colour triangle 
Cell = New PdfPCell(New Phrase("Δ", iTextSharp.text.FontFactory.GetFont("fonts\trebucbd.ttf", 8, iTextSharp.text.Font.NORMAL, New iTextSharp.text.Color(128, 0, 0))))
Cell.HorizontalAlignment = 1
Cell.VerticalAlignment = 1
nTbl.AddCell(Cell)

1 个答案:

答案 0 :(得分:1)

问题在于,您BaseFont.CreateFont()明确表示要嵌入,但在FontFactory.GetFont()中,您依赖于系统默认值,而不是嵌入系统默认值。您需要使用指定嵌入的GetFont()方法的较长版本。

看起来你正在使用我没有铺设的4.1.6版本,但除了最后一个参数之外,它应该几乎相同:

iTextSharp.text.FontFactory.GetFont(FONT, BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 20, iTextSharp.text.Font.BOLD, BaseColor.RED)

此外,GetFont()旨在获取字体名称,而不是路径,但如果该名称查找失败,它仍会重新调用BaseFont.Create(),但我不确定您是否应该依赖那。相反,您应该预先注册您的字体:

iTextSharp.text.FontFactory.Register(FONT, "Treb")

然后您可以将GetFont()与别名一起使用。

iTextSharp.text.FontFactory.GetFont("Treb", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 20, iTextSharp.text.Font.BOLD, BaseColor.RED)

这样做的好处是,如果由于某种原因,您的字体文件被重命名或删除,FontFactory.Register()将抛出异常,而FontFactory.GetFont()将以回退字体静默失败。无声的后备听起来不错,但你也可能花费数小时来解决一些容易解决的问题。