首页 > 解决方案 > iTextSharp 4.1.6 西里尔文文本提取

问题描述

我正在使用 iTextSharp 4.1.6-LGPL。文本提取逻辑与此答案中描述的相同。

            var path = @"D:\ru.pdf";

            var reader = new PdfReader(path);

            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();
            }

            var res= sb.ToString();

输入的 PDF 文件只包含一个单词:Слово

实际提取结果为:ru-RU\u0002Á\u0003#\u0003(\u0003\u000f\u0003(

我尝试了不同的编码技巧,但没有成功。

此外,最新版本的 iTextSharp 输出是正确的PdfTextExtractor,它在 4.6.1 中不可用

有谁知道如何获得正确的输出?

标签: c#.netencodingitextcyrillic

解决方案


推荐阅读