Skip to content

Commit b2c51ed

Browse files
Add proper bates numbers support to ALExhibitDocument
Passes along all of the bates parameters through all of the exhibit document classes (ALExhibitDocument, ALExhibitList, ALExhibit).
1 parent 011707a commit b2c51ed

File tree

1 file changed

+81
-7
lines changed

1 file changed

+81
-7
lines changed

docassemble/AssemblyLine/al_document.py

Lines changed: 81 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2768,9 +2768,14 @@ def as_pdf(
27682768
self,
27692769
*,
27702770
refresh: bool = False,
2771-
prefix: str = "",
27722771
pdfa: bool = False,
27732772
add_page_numbers: bool = True,
2773+
page_number_prefix: str = "",
2774+
page_number_digits: int = 5,
2775+
page_number_area=None,
2776+
page_number_font_size: float = 10,
2777+
page_number_offset_horizontal: float = 15,
2778+
page_number_offset_vertical: float = 15,
27742779
add_cover_page: bool = True,
27752780
filename: Optional[str] = None,
27762781
append_matching_suffix: bool = True,
@@ -2782,9 +2787,14 @@ def as_pdf(
27822787
27832788
Args:
27842789
refresh (bool): If True, forces the exhibit to refresh before generating the PDF. (unused, provided for signature compatibility)
2785-
prefix (str): Prefix for Bates numbering if 'add_page_numbers' is True.
27862790
pdfa (bool): If True, the generated PDF will be in PDF/A format.
27872791
add_page_numbers (bool): If True, apply Bates numbering starting from 'self.start_page'.
2792+
page_number_prefix (str): If add_page_numbers is True, this gets added to the beginning on the bates number each page (e.g. `EX-`).
2793+
page_number_digits (int): How many digits (i.e. leading 0s) that the bates number will have
2794+
page_number_area (str): Where on the page the bates number will go ("TOP_LEFT", "TOP_RIGHT", "BOTTOM_LEFT", "BOTTOM_RIGHT" (default))
2795+
page_number_font_size (float): How big the bates page number will be in points (default is 10).
2796+
page_number_offset_horizontal (float): The number of pixels that the bates page number is offset from the left / right of the page.
2797+
page_number_offset_vertical (float): The number of pixels that the bates page number is offset from the top / bottom of the page.
27882798
add_cover_page (bool): If True, prepend the exhibit with a cover page.
27892799
filename (Optional[str]): Custom filename for the generated PDF. Default is "exhibits.pdf".
27902800
append_matching_suffix (bool): If True, appends a suffix to the filename based on certain matching criteria.
@@ -2812,7 +2822,15 @@ def as_pdf(
28122822
)
28132823

28142824
if add_page_numbers:
2815-
concatenated_pages.bates_number(prefix=prefix, start=self.start_page)
2825+
concatenated_pages.bates_number(
2826+
start=self.start_page,
2827+
prefix=page_number_prefix,
2828+
digits=page_number_digits,
2829+
area=page_number_area,
2830+
font_size=page_number_font_size,
2831+
offset_horizontal=page_number_offset_horizontal,
2832+
offset_vertical=page_number_offset_vertical,
2833+
)
28162834

28172835
setattr(self._cache, safe_key, concatenated_pages)
28182836
return getattr(self._cache, safe_key)
@@ -2946,6 +2964,12 @@ def as_pdf(
29462964
filename="file.pdf",
29472965
pdfa: bool = False,
29482966
add_page_numbers: bool = False,
2967+
page_number_prefix: str = "",
2968+
page_number_digits: int = 5,
2969+
page_number_area=None,
2970+
page_number_font_size: float = 10,
2971+
page_number_offset_horizontal: float = 15,
2972+
page_number_offset_vertical: float = 15,
29492973
toc_pages: int = 0,
29502974
append_matching_suffix: bool = True,
29512975
) -> DAFile:
@@ -2956,6 +2980,12 @@ def as_pdf(
29562980
filename (str): Desired filename for the generated PDF.
29572981
pdfa (bool): If True, generates the PDF in PDF/A format.
29582982
add_page_numbers (bool): If True, adds page numbers to the generated PDF.
2983+
page_number_prefix (str): What the bates number added to each page should start with (e.g. `EX-`).
2984+
page_number_digits (int): How many digits (i.e. leading 0s) that the bates number will have
2985+
page_number_area (str): Where on the page the bates number will go ("TOP_LEFT", "TOP_RIGHT", "BOTTOM_LEFT", "BOTTOM_RIGHT" (default))
2986+
page_number_font_size (float): How big the bates page number will be in points (default is 10).
2987+
page_number_offset_horizontal (float): The number of pixels that the bates page number is offset from the left / right of the page.
2988+
page_number_offset_vertical (float): The number of pixels that the bates page number is offset from the top / bottom of the page.
29592989
toc_pages (int): Expected number of pages in the table of contents.
29602990
append_matching_suffix (bool): If True, appends matching suffix to the filename.
29612991
@@ -2967,12 +2997,19 @@ def as_pdf(
29672997
exhibit.cover_page
29682998
if self.include_table_of_contents and toc_pages != 1:
29692999
self._update_page_numbers(toc_guess_pages=toc_pages)
3000+
if not page_number_prefix and self.bates_prefix:
3001+
page_number_prefix = self.bates_prefix
29703002
return pdf_concatenate(
29713003
[
29723004
exhibit.as_pdf(
29733005
add_cover_page=self.include_exhibit_cover_pages,
29743006
add_page_numbers=add_page_numbers,
2975-
prefix=self.bates_prefix,
3007+
page_number_prefix=page_number_prefix,
3008+
page_number_digits=page_number_digits,
3009+
page_number_area=page_number_area,
3010+
page_number_font_size=page_number_font_size,
3011+
page_number_offset_horizontal=page_number_offset_horizontal,
3012+
page_number_offset_vertical=page_number_offset_vertical,
29763013
)
29773014
for exhibit in self
29783015
],
@@ -3105,12 +3142,19 @@ class ALExhibitDocument(ALDocument):
31053142
has_addendum: bool
31063143
auto_labeler: Callable
31073144
auto_ocr: bool
3145+
# Deprecated
31083146
bates_prefix: str
31093147
maximum_size: int
31103148
maximum_size_per_doc: int
31113149
suffix_to_append: str
31123150
exhibits: ALExhibitList
31133151
table_of_contents: DAFile
3152+
page_number_prefix: str
3153+
page_number_digits: int
3154+
page_number_area: str | None
3155+
page_number_font_size: float
3156+
page_number_offset_horizontal: float
3157+
page_number_offset_vertical: float
31143158

31153159
def init(self, *pargs, **kwargs) -> None:
31163160
"""Standard DAObject init method.
@@ -3125,8 +3169,6 @@ def init(self, *pargs, **kwargs) -> None:
31253169
self.exhibits.auto_labeler = self.auto_labeler
31263170
if hasattr(self, "auto_ocr"):
31273171
self.exhibits.auto_ocr = self.auto_ocr
3128-
if hasattr(self, "bates_prefix"):
3129-
self.exhibits.bates_prefix = self.bates_prefix
31303172
if hasattr(self, "include_exhibit_cover_pages"):
31313173
self.exhibits.include_exhibit_cover_pages = self.include_exhibit_cover_pages
31323174
else:
@@ -3144,13 +3186,30 @@ def init(self, *pargs, **kwargs) -> None:
31443186
else:
31453187
self.include_table_of_contents = True
31463188
self.exhibits.include_table_of_contents = True
3189+
if hasattr(self, "bates_prefix"):
3190+
self.exhibits.bates_prefix = self.bates_prefix
31473191
if not hasattr(self, "add_page_numbers"):
31483192
self.add_page_numbers = False
3193+
self._set_default_attributes()
31493194
self.has_addendum = False
31503195
if not hasattr(self, "suffix_to_append"):
31513196
# When the key is "preview", append it to the file name
31523197
self.suffix_to_append = "preview"
31533198

3199+
def _set_default_attributes(self) -> None:
3200+
if not hasattr(self, "page_number_prefix"):
3201+
self.page_number_prefix = ""
3202+
if not hasattr(self, "page_number_digits"):
3203+
self.page_number_digits = 5
3204+
if not hasattr(self, "page_number_area"):
3205+
self.page_number_area = None
3206+
if not hasattr(self, "page_number_font_size"):
3207+
self.page_number_font_size = 10
3208+
if not hasattr(self, "page_number_offset_horizontal"):
3209+
self.page_number_offset_horizontal = 15
3210+
if not hasattr(self, "page_number_offset_vertical"):
3211+
self.page_number_offset_vertical = 15
3212+
31543213
def has_overflow(self) -> bool:
31553214
"""
31563215
Check if there is any overflow in the document.
@@ -3225,19 +3284,34 @@ def as_pdf(
32253284
filename = base_name(self.filename) + ".pdf"
32263285

32273286
if len(self.exhibits):
3287+
self._set_default_attributes()
32283288
if self.include_table_of_contents:
32293289
toc_pages = self.table_of_contents.num_pages()
32303290
return pdf_concatenate(
32313291
self.table_of_contents,
32323292
self.exhibits.as_pdf(
3233-
add_page_numbers=self.add_page_numbers, toc_pages=toc_pages
3293+
add_page_numbers=self.add_page_numbers,
3294+
page_number_prefix=self.page_number_prefix,
3295+
page_number_digits=self.page_number_digits,
3296+
page_number_area=self.page_number_area,
3297+
page_number_font_size=self.page_number_font_size,
3298+
page_number_offset_horizontal=self.page_number_offset_horizontal,
3299+
page_number_offset_vertical=self.page_number_offset_vertical,
3300+
toc_pages=toc_pages,
3301+
pdfa=pdfa,
32343302
),
32353303
filename=filename,
32363304
pdfa=pdfa,
32373305
)
32383306
else:
32393307
return self.exhibits.as_pdf(
32403308
add_page_numbers=self.add_page_numbers,
3309+
page_number_prefix=self.page_number_prefix,
3310+
page_number_digits=self.page_number_digits,
3311+
page_number_area=self.page_number_area,
3312+
page_number_font_size=self.page_number_font_size,
3313+
page_number_offset_horizontal=self.page_number_offset_horizontal,
3314+
page_number_offset_vertical=self.page_number_offset_vertical,
32413315
filename=filename,
32423316
pdfa=pdfa,
32433317
)

0 commit comments

Comments
 (0)