C# 如何使用iTextSharp 4.1.6提取文本?
iTextSharp 4.1.6是根据LGPL许可的最后一个版本,可免费用于商业用途,无需支付许可费 对于一些人和我来说,如何用这个版本提取文本可能很有趣C# 如何使用iTextSharp 4.1.6提取文本?,c#,itextsharp,text-extraction,C#,Itextsharp,Text Extraction,iTextSharp 4.1.6是根据LGPL许可的最后一个版本,可免费用于商业用途,无需支付许可费 对于一些人和我来说,如何用这个版本提取文本可能很有趣 有人有什么想法吗?我和你在同一条船上,所以我不得不手工把它拼凑起来。希望这会有所帮助。它可能并不完美,但我能够通过这种方式从文档中获取所需的文本fileName是PDF文件的字符串变量/参数 var reader = new PdfReader(fileName); StringBuilder sb = new StringBuilder(
有人有什么想法吗?我和你在同一条船上,所以我不得不手工把它拼凑起来。希望这会有所帮助。它可能并不完美,但我能够通过这种方式从文档中获取所需的文本
fileName
是PDF文件的字符串变量/参数
var reader = new PdfReader(fileName);
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();
}
return sb.ToString();
var reader=newpdfreader(文件名);
StringBuilder sb=新的StringBuilder();
尝试
{
对于(int page=1;page请参见以下链接以获取示例:@Hans,该解决方案是否适用于4.1.6?我不知道iTextractionStrategy、SimpleTextractionStrategy和Pdfetextractor。我尝试在处使用代码。我发现它仅适用于某些PDF;当使用单个cha调用它时,它会在CheckToken中抛出IndexOutofRangeExceptionRacker arguments(如该示例所示)。你找到解决方案了吗?@spartedtechie.com不,没有尝试修复它。我只是使用了另一个解决方案。这是人们经常看到的穷人的文本提取解决方案之一。实际上,iText 2.1.7/4.2.0中的文本提取功能比这要先进得多(尽管有相当多的赤字)。很可能在许可证更改之前,它们也出现在最新的iTextSharp中。请尝试一下!@mkl--该版本的iTextSharp中没有PDFTextractor,至少在iTextSharp LGPL NuGet包中没有。这是我能找到的唯一方法。如果您知道DLL中有更好的方法,我将不胜感激!我还发现“内容”的情况不是PRIndirectReference,而是PRIndirectReferences的PdfArray,因此这种情况也必须相应地处理。你是对的,我认为Java版本的文本提取功能在许可证更改之前已经移植到iTextSharp是错误的。因此,我想不出任何方法来移植解析器类从Java iText 4.2.0到C#你自己。我不知道这有多容易或难。或者,当然,一旦AGPL或商业许可成为你的选择,你可以尝试切换到当前版本的iTextSharp。