无法将 pdf 格式正确转换为文本

本文关键字:转换 文本 格式 pdf | 更新日期: 2023-09-27 18:30:42

我想将 pdf 转换为文本格式并使用 itextsharp dll 这是我的代码,它将我的 pdf 转换为字符串格式,但在某些情况下 pdf 此代码无法正常工作转换,例如当我传递 PDF 文件并假设在 pdf 标题中有一个像Microsoft窗口一样的名称,然后它像 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);
    }

无法将 pdf 格式正确转换为文本

当我传递 PDF 文件并假设在 PDF 标题中有一个像 Microsoft 窗口一样的名称,然后它会像 MMMiicccrrossofft WWiiiindooowsss 一样转换它,并假设有像 xyx@gmail.com 这样的电子邮件 ID 而不是它给出的结果像xxxyyyzzzz@@@ggggmaillll.com。 谁能告诉我为什么在某些情况下会发生这种情况。

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

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

其他效果,例如一些阴影,可能使用相同的基本技术,只是使用不同的颜色,并且同一角色的副本之间的位移可能略大。

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