PDF查明文本是否带下划线或表格单元格

Dre*_*ejc 42 java pdf pdfbox

我一直在玩PdfBox和PDFTextStripperByArea方法.

如果文本是粗体斜体,我能够提取信息,但我无法获得下划线信息.

据我所知,在PDF中,下划线是通过绘制线条完成的.所以从理论上讲,我应该能够获得有关文本周围某些行的某些信息.根据这些信息,我可以找出是否有下划线或表格.

到目前为止,这是我的代码:

List<TextPosition> textPos = charactersByArticle.get(index);

for (TextPosition t : textPos)
{               
    if (t.getFont().getFontDescriptor() != null)
    {                           
        if (t.getFont().getFontDescriptor().getFontWeight() > BOLD_WEIGHT ||
            t.getFont().getFontDescriptor().isForceBold())
        {
            isBold = true;
        }

        if (t.getFont().getFontDescriptor().isItalic())
        {
            isItalic = true;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图玩PDGraphicsState对象,该对象在PDFStreamEngine类的processEncodedText方法中处理,但没有在那里找到行的信息.

有关可以从中检索此信息的任何建议吗?

Dre*_*ejc 5

这是我到目前为止发现的:

PDFBox使用资源文件将PDF操作符/指令绑定到某些类,然后这些类处理信息.

如果我们看一下PDFTextStripper.properties资源文件:

PDFBOX的\ src \主\资源\组织\阿帕奇\ PDFBOX \资源\

我们可以看到,例如BT运算符绑定到 org.apache.pdfbox.util.operator.BeginText类,依此类推.

PDFTextStripper

PDFBOX的\ src \主\ java的\组织\阿帕奇\ PDFBOX\UTIL\

将此考虑在内并利用此类的PDF处理.

但是所有图形对象都被忽略,因此没有下划线或表格结构的信息!

现在,如果我们看一下PageDrawer.properties资源文件,我们可以看到这个几乎所有可用的运算符.这是由PageDrawer类使用的

PDFBOX的\ src \主\ java的\组织\阿帕奇\ PDFBOX\PDF查看器\

现在,"技巧"是找出哪些图形运算符代表下划线和表格,并将它们与PDFTextStripper结合使用.

现在这意味着要阅读PDF文件规范,这是目前的工作方式.

如果有人知道哪些操作员负责绘制下划线和表格行的操作,请告诉我.


pri*_*ium -3

根据api getfont()返回 字体大小。

您可以使用getStyle()方法,它将返回STYLE_UNDERLINE带下划线的字体。这样你就可以检索下划线样式。