@@ -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