Skip to content

Commit f26b673

Browse files
committed
Addresses wrong label generation
We compute a wrong index for page labels enumerating the ASCII letter range, so that we always deliver label number +1 for a given page number. This fix subtracts 1 from the index for label styles "a"/"A".
1 parent 036f9a9 commit f26b673

File tree

2 files changed

+22
-2
lines changed

2 files changed

+22
-2
lines changed

src/utils.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4964,7 +4964,9 @@ def get_label_pno(pgNo, labels):
49644964
rule = rule_dict(item)
49654965
prefix = rule.get("prefix", "")
49664966
style = rule.get("style", "")
4967-
pagenumber = pgNo - rule["startpage"] + rule["firstpagenum"]
4967+
# make sure we start at 0 when enumerating the alphabet
4968+
delta = -1 if style in ("a", "A") else 0
4969+
pagenumber = pgNo - rule["startpage"] + rule["firstpagenum"] + delta
49684970
return construct_label(style, prefix, pagenumber)
49694971

49704972

tests/test_pagelabels.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
Define some page labels in a PDF.
33
Check success in various aspects.
44
"""
5+
56
import pymupdf
67

78

@@ -35,6 +36,23 @@ def test_setlabels():
3536
doc.set_page_labels(make_labels())
3637
page_labels = [p.get_label() for p in doc]
3738
answer = ["A-1", "A-2", "A-3", "A-4", "I", "II", "III", "IV", "V", "VI"]
38-
assert page_labels == answer, f'page_labels={page_labels}'
39+
assert page_labels == answer, f"page_labels={page_labels}"
3940
assert doc.get_page_numbers("V") == [8]
4041
assert doc.get_page_labels() == make_labels()
42+
43+
44+
def test_labels_styleA():
45+
"""Test correct indexing for styles "a", "A"."""
46+
doc = make_doc()
47+
labels = [
48+
{"startpage": 0, "prefix": "", "style": "a", "firstpagenum": 1},
49+
{"startpage": 5, "prefix": "", "style": "A", "firstpagenum": 1},
50+
]
51+
doc.set_page_labels(labels)
52+
pdfdata = doc.tobytes()
53+
doc.close()
54+
doc = pymupdf.open("pdf", pdfdata)
55+
answer = ["a", "b", "c", "d", "e", "A", "B", "C", "D", "E"]
56+
page_labels = [page.get_label() for page in doc]
57+
assert page_labels == answer
58+
assert doc.get_page_labels() == labels

0 commit comments

Comments
 (0)