无法在pdf中正确转换为文本

时间:2013-09-10 08:02:01

标签: c# pdf itextsharp

我想将pdf转换为文本格式并使用itextsharp dll这里是我的代码将我的pdf转换为字符串格式但在某些情况下pdf此代码无法正常转换,就像我传递PDF文件并假设在pdf标题中有像Microsoft Windows这样的名称然后像MMMiicccrrossofft WWiiiindooowsss那样转换它,并且假设有像xyx@gmail.com这样的电子邮件ID,而不是像xxxyyyzzzz @@@ ggggmaillll.com那样给出结果。任何人都可以告诉我为什么会发生这种情况。

public static string ReadPDFFile(string pdfFile)
    {
        StringBuilder text = new StringBuilder();
        if (File.Exists(pdfFile))
        {
            PdfReader reader = new PdfReader(pdfFile);
            for (int i = 1; i <= reader.NumberOfPages; i++)
            {
                ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
                PdfReader pdfreader = new PdfReader(pdfFile);
                string currenttext = PdfTextExtractor.GetTextFromPage(pdfreader, i, strategy);
                currenttext = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(currenttext)));                
                text.Append(currenttext);
            }
            try
            {
                reader.Close();
            }
            catch
            {
            }
        }
        return Convert.ToString(text);
    }

1 个答案:

答案 0 :(得分:0)

  

当我传递PDF文件并假设在pdf标题中有像Microsoft Windows这样的名称然后将其转换为MMMiicccrrossofft WWiiiindooowsss并假设有像xyx@gmail.com这样的电子邮件ID而不是像xxxyyyzzzz @@@ ggggmaillll.com那样给出结果。任何人都可以告诉我为什么会发生这种情况。

您提到该问题尤其发生在标题或电子邮件地址等特殊文本部分。我假设那些文本部分打印得有些大胆。

多次提取这些粗体部分中的字母的原因是,在PDF内部,很可能 这些字母的多个副本!为了在不实际使用粗体字体的情况下实现粗体效果,某些程序使用小位移多次打印相同的字符。这通常被称为“穷人的大胆”。

其他影响,例如一些阴影,可能会使用相同的基本技术,仅使用不同的颜色,并且可能在相同字符的副本之间稍微更大的位移。

要提取同一个字符的多个副本作为单个副本,您必须创建一个识别这些技术的扩展文本提取策略。您可以根据现有策略SimpleTextExtractionStrategyLocationTextExtractionStrategy的代码创建它们,方法是检查在几乎相同的坐标处是否存在多个相同字符的出现。