在PDF有不同的变化,页码,一些PDF文件具有初始页面像我罗马数字,二,后来的页码是1,2,...。 我发现了一个函数在pdfbox
以获得所需的页面page.get(pagenumber)
。 但有了这个功能的问题是,当我写get(1)
它返回的文件(这可能与页码2编号为II,而不是页面)的第一页。 有没有什么办法来获得它的页码在PDF的是说2,而不是整个第二页的页面?
Answer 1:
12.4.2节标签页在PDF规范ISO 32000-1:2008年介绍了如何在页面标签(您想了解特殊页码)文档中定义:
PDF文档中的每个页面应由表达文档中的页面的相对位置的整数页面索引来标识。 此外,文档可以可选地限定页面标签(PDF 1.3)在视觉上识别在屏幕上或在打印每一页。 页面标签和页面索引不必一致:指数应固定,通过从0开始的第一页文件连续运行,但标签可能以任何方式适合于特定的文件中指定。
对于页面标记目的的,文件应分为贴标范围,每一个都是一个系列使用相同的编号系统连续页。 的范围内的页面应当依次按升序编号。 一个页面的标签由根据它的其标签范围内的位置,任选地通过一个标签前缀表示本身的范围内之前一个数字部分的。
文档的标记范围应由在文档目录的PageLabels条目被定义(参见7.7.2,“文档目录”)。 这个条目的值应是数字树(7.9.7,“数的树”),其每个的密钥是第一页的中的标记范围的页索引。 相应的值应该是一个标签页字典定义在该范围内的页面标签的特性。 树应包括页索引值0表159示出了页面标签词典的内容。
欲了解更多信息和实例参考 该规范本身。
使用低级PDFBox的方法,它应该很容易提取的文件目录的PageLabels入口和检索标签细节
Answer 2:
虽然标题提到PDFBox的,你还添加标签iText的,所以让我来告诉你如何提取利用iText PageLabels:
PdfReader reader = new PdfReader(src);
String[] labels = PdfPageLabels.getPageLabels(reader);
现在你有一个String
数组,其中你可以有:
labels[0] = "i";
labels[1] = "ii";
labels[2] = "iii";
labels[3] = "iv";
labels[4] = "1";
labels[5] = "2";
labels[6] = "3";
and so on...
现在你可以在把这些值HashMap
加上index + 1
,如果你想知道哪些物理页面与页面标签对应的页面数"2"
。
文章来源: How to read the current page number of the pdf document using pdfbox