我想将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);
}
答案 0 :(得分:0)
当我传递PDF文件并假设在pdf标题中有像Microsoft Windows这样的名称然后将其转换为MMMiicccrrossofft WWiiiindooowsss并假设有像xyx@gmail.com这样的电子邮件ID而不是像xxxyyyzzzz @@@ ggggmaillll.com那样给出结果。任何人都可以告诉我为什么会发生这种情况。
您提到该问题尤其发生在标题或电子邮件地址等特殊文本部分。我假设那些文本部分打印得有些大胆。
多次提取这些粗体部分中的字母的原因是,在PDF内部,很可能 这些字母的多个副本!为了在不实际使用粗体字体的情况下实现粗体效果,某些程序使用小位移多次打印相同的字符。这通常被称为“穷人的大胆”。
其他影响,例如一些阴影,可能会使用相同的基本技术,仅使用不同的颜色,并且可能在相同字符的副本之间稍微更大的位移。
要提取同一个字符的多个副本作为单个副本,您必须创建一个识别这些技术的扩展文本提取策略。您可以根据现有策略SimpleTextExtractionStrategy
和LocationTextExtractionStrategy
的代码创建它们,方法是检查在几乎相同的坐标处是否存在多个相同字符的出现。