getPageLabels 和 getPageLabelFormats 有什么区别?

What is the difference between getPageLabels and getPageLabelFormats?

我有一个程序调用 PdfPageLabels.getPageLabels()PdfPageLabels.getPageLabelFormats() 在同一个 PdfReader 对象上 我的代码的连续行:

PdfPageLabels.PdfPageLabelFormat[] pplf =  PdfPageLabels.getPageLabelFormats(reader);
String[] labs = PdfPageLabels.getPageLabels(reader);

我原以为这两个调用总是对相同长度的 return 数组,它们应该是相同的标签。大多数情况下都是如此,但偶尔情况并非如此。

我有一个例子。这是一个 150Mb 的 PDF 文件,通过 getPageLabels() 似乎有 4670 个标签,但通过 getPageLabelFormats().

只有 1 个

所以我的问题是:在什么情况下两个调用return不同长度的数组?

两种方法的区别很简单:

  • getPageLabels() returns 数组中每个页面的标签。如果您的 PDF 有 4670 页,您将得到一个包含 4670 String 个值的数组。
  • getPageLabelFormat() returns 一个数组,其中包含文档中使用的格式。它不是 return String 个值,而是 PdfPageLabelFormat 个实例。在许多情况下,整个文档只使用一种页面标签格式。

例如:

您有一份包含五页简介的文档,编号为 iiiiiiivv。那么你有一百页,数字 1 到 100。

在这种情况下,getPageLabels() 应该 return 一个包含 105 String 个值的数组。然而,getPageLabelFormat() 方法只会 return 两个 PageLabelFormat 值,因为我们只使用两种页面标签格式:

  • 有人说第一个物理页面以 i.
  • 开头的小写罗马数字开头
  • 有人说第六页是阿拉伯数字,从1开始。

只需要起始格式,物理页2到4与物理页1格式相同;第 7 至 105 页的物理页与第 6 页的格式相同。