LGPL / FOSS iTextSharp 4.x
var pdfReader = new PdfReader(path); //other filestream etc
byte[] pageContent = _pdfReader .GetPageContent(pageNum); //not zero based
byte[] utf8 = Encoding.Convert(Encoding.Default, Encoding.UTF8, pageContent);
string textFromPage = Encoding.UTF8.GetString(utf8);
Ни один из других ответов не был мне полезен, похоже, что все они нацелены на AGPL v5 iTextSharp. Я никогда не мог найти ссылку на SimpleTextExtractionStrategy
или LocationTextExtractionStrategy
в версии FOSS.
Что-то еще, что может быть очень полезно в сочетании с этим:
const string PdfTableFormat = @"\(.*\)Tj";
Regex PdfTableRegex = new Regex(PdfTableFormat, RegexOptions.Compiled);
List<string> ExtractPdfContent(string rawPdfContent)
{
var matches = PdfTableRegex.Matches(rawPdfContent);
var list = matches.Cast<Match>()
.Select(m => m.Value
.Substring(1) //remove leading (
.Remove(m.Value.Length - 4) //remove trailing )Tj
.Replace(@"\)", ")") //unencode parens
.Replace(@"\(", "(")
.Trim()
)
.ToList();
return list;
}
Это извлечет только текстовые данные из PDF, если отображаемый текст будет Foo(bar)
, он будет закодирован в PDF как (Foo\(bar\))Tj
, этот метод вернет Foo(bar)
, как и ожидалось. Этот метод удалит много дополнительной информации, такой как координаты местоположения из необработанного содержимого PDF.