Я использую 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