使用iText或PDFBox从PDF中读取TOC(而不是书签)

时间:2015-04-24 18:43:59

标签: pdf itext pdfbox tableofcontents

我需要从输入的PDF文件中提取目录(TOC)。到目前为止我看到的所有代码都是指Bookmark。 TOC和书签是相同的东西。 有没有办法使用iText或PDFBox从pdf中提取TOC。我愿意使用任何其他可用的工具。

由于

1 个答案:

答案 0 :(得分:0)

您引用的PDF的目录只不过是页面上的普通文本。因此,您唯一的选择是在包含TOC的页面上提取文本,例如使用ExtractPageContentSorted2示例中显示的代码:

public void parsePdf(String pdf, String txt) throws IOException {
    PdfReader reader = new PdfReader(pdf);
    PrintWriter out = new PrintWriter(new FileOutputStream(txt));
    for (int i = 1; i <= reader.getNumberOfPages(); i++) {
        out.println(PdfTextExtractor.getTextFromPage(reader, i));
    }
    out.flush();
    out.close();
    reader.close();
}

此示例提取PDF中所有页面的文本,并将其写入路径为txt的文件中。如果您希望此代码仅提取包含目录的页面,则必须更改for循环中的页码,例如:

for (int i = startTOC; i <= endTOC; i++)

其中startTOC是TOC开始的页码,endTOC是TOC结束的页码。 需要提供这些数字,因为PDF文档本身并不知道这些页面上的内容实际上是一个目录。 PDF只知道页面包含文本和渲染路径,也可能包含一些图像。这是PDF固有的。