2013-10-13 19 views
0

我有一個代碼,它在Visual Studio(它可能是vb或c#)中使用itextsharp在表內寫入一個三角形字符。 爲此,我使用了包含它的threbuchet字體。它工作正常,但我想將三角形​​塗成紅色。當試圖使用iTextSharp.text.FontFactory.GetFont(我認爲這很好得到顏色)時,沒有任何符號被寫入pdf。如何使用itextsharp在vb,c中對utf char字體進行着色#

是否有其他方法可以在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

的問題是,在你的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()會悄悄地用備用字體失敗。沉默的回退聽起來不錯,但你也可以花幾個小時來解決一些簡單的問題。

+0

我有「字體」文件夾trebuchet字體我需要告訴它在哪裏? – cMinor

+0

iText不會自動尋找字體,你必須告訴它在哪裏看。或者,您也可以使用'FontFactory.RegisterDirectory()'註冊整個文件夾。根據該文件夾中的字體數量,這可能會減慢程序速度。 –

相關問題