@@ -2770,9 +2770,14 @@ def as_pdf(
27702770 self ,
27712771 * ,
27722772 refresh : bool = False ,
2773- prefix : str = "" ,
27742773 pdfa : bool = False ,
27752774 add_page_numbers : bool = True ,
2775+ page_number_prefix : str = "" ,
2776+ page_number_digits : int = 5 ,
2777+ page_number_area = None ,
2778+ page_number_font_size : float = 10 ,
2779+ page_number_offset_horizontal : float = 15 ,
2780+ page_number_offset_vertical : float = 15 ,
27762781 add_cover_page : bool = True ,
27772782 filename : Optional [str ] = None ,
27782783 append_matching_suffix : bool = True ,
@@ -2784,9 +2789,14 @@ def as_pdf(
27842789
27852790 Args:
27862791 refresh (bool): If True, forces the exhibit to refresh before generating the PDF. (unused, provided for signature compatibility)
2787- prefix (str): Prefix for Bates numbering if 'add_page_numbers' is True.
27882792 pdfa (bool): If True, the generated PDF will be in PDF/A format.
27892793 add_page_numbers (bool): If True, apply Bates numbering starting from 'self.start_page'.
2794+ 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-`).
2795+ page_number_digits (int): How many digits (i.e. leading 0s) that the bates number will have
2796+ page_number_area (str): Where on the page the bates number will go ("TOP_LEFT", "TOP_RIGHT", "BOTTOM_LEFT", "BOTTOM_RIGHT" (default))
2797+ page_number_font_size (float): How big the bates page number will be in points (default is 10).
2798+ page_number_offset_horizontal (float): The number of pixels that the bates page number is offset from the left / right of the page.
2799+ page_number_offset_vertical (float): The number of pixels that the bates page number is offset from the top / bottom of the page.
27902800 add_cover_page (bool): If True, prepend the exhibit with a cover page.
27912801 filename (Optional[str]): Custom filename for the generated PDF. Default is "exhibits.pdf".
27922802 append_matching_suffix (bool): If True, appends a suffix to the filename based on certain matching criteria.
@@ -2814,7 +2824,15 @@ def as_pdf(
28142824 )
28152825
28162826 if add_page_numbers :
2817- concatenated_pages .bates_number (prefix = prefix , start = self .start_page )
2827+ concatenated_pages .bates_number (
2828+ start = self .start_page ,
2829+ prefix = page_number_prefix ,
2830+ digits = page_number_digits ,
2831+ area = page_number_area ,
2832+ font_size = page_number_font_size ,
2833+ offset_horizontal = page_number_offset_horizontal ,
2834+ offset_vertical = page_number_offset_vertical ,
2835+ )
28182836
28192837 setattr (self ._cache , safe_key , concatenated_pages )
28202838 return getattr (self ._cache , safe_key )
@@ -2948,6 +2966,12 @@ def as_pdf(
29482966 filename = "file.pdf" ,
29492967 pdfa : bool = False ,
29502968 add_page_numbers : bool = False ,
2969+ page_number_prefix : str = "" ,
2970+ page_number_digits : int = 5 ,
2971+ page_number_area = None ,
2972+ page_number_font_size : float = 10 ,
2973+ page_number_offset_horizontal : float = 15 ,
2974+ page_number_offset_vertical : float = 15 ,
29512975 toc_pages : int = 0 ,
29522976 append_matching_suffix : bool = True ,
29532977 ) -> DAFile :
@@ -2958,6 +2982,12 @@ def as_pdf(
29582982 filename (str): Desired filename for the generated PDF.
29592983 pdfa (bool): If True, generates the PDF in PDF/A format.
29602984 add_page_numbers (bool): If True, adds page numbers to the generated PDF.
2985+ page_number_prefix (str): What the bates number added to each page should start with (e.g. `EX-`).
2986+ page_number_digits (int): How many digits (i.e. leading 0s) that the bates number will have
2987+ page_number_area (str): Where on the page the bates number will go ("TOP_LEFT", "TOP_RIGHT", "BOTTOM_LEFT", "BOTTOM_RIGHT" (default))
2988+ page_number_font_size (float): How big the bates page number will be in points (default is 10).
2989+ page_number_offset_horizontal (float): The number of pixels that the bates page number is offset from the left / right of the page.
2990+ page_number_offset_vertical (float): The number of pixels that the bates page number is offset from the top / bottom of the page.
29612991 toc_pages (int): Expected number of pages in the table of contents.
29622992 append_matching_suffix (bool): If True, appends matching suffix to the filename.
29632993
@@ -2969,12 +2999,19 @@ def as_pdf(
29692999 exhibit .cover_page
29703000 if self .include_table_of_contents and toc_pages != 1 :
29713001 self ._update_page_numbers (toc_guess_pages = toc_pages )
3002+ if not page_number_prefix and self .bates_prefix :
3003+ page_number_prefix = self .bates_prefix
29723004 return pdf_concatenate (
29733005 [
29743006 exhibit .as_pdf (
29753007 add_cover_page = self .include_exhibit_cover_pages ,
29763008 add_page_numbers = add_page_numbers ,
2977- prefix = self .bates_prefix ,
3009+ page_number_prefix = page_number_prefix ,
3010+ page_number_digits = page_number_digits ,
3011+ page_number_area = page_number_area ,
3012+ page_number_font_size = page_number_font_size ,
3013+ page_number_offset_horizontal = page_number_offset_horizontal ,
3014+ page_number_offset_vertical = page_number_offset_vertical ,
29783015 )
29793016 for exhibit in self
29803017 ],
@@ -3107,12 +3144,19 @@ class ALExhibitDocument(ALDocument):
31073144 has_addendum : bool
31083145 auto_labeler : Callable
31093146 auto_ocr : bool
3147+ # Deprecated
31103148 bates_prefix : str
31113149 maximum_size : int
31123150 maximum_size_per_doc : int
31133151 suffix_to_append : str
31143152 exhibits : ALExhibitList
31153153 table_of_contents : DAFile
3154+ page_number_prefix : str
3155+ page_number_digits : int
3156+ page_number_area : str | None
3157+ page_number_font_size : float
3158+ page_number_offset_horizontal : float
3159+ page_number_offset_vertical : float
31163160
31173161 def init (self , * pargs , ** kwargs ) -> None :
31183162 """Standard DAObject init method.
@@ -3127,8 +3171,6 @@ def init(self, *pargs, **kwargs) -> None:
31273171 self .exhibits .auto_labeler = self .auto_labeler
31283172 if hasattr (self , "auto_ocr" ):
31293173 self .exhibits .auto_ocr = self .auto_ocr
3130- if hasattr (self , "bates_prefix" ):
3131- self .exhibits .bates_prefix = self .bates_prefix
31323174 if hasattr (self , "include_exhibit_cover_pages" ):
31333175 self .exhibits .include_exhibit_cover_pages = self .include_exhibit_cover_pages
31343176 else :
@@ -3146,13 +3188,30 @@ def init(self, *pargs, **kwargs) -> None:
31463188 else :
31473189 self .include_table_of_contents = True
31483190 self .exhibits .include_table_of_contents = True
3191+ if hasattr (self , "bates_prefix" ):
3192+ self .exhibits .bates_prefix = self .bates_prefix
31493193 if not hasattr (self , "add_page_numbers" ):
31503194 self .add_page_numbers = False
3195+ self ._set_default_attributes ()
31513196 self .has_addendum = False
31523197 if not hasattr (self , "suffix_to_append" ):
31533198 # When the key is "preview", append it to the file name
31543199 self .suffix_to_append = "preview"
31553200
3201+ def _set_default_attributes (self ) -> None :
3202+ if not hasattr (self , "page_number_prefix" ):
3203+ self .page_number_prefix = ""
3204+ if not hasattr (self , "page_number_digits" ):
3205+ self .page_number_digits = 5
3206+ if not hasattr (self , "page_number_area" ):
3207+ self .page_number_area = None
3208+ if not hasattr (self , "page_number_font_size" ):
3209+ self .page_number_font_size = 10
3210+ if not hasattr (self , "page_number_offset_horizontal" ):
3211+ self .page_number_offset_horizontal = 15
3212+ if not hasattr (self , "page_number_offset_vertical" ):
3213+ self .page_number_offset_vertical = 15
3214+
31563215 def has_overflow (self ) -> bool :
31573216 """
31583217 Check if there is any overflow in the document.
@@ -3227,19 +3286,34 @@ def as_pdf(
32273286 filename = base_name (self .filename ) + ".pdf"
32283287
32293288 if len (self .exhibits ):
3289+ self ._set_default_attributes ()
32303290 if self .include_table_of_contents :
32313291 toc_pages = self .table_of_contents .num_pages ()
32323292 return pdf_concatenate (
32333293 self .table_of_contents ,
32343294 self .exhibits .as_pdf (
3235- add_page_numbers = self .add_page_numbers , toc_pages = toc_pages
3295+ add_page_numbers = self .add_page_numbers ,
3296+ page_number_prefix = self .page_number_prefix ,
3297+ page_number_digits = self .page_number_digits ,
3298+ page_number_area = self .page_number_area ,
3299+ page_number_font_size = self .page_number_font_size ,
3300+ page_number_offset_horizontal = self .page_number_offset_horizontal ,
3301+ page_number_offset_vertical = self .page_number_offset_vertical ,
3302+ toc_pages = toc_pages ,
3303+ pdfa = pdfa ,
32363304 ),
32373305 filename = filename ,
32383306 pdfa = pdfa ,
32393307 )
32403308 else :
32413309 return self .exhibits .as_pdf (
32423310 add_page_numbers = self .add_page_numbers ,
3311+ page_number_prefix = self .page_number_prefix ,
3312+ page_number_digits = self .page_number_digits ,
3313+ page_number_area = self .page_number_area ,
3314+ page_number_font_size = self .page_number_font_size ,
3315+ page_number_offset_horizontal = self .page_number_offset_horizontal ,
3316+ page_number_offset_vertical = self .page_number_offset_vertical ,
32433317 filename = filename ,
32443318 pdfa = pdfa ,
32453319 )
0 commit comments