From c6e600b8d9654d4a1f161bc1b7deecdf19abcbd9 Mon Sep 17 00:00:00 2001 From: Magnus Hagander Date: Tue, 7 Jan 2025 10:57:10 +0100 Subject: [PATCH] Move fitz version checks to versionutil.py Move the backwards-compatibility checks for fitz over to this new file as well, instead of having them spread out through the code. --- postgresqleu/digisign/backendviews.py | 6 ++--- postgresqleu/digisign/pdfutil.py | 16 +++--------- postgresqleu/util/versionutil.py | 36 +++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 16 deletions(-) diff --git a/postgresqleu/digisign/backendviews.py b/postgresqleu/digisign/backendviews.py index 51f6d03f..c29faa20 100644 --- a/postgresqleu/digisign/backendviews.py +++ b/postgresqleu/digisign/backendviews.py @@ -7,6 +7,7 @@ import io import json from postgresqleu.util.backendviews import backend_list_editor +from postgresqleu.util.versionutil import fitz_get_page_png from postgresqleu.digisign.models import DigisignProvider, DigisignLog from postgresqleu.digisign.backendforms import BackendProviderForm from postgresqleu.digisign.util import digisign_providers @@ -128,10 +129,7 @@ def pdf_field_editor(request, conference, pdf, available_fields, fielddata, save # one PNG for each page. pdf = fitz.open('pdf', bytes(pdf)) pages = [] - if fitz.version[0] > "1.19": - pages = [(pagenum, base64.b64encode(page.get_pixmap().tobytes(output='png')).decode()) for pagenum, page in enumerate(pdf.pages())] - else: - pages = [(pagenum, base64.b64encode(page.getPixmap().getPNGData()).decode()) for pagenum, page in enumerate(pdf.pages())] + pages = [(pagenum, base64.b64encode(fitz_get_page_png(page)).decode()) for pagenum, page in enumerate(pdf.pages())] return render(request, 'digisign/pdf_field_editor.html', { 'conference': conference, diff --git a/postgresqleu/digisign/pdfutil.py b/postgresqleu/digisign/pdfutil.py index f8db8d04..a64a8f82 100644 --- a/postgresqleu/digisign/pdfutil.py +++ b/postgresqleu/digisign/pdfutil.py @@ -4,6 +4,7 @@ import itertools from reportlab.pdfgen.canvas import Canvas from postgresqleu.util.reporttools import cm +from postgresqleu.util.versionutil import fitz_get_page_pixmap, fitz_insert_text, fitz_insert_image def fill_pdf_fields(pdf, available_fields, fielddata): @@ -38,10 +39,7 @@ def fill_pdf_fields(pdf, available_fields, fielddata): txt = "" if txt: - if fitz.version[0] > "1.19": - page.insert_text(p, txt, fontname='Courier-Bold', fontsize=fielddata['fontsize']) - else: - page.insertText(p, txt, fontname='Courier-Bold', fontsize=fielddata['fontsize']) + fitz_insert_text(page, p, txt, 'Courier-Bold', fielddata['fontsize']) return pdf.write() @@ -68,16 +66,10 @@ def pdf_watermark_preview(pdfdata): wmio.seek(0) wmpdf = fitz.open('pdf', wmio) - if fitz.version[0] > "1.19": - wmpixmap = next(wmpdf.pages()).get_pixmap() - else: - wmpixmap = next(wmpdf.pages()).getPixmap() + wmpixmap = fitz_get_page_pixmap(next(wmpdf.pages())) pdf = fitz.open('pdf', pdfdata) for pagenum, page in enumerate(pdf.pages()): - if fitz.version[0] > "1.19": - page.insert_image(page.bound(), pixmap=wmpixmap, overlay=False) - else: - page.insertImage(page.bound(), pixmap=wmpixmap, overlay=False) + fitz_insert_image(page, page.bound(), wmpixmap, False) return pdf.write() diff --git a/postgresqleu/util/versionutil.py b/postgresqleu/util/versionutil.py index 24f17e21..17ae63e2 100644 --- a/postgresqleu/util/versionutil.py +++ b/postgresqleu/util/versionutil.py @@ -7,3 +7,39 @@ def decode_unverified_jwt(j): return jwt.decode(j, options={'verify_signature': False}) else: return jwt.decode(j, verify=False) + + +def fitz_get_page_png(page): + import fitz + + if fitz.version[0] > "1.19": + return page.get_pixmap().tobytes(output='png') + else: + return page.getPixmap().getPNGData() + + +def fitz_get_page_pixmap(page): + import fitz + + if fitz.version[0] > "1.19": + return page.get_pixmap() + else: + return page.getPixmap() + + +def fitz_insert_text(page, point, txt, fontname, fontsize): + import fitz + + if fitz.version[0] > "1.19": + page.insert_text(point, txt, fontname=fontname, fontsize=fontsize) + else: + page.insertText(point, txt, fontname=fontname, fontsize=fontsize) + + +def fitz_insert_image(page, rect, pixmap, overlay): + import fitz + + if fitz.version[0] > "1.19": + page.insert_image(rect, pixmap=pixmap, overlay=overlay) + else: + page.insertImage(rect, pixmap=pixmap, overlay=overlay) -- 2.39.5