【问题标题】:Unicode symbols in iTextSharpiTextSharp 中的 Unicode 符号
【发布时间】:2011-06-29 21:40:47
【问题描述】:

我正在尝试在我的 PDF 文件中使用 Unicode 符号 iTextSharp

Dim base As BaseFont = BaseFont.CreateFont("C:\\WINDOWS\\Fonts\\WINGDING.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED)

Dim wd As Font = New Font(base, 12, Font.NORMAL, BaseColor.BLACK)
phrase = New Phrase("q", wd)

这是Wingding的Q.Key。但在 PDF 文件中它不起作用。 它只是在 Char 应该在的位置不打印任何内容。

哪里出错了?

【问题讨论】:

  • 我建议您特别检查base...getFontFamilyName()getPostscriptFontName()getEncoding() 也不会受伤。确保您获得了所需的字体。
  • 另外,您使用的是什么版本的 iTextSharp。 Chris 基本相同的代码运行良好……让我怀疑是配置问题。版本、字体路径之类的。

标签: .net vb.net itextsharp


【解决方案1】:

我刚刚执行了以下操作,它完全按照应有的方式工作。 Wingdings 字体在两个单词之间显示为一个带有右下角阴影的方框。唯一的问题是我实际上无法让 Wingdings 字体真正嵌入自己,我相信它是 iTextSharp 隐式规则,因为它假定无处不在。我尝试使用 WINGDNG2.TTF 并正确嵌入。

您可能没有正确添加短语吗?或者你是在没有 Wingdings 的机器上打开它吗?

    ''//Create a new document
    Dim Doc As New iTextSharp.text.Document(PageSize.LETTER, 20, 20, 20, 20)
    ''//Store the document on the desktop
    Dim writer = PdfWriter.GetInstance(Doc, New FileStream(Path.Combine(My.Computer.FileSystem.SpecialDirectories.Desktop, "Output.pdf"), FileMode.Create, FileAccess.Write, FileShare.Read))

    ''//Open the PDF for writing
    Doc.Open()

    ''//Insert a page
    Doc.NewPage()

    ''//Add a regular text block using the default font
    Dim Phrase = New Phrase("Hello")
    Doc.Add(Phrase)


    ''//Create our base font
    Dim base As BaseFont = BaseFont.CreateFont("C:\Windows\Fonts\wingding.ttf", BaseFont.CP1252, BaseFont.EMBEDDED)
    ''//Create our usable font
    Dim wd As Font = New Font(base, 12, iTextSharp.text.Font.NORMAL, BaseColor.BLACK)

    ''//Add a text block using Wingdings
    Phrase = New Phrase("q", wd)
    Doc.Add(Phrase)

    ''//Add a trailing text block using the default font again
    Phrase = New Phrase("Bye")
    Doc.Add(Phrase)

    ''//Close the PDF
    Doc.Close()

【讨论】:

  • “ZapfDingbats”和“Symbol”是 PDF 的“Base 14 Fonts”中的两种符号字体。机翼应该没问题。
  • @Mark Storer,这不再与 OP 真正相关,但你能让 Wingdings 真正嵌入吗?或者,也许我遇到了 Acrobat 问题。当我运行上面的代码并尝试选择该框时,我收到一条警告说它找不到原始字体。当我将其更改为 WINGDNG2.TTF 时,它不会警告我。
  • 这让我感到尴尬...我在测试阶段我必须删除代码以添加短语...一切正常...对不起,我很生气你这个愚蠢的“虫子”......我的错!感谢大家的解决方案尝试......我在地窖里......呜呜......
  • @Doc Snuggles,我们以前都去过那里。我花了半个小时在一个非常简单的数学方程式上,它只是为了发现我实际上并没有在测试之前保存文件。
【解决方案2】:

该代码似乎是 C# 项目的 Visual Basic 端口,因为保存字体文件路径的字符串已在其中转义了反斜杠 - 意思是“C:\WINDOWS\FONTS\WINGDING.TTF”。

这是 VB 中的错误,它可能试图查找位于“C:\\WINDOWS\\FONTS\\WINGDING.TTF”的文件。

显然有效的克里斯的代码也指向了这个方向;因为转义的反斜杠是它的少数区别之一。

【讨论】:

    猜你喜欢
    • 2019-04-15
    • 2010-12-20
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 2012-05-21
    • 2016-03-11
    • 1970-01-01
    相关资源
    最近更新 更多