iText 7, создающий редактируемое поле со встроенным шрифтом, не может видеть ввод - PullRequest
0 голосов
/ 26 апреля 2018

Как мне решить проблему?Когда я создаю шрифт, который не встроен, я создаю редактируемое текстовое поле, используя следующий код:

var myPdfField = PdfTextFormField.CreateText(pdfDoc, textBoxRect, sAssignedName).SetFont(fieldFont).SetVisibility(PdfFormField.VISIBLE);

Когда я печатаю в поле PDF, я вижу набранный текст, и все работает как положено

Когда я встраиваю шрифт в PDF, я не вижу текст, введенный в поле.Я использовал несколько методов для создания шрифта и пару, чтобы добавить текстовое поле с одинаковыми результатами.Вот как я сейчас создаю шрифт.

fontPgmTimes = FontProgramFactory.CreateFont(sFontTimes);
timesFontBold = timesFontNorm = PdfFontFactory.CreateFont(fontPgmTimes, PdfEncodings.WINANSI, true);

Если я наберу в файл со встроенным шрифтом и выйду из PDF без сохранения, он предложит мне сохранить изменения.Если я откажусь от изменений, подсказок не будет.Поэтому я думаю, что текст вводится в поле, и я не вижу его на экране.

Добавлено 2018.05.01 Я обнаружил, что добавление текста в текстовое поле изменяет поведение.Каждый символ, введенный в текстовое поле, может использоваться как новый текст.Например, добавление текста «abcABCdef789., -», как показано

var myPdfField = PdfTextFormField.CreateText(pdfDoc, textBoxRect, sAssignedName, "abcABCdef789.,-").SetFont(fieldFont).SetVisibility(PdfFormField.VISIBLE);

, позволяет пользователю вводить любое количество символов, если они ограничены теми, которые указаны в исходном тексте.Поведение по умолчанию такое, как если бы в качестве текста была введена пустая строка "".

1 Ответ

0 голосов
/ 03 мая 2018

Каждый раз, когда вы создаете встроенный шрифт PDF в iText 7, он по умолчанию встраивает только подмножество определений фактически используемых глифов в документ.Вы сами это заметили, когда добавили начальное значение в свое поле:

var myPdfField = PdfTextFormField.CreateText(pdfDoc, textBoxRect, sAssignedName, "abcABCdef789.,-").SetFont(fieldFont).SetVisibility(PdfFormField.VISIBLE);

. Поскольку глифы символов "abcABCdef789.,-" (и только они) использовались iText (для создания внешнего вида поля)они представляют собой подмножество встроенных глифов вашего шрифта.

Если вы хотите встроить весь шрифт, чтобы вместо этого пользователь мог вводить любые символы из вашего шрифта, вы должны отключить подмножество:

fieldFont.SetSubset(false);

(Сделайте это как можно раньше после генерации шрифта fieldFont, чтобы предотвратить ошибочный запуск iText для создания подмножества.)

Если вы хотите встроить предопределенные диапазоны глифов из шрифта(например, если заданная вами кодировка не охватывает весь набор глифов шрифтов), вы можете сделать это следующим образом:

fieldFont.SetSubset(false);
fieldFont.AddSubsetRange(new int[] { 32, 255 });

(Еще раз, сделайте это как можно раньше после генерации fieldFontшрифт, чтобы предотвратить ошибочное начало iText для создания пользовательского подмножества.)

Это может выглядеть немного странно, потому что вы сначала "установите Подмножество на false"d затем «добавить диапазон подмножеств».Если принять во внимание значение SetSubset как «включить создание пользовательского подмножества только используемых глифов», то это имеет смысл.

Это, кстати, соответствует документации SetSubset метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...