Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用pdf框区分上标和下标_Java_Pdfbox - Fatal编程技术网

Java 使用pdf框区分上标和下标

Java 使用pdf框区分上标和下标,java,pdfbox,Java,Pdfbox,我是pdfbox新手。使用pdfbox库从pdf中提取文本时或提取文本后,是否有任何方法可以将上标和下标文本与普通文本区分开来,谢谢。如果有帮助,请检查此链接 通过查找Y和高度变化,能够识别大多数上标。试试这个: 编写您自己的PDFTextStripper实现 将此项添加到writePage()以将上标转换为单独的单词: if((position.getY() < lastPosition.getTextPosition().getY() && position.g

我是pdfbox新手。使用pdfbox库从pdf中提取文本时或提取文本后,是否有任何方法可以将上标和下标文本与普通文本区分开来,谢谢。

如果有帮助,请检查此链接


通过查找Y和高度变化,能够识别大多数上标。试试这个:

编写您自己的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());
if((position.getY()lastPosition.getTextPosition().getY())
&&position.getHeight()>lastPosition.getTextPosition().getHeight())
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());
        }
if(word.textPositions.size()>0)
{
textpositionfirstchar=word.textPositions.get(0);
如果(i==0)
{
prevY=firstChar.getY();
prevHeight=firstChar.getHeight();
}
如果(上一个!=0)
{
if((firstChar.getY()prevY&&firstChar.getHeight()>prevHeight))
{
输出。写入(“”);
writeString(word.getText(),word.getTextPositions());
}
其他的
writeString(word.getText(),word.getTextPositions());
}

而链接页面可能会给出问题的答案(而且@Tilman的评论似乎表明了这一点),有关堆栈溢出的答案预计将更加独立。因此,请将该链接中的关键代码添加到您的答案中,我已修复并扩展了该代码。如果上标位于行的开头,则原始版本不会放置,如果上标是行中的最后一个条目,则也不会放置。实现优先于sca在单词列表中插入标签,然后打印出单词。