Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
    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)