使用PDF Box进行上下标区分

4

我是pdfbox的新手。在使用pdfbox库提取文本后,是否有办法区分上标和下标文本与普通文本?谢谢。

2个回答

2

虽然链接页面可能会回答这个问题(@Tilman的评论似乎表明了这一点),但是在Stack Overflow上,我们期望答案更加自包含。因此,请将该链接中的关键代码添加到您的答案中。 - mkl

1
能够通过查找Y和Height变化来识别大多数上标。请尝试以下方法:
编写自己的PDFTextStripper实现。
将以下内容添加到writePage()中,以将上标转换为单独的单词:
if((position.getY() < lastPosition.getTextPosition().getY()
    && position.getHeight() < lastPosition.getTextPosition().getHeight())
    || (position.getY() > lastPosition.getTextPosition().getY()
    && position.getHeight() > lastPosition.getTextPosition().getHeight()))
                    line.add(WordSeparator.getSeparator());

然后将以下内容添加到writeLine()中,在上标之前或之后添加标签:

        if(word.textPositions.size()>0)
        {
        TextPosition firstChar = word.textPositions.get(0);

        if(i==0)
        {
            prevY = firstChar.getY();
            prevHeight = firstChar.getHeight();
        }

        if(prevY!=0)
        {
        if((firstChar.getY() < prevY && firstChar.getHeight() < prevHeight))
        {
    output.write("<sup>");
    writeString(word.getText(), word.getTextPositions());

        }
        else if((firstChar.getY() > prevY && firstChar.getHeight() > prevHeight))
        {
             output.write("</sup>");
             writeString(word.getText(), word.getTextPositions());

        }
        else
            writeString(word.getText(), word.getTextPositions());
        }

我已经修复并扩展了代码。原始版本如果上标位于行首则不会放置<sup>,如果是最后一个条目,则不会放置</ sup>。该实现首先扫描单词列表并在单词列表中插入标签,然后再打印出单词。 - Aleksander Pohl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接