@@ -36,6 +36,7 @@ class LocalInputSource:
3636 file_mimetype : str
3737 input_type : InputType
3838 filepath : Optional [str ]
39+ _page_count : Optional [int ] = None
3940
4041 def __init__ (self , input_type : InputType ):
4142 self .input_type = input_type
@@ -100,17 +101,25 @@ def is_pdf(self) -> bool:
100101 """:return: True if the file is a PDF."""
101102 return self .file_mimetype == "application/pdf"
102103
103- def count_doc_pages (self ) -> int :
104+ @property
105+ def page_count (self ) -> int :
104106 """
105- Count the pages in the PDF .
107+ Count the pages in the document .
106108
107- :return: the number of pages.
109+ :return: The number of pages.
108110 """
109- if self .is_pdf ():
110- self .file_object .seek (0 )
111- pdf = pdfium .PdfDocument (self .file_object )
112- return len (pdf )
113- return 1
111+ if self ._page_count is None :
112+ if self .is_pdf ():
113+ self .file_object .seek (0 )
114+ pdf = pdfium .PdfDocument (self .file_object )
115+ self ._page_count = len (pdf )
116+ else :
117+ self ._page_count = 1
118+ return self ._page_count
119+
120+ def count_doc_pages (self ) -> int :
121+ """Deprecated. Use ``page_count`` instead."""
122+ return self .page_count
114123
115124 def apply_page_options (self , page_options : PageOptions ) -> None :
116125 """Apply cut and merge options on multipage documents."""
@@ -131,10 +140,10 @@ def process_pdf(
131140 """Run any required processing on a PDF file."""
132141 if self .is_pdf_empty ():
133142 raise MindeeSourceError (f"PDF pages are empty in: { self .filename } " )
134- pages_count = self .count_doc_pages ()
135- if on_min_pages > pages_count :
143+ page_count = self .page_count
144+ if on_min_pages > page_count :
136145 return
137- all_pages = list (range (pages_count ))
146+ all_pages = list (range (page_count ))
138147 if behavior == KEEP_ONLY :
139148 pages_to_keep = set ()
140149 for page_id in page_indexes :
@@ -161,7 +170,7 @@ def merge_pdf_pages(self, page_numbers: set) -> None:
161170 """
162171 Create a new PDF from pages and set it to ``file_object``.
163172
164- :param page_numbers: List of pages number to use for merging in the original PDF.
173+ :param page_numbers: List of page numbers to use for merging in the original PDF.
165174 :return: None
166175 """
167176 self .file_object .seek (0 )
@@ -172,6 +181,7 @@ def merge_pdf_pages(self, page_numbers: set) -> None:
172181 bytes_io = io .BytesIO ()
173182 new_pdf .save (bytes_io )
174183 self .file_object = bytes_io
184+ self ._page_count = len (new_pdf )
175185
176186 def is_pdf_empty (self ) -> bool :
177187 """
0 commit comments