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