diff --git a/src/pretix/base/invoice.py b/src/pretix/base/invoice.py
index 5e91ffc2c..3f0a2b251 100644
--- a/src/pretix/base/invoice.py
+++ b/src/pretix/base/invoice.py
@@ -48,7 +48,7 @@ from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfgen.canvas import Canvas
from reportlab.platypus import (
BaseDocTemplate, Flowable, Frame, KeepTogether, NextPageTemplate,
- PageTemplate, Spacer, Table, TableStyle,
+ PageTemplate, Paragraph, Spacer, Table, TableStyle,
)
from pretix.base.decimal import round_decimal
@@ -56,9 +56,7 @@ from pretix.base.models import Event, Invoice, Order, OrderPayment
from pretix.base.services.currencies import SOURCE_NAMES
from pretix.base.signals import register_invoice_renderers
from pretix.base.templatetags.money import money_filter
-from pretix.helpers.reportlab import (
- FontFallbackParagraph, ThumbnailingImageReader, reshaper,
-)
+from pretix.helpers.reportlab import ThumbnailingImageReader, reshaper
from pretix.presale.style import get_fonts
logger = logging.getLogger(__name__)
@@ -237,17 +235,16 @@ class BaseReportlabInvoiceRenderer(BaseInvoiceRenderer):
italic='OpenSansIt', boldItalic='OpenSansBI')
for family, styles in get_fonts(event=self.event, pdf_support_required=True).items():
- pdfmetrics.registerFont(TTFont(family, finders.find(styles['regular']['truetype'])))
if family == self.event.settings.invoice_renderer_font:
+ pdfmetrics.registerFont(TTFont(family, finders.find(styles['regular']['truetype'])))
self.font_regular = family
+ if 'italic' in styles:
+ pdfmetrics.registerFont(TTFont(family + ' I', finders.find(styles['italic']['truetype'])))
if 'bold' in styles:
+ pdfmetrics.registerFont(TTFont(family + ' B', finders.find(styles['bold']['truetype'])))
self.font_bold = family + ' B'
- if 'italic' in styles:
- pdfmetrics.registerFont(TTFont(family + ' I', finders.find(styles['italic']['truetype'])))
- if 'bold' in styles:
- pdfmetrics.registerFont(TTFont(family + ' B', finders.find(styles['bold']['truetype'])))
- if 'bolditalic' in styles:
- pdfmetrics.registerFont(TTFont(family + ' B I', finders.find(styles['bolditalic']['truetype'])))
+ if 'bolditalic' in styles:
+ pdfmetrics.registerFont(TTFont(family + ' B I', finders.find(styles['bolditalic']['truetype'])))
def _normalize(self, text):
# reportlab does not support unicode combination characters
@@ -396,8 +393,8 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
invoice_to_top = 52 * mm
def _draw_invoice_to(self, canvas):
- p = FontFallbackParagraph(self._clean_text(self.invoice.address_invoice_to),
- style=self.stylesheet['Normal'])
+ p = Paragraph(self._clean_text(self.invoice.address_invoice_to),
+ style=self.stylesheet['Normal'])
p.wrapOn(canvas, self.invoice_to_width, self.invoice_to_height)
p_size = p.wrap(self.invoice_to_width, self.invoice_to_height)
p.drawOn(canvas, self.invoice_to_left, self.pagesize[1] - p_size[1] - self.invoice_to_top)
@@ -408,7 +405,7 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
invoice_from_top = 17 * mm
def _draw_invoice_from(self, canvas):
- p = FontFallbackParagraph(
+ p = Paragraph(
self._clean_text(self.invoice.full_invoice_from),
style=self.stylesheet['InvoiceFrom']
)
@@ -526,12 +523,12 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
def shorten(txt):
txt = str(txt)
txt = bleach.clean(txt, tags=set()).strip()
- p = FontFallbackParagraph(self._normalize(txt.strip().replace('\n', '
\n')), style=self.stylesheet['Normal'])
+ p = Paragraph(self._normalize(txt.strip().replace('\n', '
\n')), style=self.stylesheet['Normal'])
p_size = p.wrap(self.event_width, self.event_height)
while p_size[1] > 2 * self.stylesheet['Normal'].leading:
txt = ' '.join(txt.replace('…', '').split()[:-1]) + '…'
- p = FontFallbackParagraph(self._normalize(txt.strip().replace('\n', '
\n')), style=self.stylesheet['Normal'])
+ p = Paragraph(self._normalize(txt.strip().replace('\n', '
\n')), style=self.stylesheet['Normal'])
p_size = p.wrap(self.event_width, self.event_height)
return txt
@@ -557,7 +554,7 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
else:
p_str = shorten(self.invoice.event.name)
- p = FontFallbackParagraph(self._normalize(p_str.strip().replace('\n', '
\n')), style=self.stylesheet['Normal'])
+ p = Paragraph(self._normalize(p_str.strip().replace('\n', '
\n')), style=self.stylesheet['Normal'])
p.wrapOn(canvas, self.event_width, self.event_height)
p_size = p.wrap(self.event_width, self.event_height)
p.drawOn(canvas, self.event_left, self.pagesize[1] - self.event_top - p_size[1])
@@ -611,7 +608,7 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
def _get_intro(self):
story = []
if self.invoice.custom_field:
- story.append(FontFallbackParagraph(
+ story.append(Paragraph(
'{}: {}'.format(
self._clean_text(str(self.invoice.event.settings.invoice_address_custom_field)),
self._clean_text(self.invoice.custom_field),
@@ -620,7 +617,7 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
))
if self.invoice.internal_reference:
- story.append(FontFallbackParagraph(
+ story.append(Paragraph(
self._normalize(pgettext('invoice', 'Customer reference: {reference}').format(
reference=self._clean_text(self.invoice.internal_reference),
)),
@@ -628,14 +625,14 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
))
if self.invoice.invoice_to_vat_id:
- story.append(FontFallbackParagraph(
+ story.append(Paragraph(
self._normalize(pgettext('invoice', 'Customer VAT ID')) + ': ' +
self._clean_text(self.invoice.invoice_to_vat_id),
self.stylesheet['Normal']
))
if self.invoice.invoice_to_beneficiary:
- story.append(FontFallbackParagraph(
+ story.append(Paragraph(
self._normalize(pgettext('invoice', 'Beneficiary')) + ':
' +
self._clean_text(self.invoice.invoice_to_beneficiary),
self.stylesheet['Normal']
@@ -647,7 +644,7 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
if story:
story.append(Spacer(1, 5 * mm))
- story.append(FontFallbackParagraph(
+ story.append(Paragraph(
self._clean_text(self.invoice.introductory_text, tags=['br']),
self.stylesheet['Normal']
))
@@ -660,7 +657,7 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
story = [
NextPageTemplate('FirstPage'),
- FontFallbackParagraph(
+ Paragraph(
self._normalize(
pgettext('invoice', 'Tax Invoice') if str(self.invoice.invoice_from_country) == 'AU'
else pgettext('invoice', 'Invoice')
@@ -686,17 +683,17 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
]
if has_taxes:
tdata = [(
- FontFallbackParagraph(self._normalize(pgettext('invoice', 'Description')), self.stylesheet['Bold']),
- FontFallbackParagraph(self._normalize(pgettext('invoice', 'Qty')), self.stylesheet['BoldRightNoSplit']),
- FontFallbackParagraph(self._normalize(pgettext('invoice', 'Tax rate')), self.stylesheet['BoldRightNoSplit']),
- FontFallbackParagraph(self._normalize(pgettext('invoice', 'Net')), self.stylesheet['BoldRightNoSplit']),
- FontFallbackParagraph(self._normalize(pgettext('invoice', 'Gross')), self.stylesheet['BoldRightNoSplit']),
+ Paragraph(self._normalize(pgettext('invoice', 'Description')), self.stylesheet['Bold']),
+ Paragraph(self._normalize(pgettext('invoice', 'Qty')), self.stylesheet['BoldRightNoSplit']),
+ Paragraph(self._normalize(pgettext('invoice', 'Tax rate')), self.stylesheet['BoldRightNoSplit']),
+ Paragraph(self._normalize(pgettext('invoice', 'Net')), self.stylesheet['BoldRightNoSplit']),
+ Paragraph(self._normalize(pgettext('invoice', 'Gross')), self.stylesheet['BoldRightNoSplit']),
)]
else:
tdata = [(
- FontFallbackParagraph(self._normalize(pgettext('invoice', 'Description')), self.stylesheet['Bold']),
- FontFallbackParagraph(self._normalize(pgettext('invoice', 'Qty')), self.stylesheet['BoldRightNoSplit']),
- FontFallbackParagraph(self._normalize(pgettext('invoice', 'Amount')), self.stylesheet['BoldRightNoSplit']),
+ Paragraph(self._normalize(pgettext('invoice', 'Description')), self.stylesheet['Bold']),
+ Paragraph(self._normalize(pgettext('invoice', 'Qty')), self.stylesheet['BoldRightNoSplit']),
+ Paragraph(self._normalize(pgettext('invoice', 'Amount')), self.stylesheet['BoldRightNoSplit']),
)]
def _group_key(line):
@@ -718,20 +715,14 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
)
description = description + "\n" + single_price_line
tdata.append((
- FontFallbackParagraph(
+ Paragraph(
self._clean_text(description, tags=['br']),
self.stylesheet['Normal']
),
str(len(lines)),
localize(tax_rate) + " %",
- FontFallbackParagraph(
- money_filter(net_value * len(lines), self.invoice.event.currency).replace('\xa0', ' '),
- self.stylesheet['NormalRight']
- ),
- FontFallbackParagraph(
- money_filter(gross_value * len(lines), self.invoice.event.currency).replace('\xa0', ' '),
- self.stylesheet['NormalRight']
- ),
+ Paragraph(money_filter(net_value * len(lines), self.invoice.event.currency).replace('\xa0', ' '), self.stylesheet['NormalRight']),
+ Paragraph(money_filter(gross_value * len(lines), self.invoice.event.currency).replace('\xa0', ' '), self.stylesheet['NormalRight']),
))
else:
if len(lines) > 1:
@@ -740,15 +731,12 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
)
description = description + "\n" + single_price_line
tdata.append((
- FontFallbackParagraph(
+ Paragraph(
self._clean_text(description, tags=['br']),
self.stylesheet['Normal']
),
str(len(lines)),
- FontFallbackParagraph(
- money_filter(gross_value * len(lines), self.invoice.event.currency).replace('\xa0', ' '),
- self.stylesheet['NormalRight']
- ),
+ Paragraph(money_filter(gross_value * len(lines), self.invoice.event.currency).replace('\xa0', ' '), self.stylesheet['NormalRight']),
))
taxvalue_map[tax_rate, tax_name] += (gross_value - net_value) * len(lines)
grossvalue_map[tax_rate, tax_name] += gross_value * len(lines)
@@ -756,13 +744,13 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
if has_taxes:
tdata.append([
- FontFallbackParagraph(self._normalize(pgettext('invoice', 'Invoice total')), self.stylesheet['Bold']), '', '', '',
+ Paragraph(self._normalize(pgettext('invoice', 'Invoice total')), self.stylesheet['Bold']), '', '', '',
money_filter(total, self.invoice.event.currency)
])
colwidths = [a * doc.width for a in (.50, .05, .15, .15, .15)]
else:
tdata.append([
- FontFallbackParagraph(self._normalize(pgettext('invoice', 'Invoice total')), self.stylesheet['Bold']), '',
+ Paragraph(self._normalize(pgettext('invoice', 'Invoice total')), self.stylesheet['Bold']), '',
money_filter(total, self.invoice.event.currency)
])
colwidths = [a * doc.width for a in (.65, .20, .15)]
@@ -772,12 +760,12 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
pending_sum = self.invoice.order.pending_sum
if pending_sum != total:
tdata.append(
- [FontFallbackParagraph(self._normalize(pgettext('invoice', 'Received payments')), self.stylesheet['Normal'])] +
+ [Paragraph(self._normalize(pgettext('invoice', 'Received payments')), self.stylesheet['Normal'])] +
(['', '', ''] if has_taxes else ['']) +
[money_filter(pending_sum - total, self.invoice.event.currency)]
)
tdata.append(
- [FontFallbackParagraph(self._normalize(pgettext('invoice', 'Outstanding payments')), self.stylesheet['Bold'])] +
+ [Paragraph(self._normalize(pgettext('invoice', 'Outstanding payments')), self.stylesheet['Bold'])] +
(['', '', ''] if has_taxes else ['']) +
[money_filter(pending_sum, self.invoice.event.currency)]
)
@@ -794,12 +782,12 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
s=Sum('amount')
)['s'] or Decimal('0.00')
tdata.append(
- [FontFallbackParagraph(self._normalize(pgettext('invoice', 'Paid by gift card')), self.stylesheet['Normal'])] +
+ [Paragraph(self._normalize(pgettext('invoice', 'Paid by gift card')), self.stylesheet['Normal'])] +
(['', '', ''] if has_taxes else ['']) +
[money_filter(giftcard_sum, self.invoice.event.currency)]
)
tdata.append(
- [FontFallbackParagraph(self._normalize(pgettext('invoice', 'Remaining amount')), self.stylesheet['Bold'])] +
+ [Paragraph(self._normalize(pgettext('invoice', 'Remaining amount')), self.stylesheet['Bold'])] +
(['', '', ''] if has_taxes else ['']) +
[money_filter(total - giftcard_sum, self.invoice.event.currency)]
)
@@ -822,7 +810,7 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
story.append(Spacer(1, 10 * mm))
if self.invoice.payment_provider_text:
- story.append(FontFallbackParagraph(
+ story.append(Paragraph(
self._normalize(self.invoice.payment_provider_text),
self.stylesheet['Normal']
))
@@ -831,7 +819,7 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
story.append(Spacer(1, 3 * mm))
if self.invoice.additional_text:
- story.append(FontFallbackParagraph(
+ story.append(Paragraph(
self._clean_text(self.invoice.additional_text, tags=['br']),
self.stylesheet['Normal']
))
@@ -847,10 +835,10 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
('FONTNAME', (0, 0), (-1, -1), self.font_regular),
]
thead = [
- FontFallbackParagraph(self._normalize(pgettext('invoice', 'Tax rate')), self.stylesheet['Fineprint']),
- FontFallbackParagraph(self._normalize(pgettext('invoice', 'Net value')), self.stylesheet['FineprintRight']),
- FontFallbackParagraph(self._normalize(pgettext('invoice', 'Gross value')), self.stylesheet['FineprintRight']),
- FontFallbackParagraph(self._normalize(pgettext('invoice', 'Tax')), self.stylesheet['FineprintRight']),
+ Paragraph(self._normalize(pgettext('invoice', 'Tax rate')), self.stylesheet['Fineprint']),
+ Paragraph(self._normalize(pgettext('invoice', 'Net value')), self.stylesheet['FineprintRight']),
+ Paragraph(self._normalize(pgettext('invoice', 'Gross value')), self.stylesheet['FineprintRight']),
+ Paragraph(self._normalize(pgettext('invoice', 'Tax')), self.stylesheet['FineprintRight']),
''
]
tdata = [thead]
@@ -861,7 +849,7 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
continue
tax = taxvalue_map[idx]
tdata.append([
- FontFallbackParagraph(self._normalize(localize(rate) + " % " + name), self.stylesheet['Fineprint']),
+ Paragraph(self._normalize(localize(rate) + " % " + name), self.stylesheet['Fineprint']),
money_filter(gross - tax, self.invoice.event.currency),
money_filter(gross, self.invoice.event.currency),
money_filter(tax, self.invoice.event.currency),
@@ -880,7 +868,7 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
table.setStyle(TableStyle(tstyledata))
story.append(Spacer(5 * mm, 5 * mm))
story.append(KeepTogether([
- FontFallbackParagraph(self._normalize(pgettext('invoice', 'Included taxes')), self.stylesheet['FineprintHeading']),
+ Paragraph(self._normalize(pgettext('invoice', 'Included taxes')), self.stylesheet['FineprintHeading']),
table
]))
@@ -897,7 +885,7 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
net = gross - tax
tdata.append([
- FontFallbackParagraph(self._normalize(localize(rate) + " % " + name), self.stylesheet['Fineprint']),
+ Paragraph(self._normalize(localize(rate) + " % " + name), self.stylesheet['Fineprint']),
fmt(net), fmt(gross), fmt(tax), ''
])
@@ -906,7 +894,7 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
story.append(KeepTogether([
Spacer(1, height=2 * mm),
- FontFallbackParagraph(
+ Paragraph(
self._normalize(pgettext(
'invoice', 'Using the conversion rate of 1:{rate} as published by the {authority} on '
'{date}, this corresponds to:'
@@ -921,7 +909,7 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
elif self.invoice.foreign_currency_display and self.invoice.foreign_currency_rate:
foreign_total = round_decimal(total * self.invoice.foreign_currency_rate)
story.append(Spacer(1, 5 * mm))
- story.append(FontFallbackParagraph(self._normalize(
+ story.append(Paragraph(self._normalize(
pgettext(
'invoice', 'Using the conversion rate of 1:{rate} as published by the {authority} on '
'{date}, the invoice total corresponds to {total}.'
@@ -974,7 +962,7 @@ class Modern1Renderer(ClassicInvoiceRenderer):
self._clean_text(l)
for l in self.invoice.address_invoice_from.strip().split('\n')
]
- p = FontFallbackParagraph(self._normalize(' · '.join(c)), style=self.stylesheet['Sender'])
+ p = Paragraph(self._normalize(' · '.join(c)), style=self.stylesheet['Sender'])
p.wrapOn(canvas, self.invoice_to_width, 15.7 * mm)
p.drawOn(canvas, self.invoice_to_left, self.pagesize[1] - self.invoice_to_top + 2 * mm)
super()._draw_invoice_from(canvas)
@@ -1033,7 +1021,7 @@ class Modern1Renderer(ClassicInvoiceRenderer):
_draw(pgettext('invoice', 'Order code'), self.invoice.order.full_code, value_size, self.left_margin, 45 * mm, **kwargs)
]
- p = FontFallbackParagraph(
+ p = Paragraph(
self._normalize(date_format(self.invoice.date, "DATE_FORMAT")),
style=ParagraphStyle(name=f'Normal{value_size}', fontName=self.font_regular, fontSize=value_size, leading=value_size * 1.2)
)
@@ -1091,7 +1079,7 @@ class Modern1SimplifiedRenderer(Modern1Renderer):
i = []
if not self.invoice.event.has_subevents and self.invoice.event.settings.show_dates_on_frontpage:
- i.append(FontFallbackParagraph(
+ i.append(Paragraph(
pgettext('invoice', 'Event date: {date_range}').format(
date_range=self.invoice.event.get_date_range_display(),
),
diff --git a/src/pretix/helpers/reportlab.py b/src/pretix/helpers/reportlab.py
index 1ca7b0cbc..275d0205c 100644
--- a/src/pretix/helpers/reportlab.py
+++ b/src/pretix/helpers/reportlab.py
@@ -19,20 +19,11 @@
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
# .
#
-import logging
-
from arabic_reshaper import ArabicReshaper
from django.conf import settings
from django.utils.functional import SimpleLazyObject
from PIL import Image
-from reportlab.lib.styles import ParagraphStyle
from reportlab.lib.utils import ImageReader
-from reportlab.pdfbase import pdfmetrics
-from reportlab.platypus import Paragraph
-
-from pretix.presale.style import get_fonts
-
-logger = logging.getLogger(__name__)
class ThumbnailingImageReader(ImageReader):
@@ -68,33 +59,3 @@ reshaper = SimpleLazyObject(lambda: ArabicReshaper(configuration={
'delete_harakat': True,
'support_ligatures': False,
}))
-
-
-class FontFallbackParagraph(Paragraph):
- def __init__(self, text, style=None, *args, **kwargs):
- if style is None:
- style = ParagraphStyle(name='paragraphImplicitDefaultStyle')
-
- if not self._font_supports_text(text, style.fontName):
- newFont = self._find_font(text, style.fontName)
- if newFont:
- logger.debug(f"replacing {style.fontName} with {newFont} for {text!r}")
- style = style.clone(name=style.name + '_' + newFont, fontName=newFont)
-
- super().__init__(text, style, *args, **kwargs)
-
- def _font_supports_text(self, text, font_name):
- font = pdfmetrics.getFont(font_name)
- return all(
- ord(c) in font.face.charToGlyph or not c.isprintable()
- for c in text
- )
-
- def _find_font(self, text, original_font):
- for family, styles in get_fonts(pdf_support_required=True).items():
- if self._font_supports_text(text, family):
- if (original_font.endswith("It") or original_font.endswith(" I")) and "italic" in styles:
- return family + " I"
- if (original_font.endswith("Bd") or original_font.endswith(" B")) and "bold" in styles:
- return family + " B"
- return family
diff --git a/src/pretix/plugins/checkinlists/exporters.py b/src/pretix/plugins/checkinlists/exporters.py
index 7f95a79cd..53fff19fe 100644
--- a/src/pretix/plugins/checkinlists/exporters.py
+++ b/src/pretix/plugins/checkinlists/exporters.py
@@ -49,7 +49,7 @@ from django.utils.translation import (
gettext as _, gettext_lazy, pgettext, pgettext_lazy,
)
from reportlab.lib.units import mm
-from reportlab.platypus import Flowable, Spacer, Table, TableStyle
+from reportlab.platypus import Flowable, Paragraph, Spacer, Table, TableStyle
from pretix.base.exporter import BaseExporter, ListExporter
from pretix.base.models import (
@@ -64,7 +64,6 @@ from pretix.base.timeframes import (
from pretix.control.forms.widgets import Select2
from pretix.helpers.filenames import safe_for_filename
from pretix.helpers.iter import chunked_iterable
-from pretix.helpers.reportlab import FontFallbackParagraph
from pretix.helpers.templatetags.jsonfield import JSONExtract
from pretix.plugins.reports.exporters import ReportlabExportMixin
@@ -344,7 +343,7 @@ class PDFCheckinList(ReportlabExportMixin, CheckInListMixin, BaseExporter):
]
story = [
- FontFallbackParagraph(
+ Paragraph(
cl.name,
headlinestyle
),
@@ -352,7 +351,7 @@ class PDFCheckinList(ReportlabExportMixin, CheckInListMixin, BaseExporter):
if cl.subevent:
story += [
Spacer(1, 3 * mm),
- FontFallbackParagraph(
+ Paragraph(
'{} ({} {})'.format(
cl.subevent.name,
cl.subevent.get_date_range_display(),
@@ -382,10 +381,10 @@ class PDFCheckinList(ReportlabExportMixin, CheckInListMixin, BaseExporter):
headrowstyle.fontName = 'OpenSansBd'
for q in questions:
txt = str(q.question)
- p = FontFallbackParagraph(txt, headrowstyle)
+ p = Paragraph(txt, headrowstyle)
while p.wrap(colwidths[len(tdata[0])], 5000)[1] > 30 * mm:
txt = txt[:len(txt) - 50] + "..."
- p = FontFallbackParagraph(txt, headrowstyle)
+ p = Paragraph(txt, headrowstyle)
tdata[0].append(p)
qs = self._get_queryset(cl, form_data)
@@ -432,8 +431,8 @@ class PDFCheckinList(ReportlabExportMixin, CheckInListMixin, BaseExporter):
CBFlowable(bool(op.last_checked_in)) if not op.blocked else '—',
'✘' if op.order.status != Order.STATUS_PAID else '✔',
op.order.code,
- FontFallbackParagraph(name, self.get_style()),
- FontFallbackParagraph(bleach.clean(str(item), tags={'br'}).strip().replace('
', '
'), self.get_style()),
+ Paragraph(name, self.get_style()),
+ Paragraph(bleach.clean(str(item), tags={'br'}).strip().replace('
', '
'), self.get_style()),
]
acache = {}
if op.addon_to:
@@ -444,10 +443,10 @@ class PDFCheckinList(ReportlabExportMixin, CheckInListMixin, BaseExporter):
for q in questions:
txt = acache.get(q.pk, '')
txt = bleach.clean(txt, tags={'br'}).strip().replace('
', '
')
- p = FontFallbackParagraph(txt, self.get_style())
+ p = Paragraph(txt, self.get_style())
while p.wrap(colwidths[len(row)], 5000)[1] > 50 * mm:
txt = txt[:len(txt) - 50] + "..."
- p = FontFallbackParagraph(txt, self.get_style())
+ p = Paragraph(txt, self.get_style())
row.append(p)
if op.order.status != Order.STATUS_PAID:
tstyledata += [
diff --git a/src/pretix/plugins/reports/accountingreport.py b/src/pretix/plugins/reports/accountingreport.py
index 7d5da2731..8eeaf0744 100644
--- a/src/pretix/plugins/reports/accountingreport.py
+++ b/src/pretix/plugins/reports/accountingreport.py
@@ -49,7 +49,6 @@ from pretix.base.timeframes import (
resolve_timeframe_to_datetime_start_inclusive_end_exclusive,
)
from pretix.control.forms.filter import get_all_payment_providers
-from pretix.helpers.reportlab import FontFallbackParagraph
from pretix.plugins.reports.exporters import ReportlabExportMixin
@@ -311,13 +310,13 @@ class ReportExporter(ReportlabExportMixin, BaseExporter):
tdata = [
[
- FontFallbackParagraph(self._transaction_group_header_label(), tstyle_bold),
- FontFallbackParagraph(_("Price"), tstyle_bold_right),
- FontFallbackParagraph(_("Tax rate"), tstyle_bold_right),
- FontFallbackParagraph("#", tstyle_bold_right),
- FontFallbackParagraph(_("Net total"), tstyle_bold_right),
- FontFallbackParagraph(_("Tax total"), tstyle_bold_right),
- FontFallbackParagraph(_("Gross total"), tstyle_bold_right),
+ Paragraph(self._transaction_group_header_label(), tstyle_bold),
+ Paragraph(_("Price"), tstyle_bold_right),
+ Paragraph(_("Tax rate"), tstyle_bold_right),
+ Paragraph("#", tstyle_bold_right),
+ Paragraph(_("Net total"), tstyle_bold_right),
+ Paragraph(_("Tax total"), tstyle_bold_right),
+ Paragraph(_("Gross total"), tstyle_bold_right),
]
]
@@ -352,7 +351,7 @@ class ReportExporter(ReportlabExportMixin, BaseExporter):
tdata[last_group_head_idx][6] = Paragraph(money_filter(sum_price_by_group, currency), tstyle_bold_right),
tdata.append(
[
- FontFallbackParagraph(
+ Paragraph(
e,
tstyle_bold,
),
@@ -375,7 +374,7 @@ class ReportExporter(ReportlabExportMixin, BaseExporter):
text = self._transaction_row_label(r)
tdata.append(
[
- FontFallbackParagraph(text, tstyle),
+ Paragraph(text, tstyle),
Paragraph(
money_filter(r["price"], currency)
if "price" in r and r["price"] is not None
@@ -406,7 +405,7 @@ class ReportExporter(ReportlabExportMixin, BaseExporter):
for tax_rate in sorted(sum_tax_by_tax_rate.keys(), reverse=True):
tdata.append(
[
- FontFallbackParagraph(_("Sum"), tstyle),
+ Paragraph(_("Sum"), tstyle),
Paragraph("", tstyle_right),
Paragraph(localize(tax_rate.normalize()) + " %", tstyle_right),
Paragraph("", tstyle_right),
@@ -439,7 +438,7 @@ class ReportExporter(ReportlabExportMixin, BaseExporter):
tdata.append(
[
- FontFallbackParagraph(_("Sum"), tstyle_bold),
+ Paragraph(_("Sum"), tstyle_bold),
Paragraph("", tstyle_right),
Paragraph("", tstyle_right),
Paragraph("", tstyle_bold_right),
@@ -493,10 +492,10 @@ class ReportExporter(ReportlabExportMixin, BaseExporter):
tdata = [
[
- FontFallbackParagraph(_("Payment method"), tstyle_bold),
- FontFallbackParagraph(_("Payments"), tstyle_bold_right),
- FontFallbackParagraph(_("Refunds"), tstyle_bold_right),
- FontFallbackParagraph(_("Total"), tstyle_bold_right),
+ Paragraph(_("Payment method"), tstyle_bold),
+ Paragraph(_("Payments"), tstyle_bold_right),
+ Paragraph(_("Refunds"), tstyle_bold_right),
+ Paragraph(_("Total"), tstyle_bold_right),
]
]
@@ -538,7 +537,7 @@ class ReportExporter(ReportlabExportMixin, BaseExporter):
tdata.append(
[
Paragraph(provider_names.get(p, p), tstyle),
- FontFallbackParagraph(
+ Paragraph(
money_filter(payments_by_provider[p], currency)
if p in payments_by_provider
else "",
@@ -563,7 +562,7 @@ class ReportExporter(ReportlabExportMixin, BaseExporter):
tdata.append(
[
- FontFallbackParagraph(_("Sum"), tstyle_bold),
+ Paragraph(_("Sum"), tstyle_bold),
Paragraph(
money_filter(
sum(payments_by_provider.values(), Decimal("0.00")), currency
@@ -641,7 +640,7 @@ class ReportExporter(ReportlabExportMixin, BaseExporter):
open_before = tx_before - p_before + r_before
tdata.append(
[
- FontFallbackParagraph(
+ Paragraph(
_("Pending payments at {datetime}").format(
datetime=date_format(
df_start - datetime.timedelta.resolution,
@@ -668,21 +667,21 @@ class ReportExporter(ReportlabExportMixin, BaseExporter):
] or Decimal("0.00")
tdata.append(
[
- FontFallbackParagraph(_("Orders"), tstyle),
+ Paragraph(_("Orders"), tstyle),
Paragraph("+", tstyle_center),
Paragraph(money_filter(tx_during, currency), tstyle_right),
]
)
tdata.append(
[
- FontFallbackParagraph(_("Payments"), tstyle),
+ Paragraph(_("Payments"), tstyle),
Paragraph("-", tstyle_center),
Paragraph(money_filter(p_during, currency), tstyle_right),
]
)
tdata.append(
[
- FontFallbackParagraph(_("Refunds"), tstyle),
+ Paragraph(_("Refunds"), tstyle),
Paragraph("+", tstyle_center),
Paragraph(money_filter(r_during, currency), tstyle_right),
]
@@ -768,7 +767,7 @@ class ReportExporter(ReportlabExportMixin, BaseExporter):
] or Decimal("0.00")
tdata.append(
[
- FontFallbackParagraph(_("Gift card transactions (credit)"), tstyle),
+ Paragraph(_("Gift card transactions (credit)"), tstyle),
Paragraph(money_filter(tx_during_pos, currency), tstyle_right),
]
)
@@ -778,7 +777,7 @@ class ReportExporter(ReportlabExportMixin, BaseExporter):
] or Decimal("0.00")
tdata.append(
[
- FontFallbackParagraph(_("Gift card transactions (debit)"), tstyle),
+ Paragraph(_("Gift card transactions (debit)"), tstyle),
Paragraph(money_filter(tx_during_neg, currency), tstyle_right),
]
)
@@ -846,9 +845,9 @@ class ReportExporter(ReportlabExportMixin, BaseExporter):
style_small.leading = 10
story = [
- FontFallbackParagraph(self.verbose_name, style_h1),
+ Paragraph(self.verbose_name, style_h1),
Spacer(0, 3 * mm),
- FontFallbackParagraph(
+ Paragraph(
"
".join(escape(f) for f in self.describe_filters(form_data)),
style_small,
),
@@ -860,7 +859,7 @@ class ReportExporter(ReportlabExportMixin, BaseExporter):
c_head = f" [{c}]" if len(currencies) > 1 else ""
story += [
Spacer(0, 3 * mm),
- FontFallbackParagraph(_("Orders") + c_head, style_h2),
+ Paragraph(_("Orders") + c_head, style_h2),
Spacer(0, 3 * mm),
*self._table_transactions(form_data, c),
]
@@ -869,7 +868,7 @@ class ReportExporter(ReportlabExportMixin, BaseExporter):
c_head = f" [{c}]" if len(currencies) > 1 else ""
story += [
Spacer(0, 8 * mm),
- FontFallbackParagraph(_("Payments") + c_head, style_h2),
+ Paragraph(_("Payments") + c_head, style_h2),
Spacer(0, 3 * mm),
*self._table_payments(form_data, c),
]
@@ -880,7 +879,7 @@ class ReportExporter(ReportlabExportMixin, BaseExporter):
Spacer(0, 8 * mm),
KeepTogether(
[
- FontFallbackParagraph(_("Open items") + c_head, style_h2),
+ Paragraph(_("Open items") + c_head, style_h2),
Spacer(0, 3 * mm),
*self._table_open_items(form_data, c),
]
@@ -896,7 +895,7 @@ class ReportExporter(ReportlabExportMixin, BaseExporter):
Spacer(0, 8 * mm),
KeepTogether(
[
- FontFallbackParagraph(_("Gift cards") + c_head, style_h2),
+ Paragraph(_("Gift cards") + c_head, style_h2),
Spacer(0, 3 * mm),
*self._table_gift_cards(form_data, c),
]
diff --git a/src/pretix/plugins/reports/exporters.py b/src/pretix/plugins/reports/exporters.py
index 13aac28a9..9baec7347 100644
--- a/src/pretix/plugins/reports/exporters.py
+++ b/src/pretix/plugins/reports/exporters.py
@@ -56,7 +56,7 @@ from reportlab.lib import colors
from reportlab.lib.enums import TA_CENTER
from reportlab.lib.units import mm
from reportlab.pdfgen.canvas import Canvas
-from reportlab.platypus import PageBreak, Spacer, Table, TableStyle
+from reportlab.platypus import PageBreak, Paragraph, Spacer, Table, TableStyle
from pretix.base.decimal import round_decimal
from pretix.base.exporter import BaseExporter, MultiSheetListExporter
@@ -69,8 +69,6 @@ from pretix.base.timeframes import (
resolve_timeframe_to_datetime_start_inclusive_end_exclusive,
)
from pretix.control.forms.filter import OverviewFilterForm
-from pretix.helpers.reportlab import FontFallbackParagraph
-from pretix.presale.style import get_fonts
class NumberedCanvas(Canvas):
@@ -137,15 +135,6 @@ class ReportlabExportMixin:
pdfmetrics.registerFont(TTFont('OpenSansIt', finders.find('fonts/OpenSans-Italic.ttf')))
pdfmetrics.registerFont(TTFont('OpenSansBd', finders.find('fonts/OpenSans-Bold.ttf')))
- for family, styles in get_fonts(None, pdf_support_required=True).items():
- pdfmetrics.registerFont(TTFont(family, finders.find(styles['regular']['truetype'])))
- if 'italic' in styles:
- pdfmetrics.registerFont(TTFont(family + ' I', finders.find(styles['italic']['truetype'])))
- if 'bold' in styles:
- pdfmetrics.registerFont(TTFont(family + ' B', finders.find(styles['bold']['truetype'])))
- if 'bolditalic' in styles:
- pdfmetrics.registerFont(TTFont(family + ' B I', finders.find(styles['bolditalic']['truetype'])))
-
def get_doc_template(self):
from reportlab.platypus import BaseDocTemplate
@@ -283,7 +272,7 @@ class OverviewReport(Report):
headlinestyle.fontSize = 15
headlinestyle.fontName = 'OpenSansBd'
story = [
- FontFallbackParagraph(_('Orders by product') + ' ' + (_('(excl. taxes)') if net else _('(incl. taxes)')), headlinestyle),
+ Paragraph(_('Orders by product') + ' ' + (_('(excl. taxes)') if net else _('(incl. taxes)')), headlinestyle),
Spacer(1, 5 * mm)
]
return story
@@ -293,7 +282,7 @@ class OverviewReport(Report):
if form_data.get('date_axis') and form_data.get('date_range'):
d_start, d_end = resolve_timeframe_to_dates_inclusive(now(), form_data['date_range'], self.timezone)
story += [
- FontFallbackParagraph(_('{axis} between {start} and {end}').format(
+ Paragraph(_('{axis} between {start} and {end}').format(
axis=dict(OverviewFilterForm(event=self.event).fields['date_axis'].choices)[form_data.get('date_axis')],
start=date_format(d_start, 'SHORT_DATE_FORMAT') if d_start else '–',
end=date_format(d_end, 'SHORT_DATE_FORMAT') if d_end else '–',
@@ -306,13 +295,13 @@ class OverviewReport(Report):
subevent = self.event.subevents.get(pk=self.form_data.get('subevent'))
except SubEvent.DoesNotExist:
subevent = self.form_data.get('subevent')
- story.append(FontFallbackParagraph(pgettext('subevent', 'Date: {}').format(subevent), self.get_style()))
+ story.append(Paragraph(pgettext('subevent', 'Date: {}').format(subevent), self.get_style()))
story.append(Spacer(1, 5 * mm))
if form_data.get('subevent_date_range'):
d_start, d_end = resolve_timeframe_to_datetime_start_inclusive_end_exclusive(now(), form_data['subevent_date_range'], self.timezone)
story += [
- FontFallbackParagraph(_('{axis} between {start} and {end}').format(
+ Paragraph(_('{axis} between {start} and {end}').format(
axis=_('Event date'),
start=date_format(d_start, 'SHORT_DATE_FORMAT') if d_start else '–',
end=date_format(d_end - timedelta(hours=1), 'SHORT_DATE_FORMAT') if d_end else '–',
@@ -384,13 +373,13 @@ class OverviewReport(Report):
tdata = [
[
_('Product'),
- FontFallbackParagraph(_('Canceled'), tstyle_th),
+ Paragraph(_('Canceled'), tstyle_th),
'',
- FontFallbackParagraph(_('Expired'), tstyle_th),
+ Paragraph(_('Expired'), tstyle_th),
'',
- FontFallbackParagraph(_('Approval pending'), tstyle_th),
+ Paragraph(_('Approval pending'), tstyle_th),
'',
- FontFallbackParagraph(_('Purchased'), tstyle_th),
+ Paragraph(_('Purchased'), tstyle_th),
'', '', '', '', ''
],
[
@@ -421,14 +410,14 @@ class OverviewReport(Report):
for tup in items_by_category:
if tup[0]:
tdata.append([
- FontFallbackParagraph(str(tup[0]), tstyle_bold)
+ Paragraph(str(tup[0]), tstyle_bold)
])
for l, s in states:
tdata[-1].append(str(tup[0].num[l][0]))
tdata[-1].append(floatformat(tup[0].num[l][2 if net else 1], places))
for item in tup[1]:
tdata.append([
- FontFallbackParagraph(str(item), tstyle)
+ Paragraph(str(item), tstyle)
])
for l, s in states:
tdata[-1].append(str(item.num[l][0]))
@@ -436,7 +425,7 @@ class OverviewReport(Report):
if item.has_variations:
for var in item.all_variations:
tdata.append([
- FontFallbackParagraph(" " + str(var), tstyle)
+ Paragraph(" " + str(var), tstyle)
])
for l, s in states:
tdata[-1].append(str(var.num[l][0]))
@@ -523,7 +512,7 @@ class OrderTaxListReportPDF(Report):
def get_story(self, doc, form_data):
from reportlab.lib.units import mm
- from reportlab.platypus import Spacer, Table, TableStyle
+ from reportlab.platypus import Paragraph, Spacer, Table, TableStyle
headlinestyle = self.get_style()
headlinestyle.fontSize = 15
@@ -564,7 +553,7 @@ class OrderTaxListReportPDF(Report):
tstyledata.append(('SPAN', (5 + 2 * i, 0), (6 + 2 * i, 0)))
story = [
- FontFallbackParagraph(_('Orders by tax rate ({currency})').format(currency=self.event.currency), headlinestyle),
+ Paragraph(_('Orders by tax rate ({currency})').format(currency=self.event.currency), headlinestyle),
Spacer(1, 5 * mm)
]
tdata = [