当前位置: 首页 > 知识库问答 >
问题:

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

乐正心水
2023-03-14

我一直在玩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;
        }
    }
}

我试着绕过PDFStreamEngine类中的processEncodedText方法处理的PDGraphicsState对象,但在那里找不到行的信息。

有什么建议可以从何处检索此信息?

共有3个答案

元俊雅
2023-03-14

您可以使用Itext生成pdf报告。

通过使用itext,您可以轻松地放置这些行。

试试下面的方法。

文件添加(新行分隔符(0.5f,50,null,0,198));

上述代码用于在pdf报告中生成行。并根据您的选择设置尺寸。

希望这对你有帮助。

萧安怡
2023-03-14

正如您所提到的--PDFBox使用资源文件,将PDF操作符/说明绑定到将处理信息的访问者。

您可能最好先将PDFBox的现有访问者复制到您自己的源文件夹中,然后从那里添加/扩展实现。

我很久以前的PostScript经历让我想起了“moveto”和“lineto”操作符。由于PDF基本上是基于PS的,所以您将寻找类似的内容。

http://learnpostscript.wordpress.com/category/lineto/

PDF格式是一种HTML格式,做错了。它表示图形化实现,而不是语义。即使重建句子也很困难——单词甚至单个字符被定位,“空格”或“换行符”必须通过算法重建。简而言之,土坯是一个漏洞。读者是一头不符合人体工程学、虫子缠身、不安全、臃肿的猪。

但是,您可以完成您的要求——如果您愿意投入12小时的工作。除了按位置检测外,下划线通常会在文本之后立即在PDF中发出...因此您可以通过PDF文档顺序锁定您的检测,而不仅仅是页面位置。

另外,试着用带下划线的文本构建一个简单的两行PDF。然后看看你能做些什么,把它解析回来!下划线应该像狗的香蕉一样突出,一旦你能检测到,你就可以上路了。

PDFBox的可扩展性不是很好,它主要只是一大堆算法。出于这个原因,只需从那里复制PDFTextStripper源代码(并且可能有PageDrawer供参考)和原型。

希望这有帮助!

陆和泰
2023-03-14

以下是我目前发现的情况:

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

如果我们看看PDFTextStripper。属性资源文件位于:

pdfbox\src\main\resources\org\apache\pdfbox\resources\

例如,我们可以看到BT运营商绑定到组织。阿帕奇。pdfbox。util。操作人员BeginText类等。

下的PDFTextStripper

pdfbox\src\main\java\org\apache\pdfbox\util\

考虑到这一点,并利用此类对PDF的处理。

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

现在,如果我们看看PageDrawer。属性资源文件我们可以看到,这一个绑定到几乎所有可用的操作符。PageDrawer类在

pdfbox\src\main\java\org\apache\pdfbox\pdfviewer\

现在的“诀窍”是找出哪些图形操作符表示下划线和表,并将它们与PDFTextStripper结合使用。

现在这意味着阅读PDF文件规范,这是目前的大量工作。

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

 类似资料:
  • 我已经能够在VB中使用iTextSharp创建PDF。net代码,看起来几乎完全符合我的要求。然而,我使用一个包含一列和多行的表来显示通过使用块和短语组合在一起的长文本字符串。有些区块包含带下划线的文本。当一个短语中有带下划线的文本时,整个单元格需要以灰色突出显示,我使用PdfPCell的BackgroundColor属性来实现这一点。 我遇到的问题是,下划线落在单元格边界之外(突出显示之外)。我

  • 每个人我试图通过itext从PDF文件中获取一些带下划线的文本,这对我来说似乎非常困难。我已经搜索了很长时间的解决方案,并学习了如何获取文本的字体系列、字体大小和文本位置。但是,没有下划线。期待您的帮助!非常感谢。

  • 使用iTextSharp,我如何确定解析的文本块是否同时加粗和下划线? 详细信息: 我正在尝试用C#解析。pdf文件,特别是针对既加粗又加下划线的文本。使用ITextSharp,我可以从LocationTextExtractionStrategy派生,并从传递给overridden.RenderText方法的ITextSharp.text.pdf.parser.TextRenderInfo对象获取

  • 问题内容: 我想通过文本在Excel工作表中找到一个单元格。文字是这样的: 我的目标是使用户能够提供一种用于写入数据的模板。用户可以在Excel文件中配置颜色和字体以及数据位置。该单元格是数据表的左上角。 附加问题:是否有更优雅的方法来完成这项工作? 编辑 我正在遍历行和单元格以找到它。恐怕它并不是真的有效,但是到目前为止它仍然有效: 问题答案: 您可以遍历工作表的单元格并调查内容。我认为没有更简

  • 我正在用Selenium IDE测试一个包含表的网页。我想通过CSS选择器验证表格单元格(行,列)中的文本。表的HTML结构非常简单。下面是一个表的示例,其中每一行表示一个人的不同属性: 在Selenium IDE中,我能够使用以下CSS选择器在包含AGE的表行中找到“49”: 当我将这些方法导出为JUnit代码时,问题就来了。以下JUnit代码块工作: (使用方法1) WebDriver.Fin

  • 问题内容: 使用Python,我需要在给定的Excel工作表单元格中找到所有粗体或斜体的子字符串。 ..但该解决方案不适用于我,因为我无法假定单元格中 所有 内容的格式 都 相同。单个单元格中的值如下所示: 1.一些粗体文本 一些常规文本。 一些斜体文字 。 有没有一种方法可以使用xlrd(或任何其他Python Excel模块)在单元格中查找字符范围的格式? 问题答案: 感谢@Vyassa提供所