iText PDF PArser不会使用八位字节流将数据解析为整个单词

时间:2017-05-17 14:11:46

标签: c# pdf itext text-extraction

我正在尝试使用itextsharp(版本:5.5.1.0)解析pdf文件。 pdf文件的内容类型为“application / octet-stream”。我正在使用C#代码根据位置策略进行阅读

base.RenderText(renderInfo);

//Get the bounding box for the chunk of text
var bottomLeft = renderInfo.GetDescentLine().GetStartPoint();
var topRight = renderInfo.GetAscentLine().GetEndPoint();

//Create a rectangle from it
var rect = new Rectangle(
    bottomLeft[Vector.I1],
    bottomLeft[Vector.I2],
    topRight[Vector.I1],
    topRight[Vector.I2]);
var word = renderInfo.GetText().Trim();

// get column no
var position = (int)rect.Left;

Pdf文件图片

Pdf file image

问题:当我读到RenderInfo.GetText()时,我得到了不完整的单词,而不是“每日”我在下一循环中得到“Dai”和“ly”。有没有什么方法可以逐字逐句完成?

如果您需要更多信息,请告知我们,遗憾的是,此处无法附加pdf文件。

此致 Pradeep Jain

1 个答案:

答案 0 :(得分:0)

  

当我读到RenderInfo.GetText()时,我得到了不完整的单词,而不是“每日”我在下一循环中得到“Dai”和“ly”。

预期这种行为。

在渲染侦听器/文本提取策略中,您将获得文本绘制指令的各个原子字符串参数。 PDF创建软件不需要将整个单词放入这些字符串中。

实际上PDF格式甚至鼓励这种分裂!它本身不使用字体的字距调整信息;因此,任何想要使用字距调整创建文本输出的软件都必须在字距调整发挥作用的地方拆分字符串,并在文本绘图说明中轻松移动字符串部分之间的文本插入点。

因此,渲染侦听器必须收集字符串并将它们粘合在一起才能获得整个单词。

  

有没有什么方法可以逐字逐句完成?

是的,通过收集琴弦并将它们粘在一起。

你提到你根据位置策略阅读 - 然后仔细看看LocationTextExtractionStrategy本身的作用:在RenderText实现中,它收集带有一些坐标的文本片段,并且只有在收集了所有这些碎片之后,它才会对它们进行分类并将它们用GetResultantText方法粘合在一起。 (您可以找到代码here。)

不幸的是,该策略的许多成员在派生类中不能立即使用,因此您可能不得不求助于反射或只是复制整个类代码并在原位进行更改。