PDF editor: Allow combinations of placeholders

This commit is contained in:
Raphael Michel
2022-03-13 14:44:35 +01:00
committed by Raphael Michel
parent 4ae7cc9f50
commit 02f8bcbe23
2 changed files with 27 additions and 1 deletions

View File

@@ -37,6 +37,7 @@ import hashlib
import itertools import itertools
import logging import logging
import os import os
import re
import subprocess import subprocess
import tempfile import tempfile
import uuid import uuid
@@ -624,6 +625,8 @@ class Renderer:
def _draw_barcodearea(self, canvas: Canvas, op: OrderPosition, order: Order, o: dict): def _draw_barcodearea(self, canvas: Canvas, op: OrderPosition, order: Order, o: dict):
content = o.get('content', 'secret') content = o.get('content', 'secret')
if content == 'secret': if content == 'secret':
# do not use get_text_content because it uses a shortened version of secret
# and does not deal with our default value here properly
content = op.secret content = op.secret
else: else:
content = self._get_text_content(op, order, o) content = self._get_text_content(op, order, o)
@@ -653,20 +656,42 @@ class Renderer:
return self._get_text_content(op, order, o, True) return self._get_text_content(op, order, o, True)
ev = self._get_ev(op, order) ev = self._get_ev(op, order)
if not o['content']: if not o['content']:
return '(error)' return '(error)'
if o['content'] == 'other': if o['content'] == 'other':
return o['text'] text = o['text']
def replace(x):
if x.group(1) not in self.variables:
return x.group(0)
if x.group(1) == 'secret':
# Do not use shortened version
return op.secret
try:
return self.variables[x.group(1)]['evaluate'](op, order, ev)
except:
logger.exception('Failed to process variable.')
return '(error)'
# We do not use str.format like in emails so we (a) can evaluate lazily and (b) can re-implement this
# 1:1 on other platforms that render PDFs through our API (libpretixprint)
return re.sub(r'\{([a-zA-Z0-9_]+)\}', replace, text)
elif o['content'].startswith('itemmeta:'): elif o['content'].startswith('itemmeta:'):
return op.item.meta_data.get(o['content'][9:]) or '' return op.item.meta_data.get(o['content'][9:]) or ''
elif o['content'].startswith('meta:'): elif o['content'].startswith('meta:'):
return ev.meta_data.get(o['content'][5:]) or '' return ev.meta_data.get(o['content'][5:]) or ''
elif o['content'] in self.variables: elif o['content'] in self.variables:
try: try:
return self.variables[o['content']]['evaluate'](op, order, ev) return self.variables[o['content']]['evaluate'](op, order, ev)
except: except:
logger.exception('Failed to process variable.') logger.exception('Failed to process variable.')
return '(error)' return '(error)'
return '' return ''
def _draw_imagearea(self, canvas: Canvas, op: OrderPosition, order: Order, o: dict): def _draw_imagearea(self, canvas: Canvas, op: OrderPosition, order: Order, o: dict):

View File

@@ -190,6 +190,7 @@ var editor = {
bottom: editor._px2mm(editor.pdf_viewport.height - o.height * o.scaleY - top).toFixed(2), bottom: editor._px2mm(editor.pdf_viewport.height - o.height * o.scaleY - top).toFixed(2),
size: editor._px2mm(o.height * o.scaleY).toFixed(2), size: editor._px2mm(o.height * o.scaleY).toFixed(2),
content: o.content, content: o.content,
text: o.text,
nowhitespace: o.nowhitespace || false, nowhitespace: o.nowhitespace || false,
}); });
} else if (o.type === "poweredby") { } else if (o.type === "poweredby") {