如何使用iTextSharp 4.1.6提取文本?

时间:2012-04-13 14:50:51

标签: c# itextsharp text-extraction

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

对于某些人和我来说,如何使用此版本提取文本可能会很有趣。

有没有人有想法?

1 个答案:

答案 0 :(得分:8)

当我和你在同一条船上的时候,我不得不手动一起破解这个。希望这很有帮助。它可能并不完美,但我能够通过这种方式从文档中获取所需的文本。 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();