Move fitz version checks to versionutil.py
authorMagnus Hagander <magnus@hagander.net>
Tue, 7 Jan 2025 09:57:10 +0000 (10:57 +0100)
committerMagnus Hagander <magnus@hagander.net>
Tue, 7 Jan 2025 09:57:10 +0000 (10:57 +0100)
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
postgresqleu/digisign/pdfutil.py
postgresqleu/util/versionutil.py

index 51f6d03f86e35d4c500e5e4d201f6a48e692fc23..c29faa20253574b520890e9237bad49783a00d6b 100644 (file)
@@ -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,
index f8db8d04ee132a98f1f865febf046f57b631b350..a64a8f82334255f9df1b0aa7aceec3c43b337a4f 100644 (file)
@@ -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()
index 24f17e213402abe9eaaab15a05328d89e84d78cc..17ae63e220b4d3f592a59a81fa9c279c012d8df3 100644 (file)
@@ -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)