gpt4 book ai didi

java - 如何使用pdfbox从pdf中提取粗体文本?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:03:58 27 4
gpt4 key购买 nike

我正在使用 Apache pdfbox 提取文本。我可以从 pdf 中提取文本,但我不知道如何知道这个词是否是粗体??? (代码建议会很好!!!)这是从 pdf 中提取纯文本的代码,运行良好。

PDDocument document = PDDocument
.load("/home/lipu/workspace/MRCPTester/test.pdf");
document.getClass();
if (document.isEncrypted()) {
try {
document.decrypt("");
} catch (InvalidPasswordException e) {
System.err.println("Error: Document is encrypted with a password.");
System.exit(1);
}
}

// PDFTextStripperByArea stripper = new PDFTextStripperByArea();
// stripper.setSortByPosition(true);
PDFTextStripper stripper = new PDFTextStripper();
stripper.setStartPage(1);
stripper.setEndPage(2);
stripper.setSortByPosition(true);
String st = stripper.getText(document);

最佳答案

PDFTextStripper 的结果是纯文本。因此,在提取它之后,为时已晚。但是您可以覆盖它的某些方法,只允许根据您的意愿格式化的文本。

如果是 PDFTextStripper,您必须覆盖

protected void processTextPosition( TextPosition text )

在您的重写中,您检查相关文本是否满足您的要求(TextPosition 包含有关相关文本的大量信息,而不仅仅是文本本身),如果满足,转发 TextPosition 文本super 实现。

不过,主要问题是识别哪些文本是粗体

粗体的标准可以是字体名称中的单词 bold,例如Courier-BoldOblique - 您使用 text.getFont() 访问文本的字体,使用字体的 访问字体的 postscript 名称>getBaseFont() 方法

String postscriptName = text.getFont().getBaseFont();

Criteria 也可以来自于字体描述符 - 你可以使用 getFontDescriptor 方法获取字体的字体描述符,并且字体描述符有一个可选的字体粗细值

float fontWeight = text.getFont().getFontDescriptor().getFontWeight();

值定义为

(Optional; PDF 1.5; should be used for Type 3 fonts in Tagged PDF documents) The weight (thickness) component of the fully-qualified font name or font specifier. The possible values shall be 100, 200, 300, 400, 500, 600, 700, 800, or 900, where each number indicates a weight that is at least as dark as its predecessor. A value of 400 shall indicate a normal weight; 700 shall indicate bold.

The specific interpretation of these values varies from font to font.

EXAMPLE 300 in one font may appear most similar to 500 in another.

(Table 122, Section 9.8.1, ISO 32000-1)

可能会有额外的提示要检查大胆-ism,例如大线宽

double lineWidth = getGraphicsState().getLineWidth();

当渲染模式也绘制轮廓时:

int renderingMode = getGraphicsState().getTextState().getRenderingMode();

您可能需要根据手头的文件尝试满足哪些条件。

关于java - 如何使用pdfbox从pdf中提取粗体文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19770987/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com