PDF-文本块可以包含2个或多个单词吗?

时间:2018-07-16 18:46:54

标签: pdf itext chunks

我使用LocationTextExtractionStrategy从PDF呈现文本。 文本在称为RenderText的函数中呈现。 所以我的问题是:一个块可以包含两个以上的单词吗? 例如,我们有文本: “ MKL是一个乐于助人的人” 是否可以像这样编写块(最重要的块为粗体): MK

L

是h

elpfull

每个儿子

以下是我用于单词分离的代码。 我在将文本(来自renderText函数的块)添加到当前行期间进行了单词分离。

 public class TextLineLocation
{
    public float X { get; set; }
    public float Y { get; set; }
    public float Height { get; set; }
    public float Width { get; set; }
    private string Text;
    private List<char> bannedSings = new List<char>() {' ',',', '.', '/', '|', Convert.ToChar(@"\"), ';', '(', ')', '*', '&', '^', '!','?' };
    public void AddText(TextInfo text)
    {
        Text += text;
        foreach (char sign in bannedSings)
        {
            //creating new word
            if (text.textChunk.Text.Contains(sign))
            {
                string[] splittedText = text.textChunk.Text.Split(sign);
                foreach (string val in splittedText)
                {
                    //if its first element, add it to current word
                    if (splittedText[0] == val)
                    {
                        // if its space, just ignore...
                        if (splittedText[0] == " ")
                        {
                            continue;
                        }
                        wordList[wordList.Count - 1].Text += val;
                        wordList[wordList.Count - 1].Width += text.getFontWidth();
                        wordList[wordList.Count - 1].Height += text.getFontHeight();
                    }
                    else
                    {
                        //if it isnt a first element, create another word
                        wordList.Add(new WordLocation(text.textChunk.StartLocation[1], text.textChunk.StartLocation[0], text.getFontWidth(), text.getFontHeight(), val));
                        //TODO: what if chunk has more than 2 words separated ?
                    }
                }
            }
        }
        else
        {
            //update last word
            wordList[wordList.Count-1].Text += text.textChunk.Text;
            wordList[wordList.Count - 1].Width += text.getFontWidth();
            wordList[wordList.Count - 1].Height += text.getFontHeight();
        }
    }
    public List<WordLocation> wordList = new List<WordLocation>();


}

1 个答案:

答案 0 :(得分:0)

不确定LocationTextExtractionStrategy来自哪个库,或者它到底是做什么的,但是在PDF表示本身中,您可以将字符分组为“块”。

如何完全使用它取决于生成PDF的程序:某些程序将单词组合在一起,某些程序仅将单词片段分组(例如,字距调整),某些程序执行其他随机操作。

因此,如果 LocationTextExtractionStrategy将它们作为块返回,则您不能依赖任何东西。 如果 LocationTextExtractionStrategy不返回这些字符,而是依靠空格启发式将字符分组为大块,那么这将与启发式一样好。

底线:PDF不包含文本,而是包含字形及其在页面上的位置。尝试从中重建文本仍然是猜测。您可能会在大多数情况下使它工作,但总会有PDF导致您的操作失败。