我有一个代码,在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)
答案 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()
将以回退字体静默失败。无声的后备听起来不错,但你也可能花费数小时来解决一些容易解决的问题。