使用itextsharp dll在VB.NET或C#中读取PDF内容
使用itextsharp dll在VB.NET或C#中读取PDF内容
如何使用itextsharp的Pdfreader类阅读PDF内容。我的PDF文档可能包含纯文本或文本图片。
admin 更改状态以发布 2023年5月23日
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);
其他的答案对我都没有用,它们似乎都是针对 iTextSharp 的 AGPL v5 版本。我无法在 FOSS 版本中找到任何关于 SimpleTextExtractionStrategy 或 LocationTextExtractionStrategy 的参考。
与此相关的其他可能非常有用的内容:
const string PdfTableFormat = @"\(.*\)Tj"; Regex PdfTableRegex = new Regex(PdfTableFormat, RegexOptions.Compiled); ListExtractPdfContent(string rawPdfContent) { var matches = PdfTableRegex.Matches(rawPdfContent); var list = matches.Cast () .Select(m => m.Value .Substring(1) //remove leading ( .Remove(m.Value.Length - 4) //remove trailing )Tj .Replace(@"\)", ")") //unencode parens .Replace(@"\(", "(") .Trim() ) .ToList(); return list; }
如果显示的文本为 Foo(bar),则它在 PDF 中的编码形式为 (Foo\(bar\))Tj,此方法将按预期返回 Foo(bar) 的纯文本数据。该方法将从 PDF 的原始内容中剥离出许多其他信息,如位置坐标。
using iTextSharp.text.pdf; using iTextSharp.text.pdf.parser; using System.IO; public string ReadPdfFile(string fileName) { StringBuilder text = new StringBuilder(); if (File.Exists(fileName)) { PdfReader pdfReader = new PdfReader(fileName); for (int page = 1; page <= pdfReader.NumberOfPages; page++) { ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy(); string currentText = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy); currentText = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(currentText))); text.Append(currentText); } pdfReader.Close(); } return text.ToString(); }
翻译成中文为:一个加粗的段落内容是123。