如何解读PDFBox(API及调试工具)呈现的PDF页码标签数据?
解读PDFBox中页码标签的方法
PDF的页码标签(Page Labels)是通过文档目录下的PageLabels字典定义的,PDFBox调试工具展示的是PDF底层的原始字典结构,而iText RUPS是做了友好解析后的直观展示。以下是具体的解读方式:
一、理解PDFDebugger中的原始数据
PDFDebugger里显示的PageLabels字典核心是Nums数组,数组内成对出现元素:[起始页面索引, 标签规则字典],标签规则字典的常用键含义如下:
/S:编号样式,可选值包括:/D:十进制数字(如1,2,3...)/R:大写罗马数字(如I,II,III...)/r:小写罗马数字(如i,ii,iii...)/A:大写字母(如A,B,C...)/a:小写字母(如a,b,c...)/None:无编号,仅显示前缀文本
/P:标签前缀字符串,会直接显示或添加在编号前/St:起始编号,默认值为1
以你遇到的例子来说,第二个页面对应的标签字典应该是<< /P (Cover) /S /None >>,对应iText RUPS展示的“Cover”——因为/S /None表示不使用编号,直接显示/P定义的前缀文本。
二、用PDFBox API直接获取格式化后的标签
不用手动解析原始字典,PDFBox提供了PDPageLabels类来直接处理页码标签:
- 加载文档并获取页码标签对象:
PDDocument doc = PDDocument.load(new File("你的PDF文件路径")); PDDocumentCatalog catalog = doc.getDocumentCatalog(); PDPageLabels pageLabels = catalog.getPageLabels();
- 遍历获取每个页面的标签文本:
for (int pageIndex = 0; pageIndex < doc.getNumberOfPages(); pageIndex++) { String labelText = pageLabels.getPageLabel(pageIndex); System.out.printf("页面索引%d的标签:%s%n", pageIndex, labelText); }
这段代码会直接输出和iText RUPS一致的直观标签文本,比如第二个页面会输出Cover。
内容的提问来源于stack exchange,提问作者menteith
相关产品推荐
相关产品推荐

