从结构化 PDF 文件中提取结构化内容
结构化和非结构化 PDF 文件
可以创建结构化 PDF 文件(包含页面结构信息)或非结构化 PDF 文件(不包含任何结构信息,内容可以是任意顺序)。这种情况发生在 PDF 文件创建时,并且无法将非结构化 PDF 文件转换为结构化 PDF 文件。
PDF 文件可以包含元数据标签,以保持 PDF 中文本内容的结构(这是创建 PDF 文件时的一个选项)。如果存在结构化信息,JPedal 提供了多种方法来提取 PDF 文件中的文本内容。在这种情况下,我们可以提取 PDF 中存在的任何结构化文本。如果没有结构化信息,输出文件将包含简短的信息,解释没有可用的内容。
结构化 PDF 文件的一个优点是可以提取内容并将其转换为其他格式。JPedal 当前支持将这些内容输出为 XML 或 HTML 格式。
PDF 文件 可能 还会在结构化内容中包含图像,这些图像被称为图形(figures)。如果图形包含替代文本(alt text)或实际文本(actual text),这些信息也会出现在输出中。
从 PDF 中提取结构化文本(通过命令行或其他语言)
将内容提取为 XML
java --module-path . --add-modules com.idrsolutions.jpedal org/jpedal/examples/text/ExtractStructuredText
"inputFileOrFolder" "outputFolder" "xml"
将内容提取为 HTML
java --module-path . --add-modules com.idrsolutions.jpedal org/jpedal/examples/text/ExtractStructuredText
"inputFileOrFolder" "outputFolder" "html"
提取内容,包括图形
java --module-path . --add-modules com.idrsolutions.jpedal org/jpedal/examples/text/ExtractStructuredText
"inputFileOrFolder" "outputFolder" "xml" "figuresFolder" "jpeg"
我们推荐使用模块,但如果您愿意,仍然可以使用类路径。
访问 API 方法的示例
ExtractStructuredTextProperties properties = new ExtractStructuredTextProperties();
properties.setFileOutputMode(OutputModes.XML);
//properties.setFileOutputMode(OutputModes.HTML);
ExtractStructuredText extract = new ExtractStructuredText("inputFile.pdf", properties);
//extract.setPassword("password");
if (extract.openPDFFile()) {
// 一个包含所有结构化内容的文档。
Document anyStructuredText = extract.getStructuredTextContent();
// 一个文档数组,包含每个页面的结构化内容。
Document[] anyStructuredTextPerPage = extract.getStructuredTextContentPerPage();
// 这些方法还会输出图形(图像)。
Document anymoreStructuredText = extract.getStructuredTextContentAndFigures("figuresFolder", "imageFormat");
Document[] anymoreStructuredTextPerPage = extract.getStructuredTextContentAndFiguresPerPage("figuresFolder", "imageFormat");
}
extract.closePDFfile();
在 Java 中从标记化 PDF 中提取结构化文本
// 默认情况下,提取结构化文本为 XML 格式。
ExtractStructuredText.writeAllStructuredTextOutlinesToDir("inputFileOrFolder", "outputFolder");
// 提取结构化文本,并可以更细致地控制选项。
final String password = null; // 当不需要密码时使用 null。
final ErrorTracker tracker = null; // 可以使用 ErrorTracker 实现来监控提取过程。
ExtractStructuredTextProperties properties = new ExtractStructuredTextProperties();
properties.setFileOutputMode(OutputModes.XML);
//properties.setFileOutputMode(OutputModes.HTML);
ExtractStructuredText.
writeAllStructuredTextOutlinesToDir("inputFileOrFolder", password, "outputFolder", tracker, properties);
ExtractStructuredText.
writeAllStructuredTextOutlinesAndFiguresToDir("inputFileOrFolder", password, "outputFolder", tracker, properties, "figuresFolder", "imageFormat");
此示例使用了 JPedal 的 ExtractStructuredText 类。ExtractStructuredText
会输出一个 XML 文件,详细描述文件中包含的结构化内容。
使用的坐标
所有提取方法都会在给定的矩形区域内提取 PDF 文本,该矩形的坐标格式要求为:x1, y1(左上角)和 x2, y2(右下角)。页面的原点位于左下角(与 Java 的坐标系统相反)。