Символы Unicode в iTextSharp

Я пытаюсь использовать символ Unicode в своем файле PDF с 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)

Это Q.Key в Wingding. Но в файле PDF это не работает. Он просто ничего не печатает там, где должен быть Char.

Где ошибка?


person Doc Snuggles    schedule 18.02.2011    source источник
comment
Я предлагаю вам осмотреть base... getFontFamilyName() и getPostscriptFontName() в частности. getEncoding() тоже не помешает. Убедитесь, что вы получаете именно тот шрифт, о котором просите.   -  person Mark Storer    schedule 18.02.2011
comment
Кроме того, какую версию iTextSharp вы используете. В основном идентичный код Криса работал нормально ... заставляет меня подозревать проблему с конфигурацией. Версия, путь к шрифту, что-то в этом роде.   -  person Mark Storer    schedule 18.02.2011


Ответы (2)


Я просто сделал следующее, и это сработало именно так, как должно. Шрифт 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()
person Chris Haas    schedule 18.02.2011
comment
ZapfDingbats и Symbol — это два символических шрифта в базе 14 шрифтов PDF. Крылышки должны быть в порядке. - person Mark Storer; 18.02.2011
comment
@Mark Storer, это больше не связано с OP, но можете ли вы заставить Wingdings действительно встраиваться? Или, может быть, у меня проблема с Acrobat. Когда я запускаю приведенный выше код и пытаюсь выбрать поле, я получаю предупреждение о том, что не может найти исходный шрифт. Когда я изменяю его на WINGDNG2.TTF, он не предупреждает меня. - person Chris Haas; 18.02.2011
comment
Меня это смущает... На этапе тестирования я, должно быть, удалил код, чтобы добавить фразу... Все работает отлично... Простите, что надоел вам этой дурацкой ошибкой... Моя вина! Спасибо всем за попытки решения... Я в подвале... Ною.. - person Doc Snuggles; 18.02.2011
comment
@Doc Snuggles, мы все были там раньше. Я потратил полчаса на очень простое математическое уравнение, которое не работало, только для того, чтобы выяснить, что я на самом деле не сохранял файл перед тестированием. - person Chris Haas; 18.02.2011

Код выглядит как порт Visual Basic проекта C#, так как строка, содержащая путь к файлу шрифта, содержит обратную косую черту, что означает «C:\WINDOWS\FONTS\WINGDING.TTF».

Это ошибка в VB, которая, вероятно, пытается найти файл, расположенный в "C:\\WINDOWS\\FONTS\\WINGDING.TTF".

Код Криса, который, по-видимому, работает, также указывает на это; поскольку экранированные обратные косые черты являются одним из его немногих отличий.

person Diego    schedule 26.05.2011