0

Visual Studio で itextsharp を使用してテーブル内に三角形の文字を書き込むコードがあります (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)
4

1 に答える 1

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()、フォールバック フォントでサイレントに失敗することです。サイレント フォールバックは良さそうに聞こえますが、簡単に解決できる問題のトラブルシューティングに何時間も費やすこともあります。

于 2013-10-13T15:57:31.563 に答える