Разница шрифта в полях акроформы между обычным и отображаемым значением - PullRequest
0 голосов
/ 12 апреля 2020

Я только начал проект для персонализированного бухгалтерского программного обеспечения, где я заполняю результаты в готовой PDF-форме. У меня все работает правильно, но в одной из форм текст, введенный с помощью iText7, имеет другой шрифт, чем поля, которые рассчитываются автоматически или вводятся вручную. Когда я щелкаю в поле формы полученного файла PDF, шрифт меняется с displayfont на настоящий шрифт.

Есть ли способ установить шрифт по умолчанию, используемый iText7 для заполнения полей? Это не проблема для других форм, поэтому я не уверен, как с этим справиться. Я использую метод SetValue (строковое значение, отображение строки), чтобы установить текст, потому что мне нужно форматирование валюты.

РЕДАКТИРОВАТЬ: у меня есть другие формы, которые не имеют этой проблемы. Я проверил шрифт в полях этих форм и получил следующий результат:

{PdfFont{fontProgram=Times-Roman}}
embedded: false
fontEncoding: {iText.Kernel.Font.DocFontEncoding}
fontProgram: {Times-Roman}
forceWidthsOutput: false
newFont: false
notdefGlyphs: Count = 0
shortTag: {byte[256]}
subset: false
subsetRanges: null
toUnicode: null

Форма с проблемами имеет следующие свойства шрифта для полей:

{PdfFont{fontProgram=Helvetica}}
embedded: false
fontEncoding: {iText.IO.Font.FontEncoding}
fontProgram: {Helvetica}
forceWidthsOutput: false
newFont: true
notdefGlyphs: Count = 0
shortTag: {byte[256]}
subset: true
subsetRanges: null
toUnicode: null

Плохой форма использует новый шрифт, тогда как хорошая форма использует шрифт, который должен. Я пробовал следующее ( field = fieldname, value = text для поля ):

PdfAcroForm form = PdfAcroForm.GetAcroForm(PdfDocument, true);
PdfFont font = PdfFontFactory.CreateFont(StandardFonts.TIMES_ROMAN);
PdfFormField formField = form.GetField(field.ToString());
formField.SetFont(font);
formField.SetValue(value);

К сожалению, это ничего не делает, и я все равно получаю поля, которые отображаются как Helvetica. Когда я нажимаю на поле, оно превращается в Times Roman, но так было всегда.

Я проверил обе формы с помощью RUPS, и они выглядят по-разному: 1 = плохой pdf, 2 = хороший pdf

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

...