【发布时间】:2013-04-30 04:37:51
【问题描述】:
我正在使用以下方法逐行提取 pdf 文本。但问题是,它不是阅读单词和数字之间的空格。有什么办法可以解决这个问题??
我只想创建一个字符串列表,列表对象中的每个字符串都有一个来自 pdf 的文本行,就像它在 pdf 中一样,包括空格。
public void readtextlinebyline(string filename) {
List<string> strlist = new List<string>();
PdfReader reader = new PdfReader(filename);
string text = string.Empty;
for (int page = 1; page <= 1; page++)
{
text += PdfTextExtractor.GetTextFromPage(reader, page ,new LocationTextExtractionStrategy())+" ";
}
reader.Close();
string[] words = text.Split('\n');
foreach (string word in words)
{
strlist.Add(word);
}
foreach (string st in strlist)
{
Response.Write(st +"<br/>");
}
}
我也通过将策略更改为 SimpleTextExtractionStrategy 来尝试此方法,但它也不适合我。
【问题讨论】:
-
这个answer to "itext java pdf to text creation" 可以说明原因并提示解决方案:复制文本提取策略并调整内部参数,在您的情况下将间隙的最小宽度识别为空格,@默认为 987654323@;回问的人通过
renderInfo.getSingleSpaceWidth()/4f获得了改进的结果。 -
@Pengu 当你提供赏金时,你肯定会遇到这个问题。因此,您当然可以提供一个或多个示例 PDF 作为建议解决方案的测试用例。问题的当前状态使得回答纯粹是猜测。
-
@mkl 很抱歉回复晚了,我的连接中断了。我不喜欢的不是你的解决方案(它有效)——让我感到不满的是这个解决方案可能不可靠。 F.E:它适用于一个文件,但可能在另一个文件上会产生太多空格(因为该文档需要 renderInfo.getSingleSpaceWidth()/2f 或完全不同的分隔符)。我还没有一个例子,但我可以想象它会发生。所以我从“更”可靠的来源寻求答案。
-
@Pengu 不幸的是,您不会轻易获得通用的 100% 可靠的解决方案。我指出的答案中提到了一些难以获得它的问题。很难区分字距调整和紧密排列的单词。
-
@mkl 是的,我是这么想的。悲伤但不可改变。我也尝试了很多事情,比如尝试根据字体计算空间大小等,但没有什么比你已经发布的解决方案更好的了。如果您再次将您的解决方案发布为 answear,我可以给您声誉。
标签: c# pdf extract extraction pdf-reader