在VB.NET或C#中使用itextsharp dll读取PDF内容
我如何使用带有Pdfreader类的itextsharp读取PDF内容。 我的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();
}
您无法像使用iTextSharp一样阅读和分析PDF的内容。
从iTextSharp的SourceForge教程:
您无法使用iText“解析”现有的PDF文件,您只能每页“读取”它的页面。
这是什么意思?
PDF格式只是一个放置文本和图形的画布,没有任何结构信息。 因此,PDF文件中没有任何“iText对象”。 在每个页面中可能会有一些“字符串”,但不能使用这些字符串重建短语或段落。 可能绘制了很多线条,但不能根据这些线条检索表格对象。 简而言之:解析PDF文件的内容对于iText来说是不可能的。 在新闻组新闻上发布你的问题://comp.text.pdf,也许你会从已经构建工具的人那里得到一些答案,这些工具可以解析PDF并提取其中的一些内容,但不要期望工具能够执行子弹无法转换为结构化文本。
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);
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内容中去除大量附加信息,例如位置坐标。
上一篇: Reading PDF content with itextsharp dll in VB.NET or C#
下一篇: c#