diff options
Diffstat (limited to 'ishtar_common/utils.py')
| -rw-r--r-- | ishtar_common/utils.py | 45 | 
1 files changed, 45 insertions, 0 deletions
| diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py index 173338b4f..bfb5d0e32 100644 --- a/ishtar_common/utils.py +++ b/ishtar_common/utils.py @@ -2117,3 +2117,48 @@ class IshtarFileSystemStorage(FileSystemStorage):              if not os.path.exists(os.readlink(path_name)):                  os.remove(path_name)          return os.path.exists(path_name) + + +def generate_pdf_preview(item, save=True, tempdir=None, page_number=None): +    if not settings.PDFTOPPM_BINARY: +        return +    preview_tmp_name = None +    if not item.image and item.source and item.source_page_range: +        tempdir = tempfile.mkdtemp("-ishtarppmtopdf") +        try: +            page_number = int( +                item.source_page_range.split("-")[0].split(";")[0].split(",")[0]) +        except ValueError: +            page_number = 1 +        returned = generate_pdf_preview(item.source, save=False, tempdir=tempdir, +                                        page_number=page_number) +        if not returned: +            return +        tempdir, preview_tmp_name = returned +    elif (not page_number and item.image) \ +            or not item.associated_file \ +            or not item.associated_file.path \ +            or not item.associated_file.path.lower().endswith(".pdf"): +        return +    if not page_number: +        page_number = 1 + +    if not tempdir: +        tempdir = tempfile.mkdtemp("-ishtarppmtopdf") +    if not preview_tmp_name: +        preview_tmp_name = tempdir + os.path.sep + "preview" +        args = (settings.PDFTOPPM_BINARY, "-singlefile", "-jpeg", "-f", str(page_number), +                item.associated_file.path, preview_tmp_name) + +        try: +            popen = subprocess.Popen(args) +            popen.wait(timeout=5) +        except subprocess.SubprocessError: +            return +    if not save: +        return tempdir, preview_tmp_name + +    with open(preview_tmp_name + ".jpg", "rb") as preview: +        django_file = File(preview) +        getattr(item, "image").save("page.jpg", django_file, save=True) +    shutil.rmtree(tempdir) | 
