Class ReportPages

java.lang.Object
io.leandev.appfuse.report.ReportPages

public final class ReportPages extends Object

選取的 PDF physical pages(REP-08)

wire 語法(pages query 值):

pages = part *( "," part )
part  = page / page "-" page
page  = 1*9DIGIT            ; 1 起算,不接受 0 與前導零

不接受空白、空的 part 與反向範圍;可重疊、可亂序,解析後正規化為遞增、不重疊、不相鄰的區間 (5,1-3,2 → 1-3,5)。字串上限 MAX_LENGTH 字元。

只以區間表示:1-999999999 不會展開成頁碼。逐頁走訪只能在 requireWithin(int) 確認頁數之後進行, 走訪次數因此不超過原始 PDF 的頁數。

var pages = ReportPages.parse(query).requireWithin(document.getNumberOfPages());
pages.forEachPage(page -> ...);
Since:
4.0.0
  • Field Details

    • MAX_LENGTH

      public static final int MAX_LENGTH
      選頁字串的長度上限
      See Also:
    • MAX_PAGE

      public static final int MAX_PAGE
      頁碼上限(wire 語法的 9 位數);所有建構入口一致
      See Also:
  • Method Details

    • parse

      public static ReportPages parse(String spec)
      解析 wire 語法
      Parameters:
      spec - query 值
      Returns:
      正規化的選頁
      Throws:
      ReportPageSelectionException - 空字串、語法錯誤、反向範圍或超過 MAX_LENGTH 字元
    • of

      public static ReportPages of(int... pages)
      由頁碼建立(1 起算);正規化同 parse(String)
      Parameters:
      pages - 頁碼
      Returns:
      正規化的選頁
      Throws:
      ReportPageSelectionException - 沒有頁碼,或有小於 1 或大於 MAX_PAGE 的頁碼
    • requireWithin

      public ReportPages requireWithin(int pageCount)
      確認所有頁碼不大於 pageCount
      Parameters:
      pageCount - 原始 PDF 的頁數
      Returns:
      記住已確認頁數、可逐頁走訪的選頁
      Throws:
      ReportPageSelectionException - 有頁碼大於 pageCount
    • ranges

      public List<ReportPages.PageRange> ranges()
      Returns:
      正規化的區間(遞增、不重疊、不相鄰)
    • forEachPage

      public void forEachPage(IntConsumer action)
      逐頁走訪(遞增)
      Parameters:
      action - 以頁碼(1 起算)呼叫
      Throws:
      IllegalStateException - 未先以 requireWithin(int) 確認頁數
    • size

      public long size()
      Returns:
      選取的頁數(區間長度總和)
    • toString

      public String toString()
      Overrides:
      toString in class Object
      Returns:
      正規化的 wire 語法(例如 1-3,5)
    • equals

      public boolean equals(Object other)
      以正規化的區間比較;不含已確認的頁數
      Overrides:
      equals in class Object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object