iTextSharp письмо показать в PDF на клике - PullRequest
0 голосов
/ 05 октября 2019

Заполнение существующих полей PDF-файла с помощью itextsharp.

Все в порядке, за исключением части, по какой-то причине буква "ć" не видна в текстовом поле.

Она отображается так при предварительном просмотре и печати

enter image description here

Но когда я нажимаю на поле, я вижу скрытую букву "ć"

enter image description here

То, что я пробовал.

Размер шрифта, уменьшающий размер шрифта, различающий

Это полный код для редактирования этого поля

If IIf(IsDBNull(_row("II")), 0, _row("II")) = 0 Then
    pdfFormFields.SetField("II", "Prvo izvješće")
ElseIf IIf(IsDBNull(_row("II")), 0, _row("II")) = 1
    pdfFormFields.SetField("II", "Ispravak")
Else
    pdfFormFields.SetField("II", "Dopuna")
End If

Чтоя ошибаюсь здесь :(.

PDF: Весь документ PDF

Редактировать: после добавления подстановочного шрифта результат будет ниже

enter image description here

1 Ответ

1 голос
/ 07 октября 2019

Поле II имеет вид по умолчанию /Calibri 8 Tf 0 g. Шрифт Calibri в вашем PDF-файле определяется с кодировкой WinAnsiEncoding . Буква ć отсутствует в этой кодировке. Таким образом, производитель PDF сознательно или неосознанно попытался помешать вам ввести это письмо. Однако если вы предоставите замещающий шрифт, который знает этот символ, вы можете заполнить это поле по своему усмотрению.

Воспроизведение проблемы

using (PdfReader reader = new PdfReader(@"JOPPD.pdf"))
using (PdfStamper stamper = new PdfStamper(reader, File.Create(@"JOPPD-FilledLikeProgramerAnel.pdf")))
{
    stamper.AcroFields.SetField("II", "Prvo izvješće");
}

приводит к

JOPPD-FilledLikeProgramerAnel_Seite_1.png

Исправление с помощью шрифта подстановки

using (PdfReader reader = new PdfReader(@"JOPPD.pdf"))
using (PdfStamper stamper = new PdfStamper(reader, File.Create(@"JOPPD-FilledLikeProgramerAnelImproved.pdf")))
{
    BaseFont baseFont = BaseFont.CreateFont(@"c:\Windows\Fonts\arial.ttf", BaseFont.IDENTITY_H, true);
    stamper.AcroFields.AddSubstitutionFont(baseFont);
    stamper.AcroFields.SetField("II", "Prvo izvješće");
}

приводит к

JOPPD-FilledLikeProgramerAnelImproved_Seite_1.png

...