Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用iTextSharp 4.1.6提取文本?_C#_Itextsharp_Text Extraction - Fatal编程技术网

C# 如何使用iTextSharp 4.1.6提取文本?

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(

iTextSharp 4.1.6是根据LGPL许可的最后一个版本,可免费用于商业用途,无需支付许可费

对于一些人和我来说,如何用这个版本提取文本可能很有趣


有人有什么想法吗?

我和你在同一条船上,所以我不得不手工把它拼凑起来。希望这会有所帮助。它可能并不完美,但我能够通过这种方式从文档中获取所需的文本
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。