Class ReportPages
java.lang.Object
io.leandev.appfuse.report.ReportPages
選取的 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
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final record連續頁的區間(1 <= from <= to <= MAX_PAGE) -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final int選頁字串的長度上限static final int頁碼上限(wire 語法的 9 位數);所有建構入口一致 -
Method Summary
Modifier and TypeMethodDescriptionboolean以正規化的區間比較;不含已確認的頁數voidforEachPage(IntConsumer action) 逐頁走訪(遞增)inthashCode()static ReportPagesof(int... pages) 由頁碼建立(1 起算);正規化同parse(String)static ReportPages解析 wire 語法ranges()requireWithin(int pageCount) 確認所有頁碼不大於pageCountlongsize()toString()
-
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
解析 wire 語法- Parameters:
spec- query 值- Returns:
- 正規化的選頁
- Throws:
ReportPageSelectionException- 空字串、語法錯誤、反向範圍或超過MAX_LENGTH字元
-
of
由頁碼建立(1 起算);正規化同parse(String)- Parameters:
pages- 頁碼- Returns:
- 正規化的選頁
- Throws:
ReportPageSelectionException- 沒有頁碼,或有小於 1 或大於MAX_PAGE的頁碼
-
requireWithin
確認所有頁碼不大於pageCount- Parameters:
pageCount- 原始 PDF 的頁數- Returns:
- 記住已確認頁數、可逐頁走訪的選頁
- Throws:
ReportPageSelectionException- 有頁碼大於pageCount
-
ranges
- Returns:
- 正規化的區間(遞增、不重疊、不相鄰)
-
forEachPage
逐頁走訪(遞增)- Parameters:
action- 以頁碼(1 起算)呼叫- Throws:
IllegalStateException- 未先以requireWithin(int)確認頁數
-
size
public long size()- Returns:
- 選取的頁數(區間長度總和)
-
toString
-
equals
-
hashCode
-