Я использую iTextSharp 4.1.6-LGPL. Логика извлечения текста c такая же, как описано в этом ответе .
var path = @"D:\ru.pdf";
var reader = new PdfReader(path);
StringBuilder sb = new StringBuilder();
try
{
for (int page = 1; page <= reader.NumberOfPages; page++)
{
var cpage = reader.GetPageN(page);
var content = cpage.Get(PdfName.CONTENTS);
var ir = (PRIndirectReference)content;
var value = reader.GetPdfObject(ir.Number);
if (value.IsStream())
{
PRStream stream = (PRStream)value;
var streamBytes = PdfReader.GetStreamBytes(stream);
var tokenizer = new PRTokeniser(new RandomAccessFileOrArray(streamBytes));
try
{
while (tokenizer.NextToken())
{
if (tokenizer.TokenType == PRTokeniser.TK_STRING)
{
string str = tokenizer.StringValue;
sb.Append(str);
}
}
}
finally
{
tokenizer.Close();
}
}
}
}
finally
{
reader.Close();
}
var res= sb.ToString();
Входной файл PDF содержит только одно слово: Слово
Фактический результат для извлечения: ru-RU \ u0002Á \ u0003 # \ u0003 (\ u0003 \ u000f \ u0003 (
) Я пробовал разные приемы кодирования безуспешно.
Кроме того, новейшая версия вывода iTextSharp корректна с использованием PdfTextExtractor
, которого нет в 4.6.1
Кто-нибудь знает, как получить правильный вывод?