Читайте данные аннотации с помощью Umlaut, используя iText - PullRequest
1 голос
/ 04 марта 2020

Я использую iText для чтения автора и темы из аннотаций к марке. Если автор аннотации содержит не-ASCII символы (например, «äüö»), они читаются следующим образом:

Антон Мюллер

Мой код:

using System;
using System.IO;
using iText.Kernel.Pdf;

namespace iText7Test
{
    class Program
    {
        static void Main(string[] args)
        {

            Stream inputStream = File.OpenRead(@"Stamp_Anton_Mueller.pdf");

            PdfDocument annoPdf = new PdfDocument(new PdfReader(inputStream));

            for (int iPage = 1; iPage <= annoPdf.GetNumberOfPages(); iPage++)
            {
                PdfPage annoPage = annoPdf.GetPage(iPage);
                var annotations = annoPage.GetAnnotations();

                foreach (var annot in annotations)
                {
                    PdfDictionary annoDict = annot.GetPdfObject();

                    if ("/Stamp" != annoDict.Get(PdfName.IT, true)?.ToString())
                        continue;

                    var subject = annoDict.Get(PdfName.Subj, true);
                    var author = annoDict.Get(PdfName.T); // this reads "Anton M�ller"
                    var creationDate = annoDict.Get(PdfName.CreationDate, false);

                    Console.WriteLine("\nAuthor of Stamp_Anton_Mueller.pdf: {0}", author); // this writes: "Author of Stamp_Anton_Mueller.pdf: Anton M?ller"
                }
            }

        }
    }
}

Если я просто загружаю inputStream в строку, результирующая строка имеет те же проблемы *.

string myPdfString = new StreamReader(inputStream).ReadToEnd();

Однако, если я устанавливаю параметр Encoding для StreamReader, отображается Umlaut правильно.

string encodedPdfString = new StreamReader(inputStream, Encoding.Default).ReadToEnd();

Я не видел никакой опции, чтобы выбрать кодировку для PdfReader

Образец PDF: https://drive.google.com/file/d/1_bs47kSkITX1SdDYllVBQPhRP4D3xUAw/view

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