1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
"""
Define some page labels in a PDF.
Check success in various aspects.
"""
import pymupdf
def make_doc():
"""Makes a PDF with 10 pages."""
doc = pymupdf.open()
for i in range(10):
page = doc.new_page()
return doc
def make_labels():
"""Return page label range rules.
- Rule 1: labels like "A-n", page 0 is first and has "A-1".
- Rule 2: labels as capital Roman numbers, page 4 is first and has "I".
"""
return [
{"startpage": 0, "prefix": "A-", "style": "D", "firstpagenum": 1},
{"startpage": 4, "prefix": "", "style": "R", "firstpagenum": 1},
]
def test_setlabels():
"""Check setting and inquiring page labels.
- Make a PDF with 10 pages
- Label pages
- Inquire labels of pages
- Get list of page numbers for a given label.
"""
doc = make_doc()
doc.set_page_labels(make_labels())
page_labels = [p.get_label() for p in doc]
answer = ["A-1", "A-2", "A-3", "A-4", "I", "II", "III", "IV", "V", "VI"]
assert page_labels == answer, f"page_labels={page_labels}"
assert doc.get_page_numbers("V") == [8]
assert doc.get_page_labels() == make_labels()
def test_labels_styleA():
"""Test correct indexing for styles "a", "A"."""
doc = make_doc()
labels = [
{"startpage": 0, "prefix": "", "style": "a", "firstpagenum": 1},
{"startpage": 5, "prefix": "", "style": "A", "firstpagenum": 1},
]
doc.set_page_labels(labels)
pdfdata = doc.tobytes()
doc.close()
doc = pymupdf.open("pdf", pdfdata)
answer = ["a", "b", "c", "d", "e", "A", "B", "C", "D", "E"]
page_labels = [page.get_label() for page in doc]
assert page_labels == answer
assert doc.get_page_labels() == labels
|