def build_jpeg_preview( self, file_path: str, preview_name: str, cache_path: str, page_id: int, extension: str = ".jpg", size: utils.ImgDims = None, mimetype: str = "", attempt: int = 0, ) -> None: if not size: size = self.default_size cache_file = os.path.join(cache_path, preview_name) if self._cache_file_process_already_running(cache_file): # Note - 10-10-2018 - Basile - infinite recursion protection if attempt >= 5: raise PreviewAbortedMaxAttempsExceeded( "Max attempts exceeded aborting preview") attempt += 1 time.sleep(2) return self.build_jpeg_preview( file_path=file_path, preview_name=preview_name, cache_path=cache_path, extension=extension, page_id=page_id, size=size, attempt=attempt, mimetype=mimetype, ) input_pdf_stream = None if os.path.exists(os.path.join(cache_path, preview_name + ".pdf")): input_pdf_stream = open( os.path.join(cache_path, preview_name + ".pdf"), "rb") if not input_pdf_stream: with open(file_path, "rb") as _file: file, file_extension = os.path.splitext(file_path) output_path = os.path.join(cache_path, preview_name) input_pdf_stream = self._convert_to_pdf( _file, file_extension, cache_path, output_path, mimetype) input_pdf = utils.get_decrypted_pdf(input_pdf_stream) intermediate_pdf = PdfFileWriter() intermediate_pdf.addPage(input_pdf.getPage(int(page_id))) intermediate_pdf_stream = BytesIO() intermediate_pdf.write(intermediate_pdf_stream) intermediate_pdf_stream.seek(0, 0) jpeg_stream = convert_pdf_to_jpeg(intermediate_pdf_stream, size) jpeg_preview_path = os.path.join(cache_path, preview_name + extension) with open(jpeg_preview_path, "wb") as jpeg_output_stream: buffer = jpeg_stream.read(1024) while buffer: jpeg_output_stream.write(buffer) buffer = jpeg_stream.read(1024)
def build_jpeg_preview( self, file_path, preview_name, cache_path, page_id, extension = '.jpg', size=None ): with open(file_path, 'rb') as odt: if os.path.exists( '{path}{file_name}.pdf'.format( path=cache_path, file_name=preview_name )): input_pdf_stream = open( '{path}.pdf'.format( path=cache_path + preview_name, ), 'rb') else: if self.cache_file_process_already_running( cache_path + preview_name): time.sleep(2) return self.build_jpeg_preview( file_path=file_path, preview_name=preview_name, cache_path=cache_path, extension=extension, page_id=page_id ) else: input_pdf_stream = convert_office_document_to_pdf( odt, cache_path, preview_name ) input_pdf = PdfFileReader(input_pdf_stream) intermediate_pdf = PdfFileWriter() intermediate_pdf.addPage(input_pdf.getPage(int(page_id))) intermediate_pdf_stream = BytesIO() intermediate_pdf.write(intermediate_pdf_stream) intermediate_pdf_stream.seek(0, 0) jpeg_stream = convert_pdf_to_jpeg(intermediate_pdf_stream, size) jpeg_preview_path = '{path}{file_name}{extension}'.format( path=cache_path, file_name=preview_name, extension=extension ) with open(jpeg_preview_path, 'wb') as jpeg_output_stream: buffer = jpeg_stream.read(1024) while buffer: jpeg_output_stream.write(buffer) buffer = jpeg_stream.read(1024)
def build_jpeg_preview( self, file_path: str, preview_name: str, cache_path: str, page_id: int, extension: str = ".jpg", size: utils.ImgDims = None, mimetype: str = "", ) -> None: """ generate the pdf small preview """ if not size: size = self.default_size with open(file_path, "rb") as pdf: # HACK - D.A. - 2017-08-11 Deactivate strict mode # This avoid crashes when PDF are not standard # See https://github.com/mstamy2/PyPDF2/issues/244 input_pdf = utils.get_decrypted_pdf(pdf, strict=False) output_pdf = PdfFileWriter() output_pdf.addPage(input_pdf.getPage(int(page_id))) output_stream = BytesIO() output_pdf.write(output_stream) output_stream.seek(0, 0) result = convert_pdf_to_jpeg(output_stream, size) preview_path = "{path}{file_name}{extension}".format( file_name=preview_name, path=cache_path, extension=extension) with open(preview_path, "wb") as jpeg: buffer = result.read(1024) while buffer: jpeg.write(buffer) buffer = result.read(1024)
def build_jpeg_preview(self, file_path, preview_name, cache_path, page_id, extension='.jpg', size=None): """ generate the pdf small preview """ if not size: size = ImgDims(256, 256) with open(file_path, 'rb') as pdf: # HACK - D.A. - 2017-08-11 Deactivate strict mode # This avoid crashes when PDF are not standard # See https://github.com/mstamy2/PyPDF2/issues/244 input_pdf = PdfFileReader(pdf, strict=False) output_pdf = PdfFileWriter() output_pdf.addPage(input_pdf.getPage(int(page_id))) output_stream = BytesIO() output_pdf.write(output_stream) output_stream.seek(0, 0) result = convert_pdf_to_jpeg(output_stream, size) if page_id == -1: preview_path = '{path}{file_name}{extension}'.format( file_name=preview_name, path=cache_path, extension=extension) else: preview_path = '{path}{file_name}{extension}'.format( file_name=preview_name, path=cache_path, page_id=page_id, extension=extension) with open(preview_path, 'wb') as jpeg: buffer = result.read(1024) while buffer: jpeg.write(buffer) buffer = result.read(1024)