使用iTextSharp,尝试从PDF中提取文本会产生不可读的数据

时间:2014-04-24 18:29:11

标签: c# .net pdf itextsharp

好的,我尝试使用iTextSharp从PDF文件中提取文本......这就是我想要的。但是,当我提取文本时,它会给我垃圾而不是文本。

这是我使用的代码......

List<String> pdfText = new List<string>();
for (int page = 1; page <= reader.NumberOfPages; page++)
{
    ITextExtractionStrategy its = new iTextSharp.text.pdf.parser.LocationTextExtractionStrategy();
    String strPage = PdfTextExtractor.GetTextFromPage(reader, page, its);

    strPage = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default,
              Encoding.UTF8, Encoding.Default.GetBytes(strPage)));

    pdfText.Add(strPage);
}

然后我将该数据保存到文本文件中,但是我得到的文本看起来像二进制数据......不可读的文本,而不是可读文本。我发布了一张我所看到的图像,但它不会让我失望。对不起。

我试过没有编码尝试,它没有更好的工作......仍然是二进制数据(在记事本中查看),虽然我不确定它是否相同通过编码尝试产生的。

知道发生了什么以及如何解决它?

3 个答案:

答案 0 :(得分:0)

请在Adobe Reader中打开文档,然后尝试复制/粘贴部分文本。

如果您使用第一页执行此操作,则会获得:

  

以下政策(L30304)已由Alpha II存档。许多政策都是更大的政策的一部分   管辖权,比政策所示。该政策涵盖以下状态:

     

•印第安纳

     

•MICHIGAN

但是,如果您使用第二页执行此操作,您将获得: enter image description here

换句话说:从Adobe Reader复制/粘贴会给你带来垃圾。

如果从Adobe Reader复制/粘贴为您提供垃圾,任何文本提取工具都会给您带来垃圾。您需要对文档进行OCR以解决此问题。

关于评论中的其他问题:如果PDf采用自定义编码方法,Adobe如何正确显示它,除非PDF文件包含处理它所需的信息?

这个问题在14分钟的电影中被回答:https://www.youtube.com/watch?v=wxGEEv7ibHE

答案 1 :(得分:0)

试试这段代码:

 List<String> pdfText = new List<string>();
for (int page = 1; page <= reader.NumberOfPages; page++)
{
    ITextExtractionStrategy its = new iTextSharp.text.pdf.parser.LocationTextExtractionStrategy();
    PdfTextExtractor.GetTextFromPage(reader, page, its);

    strPage = its.GetResultantText();

    pdfText.Add(strPage);
}

答案 2 :(得分:0)

试试这段代码,为我工作

 using (PdfReader reader = new PdfReader(path))
            {
                StringBuilder text = new StringBuilder();

                for (int i = 1; i <= reader.NumberOfPages; i++)
                {
                    text.Append(PdfTextExtractor.GetTextFromPage(reader, i));
                }

                return text.ToString();
            }