mirror of
https://github.com/pretix/pretix.git
synced 2025-12-07 22:42:26 +00:00
Bump PyPDF to version 2 (#2755)
This commit is contained in:
@@ -57,7 +57,7 @@ from django.utils.html import conditional_escape
|
||||
from django.utils.timezone import now
|
||||
from django.utils.translation import gettext_lazy as _, pgettext
|
||||
from i18nfield.strings import LazyI18nString
|
||||
from PyPDF2 import PdfFileReader
|
||||
from PyPDF2 import PdfReader
|
||||
from pytz import timezone
|
||||
from reportlab.graphics import renderPDF
|
||||
from reportlab.graphics.barcode.qr import QrCodeWidget
|
||||
@@ -646,7 +646,7 @@ class Renderer:
|
||||
self.event = event
|
||||
if self.background_file:
|
||||
self.bg_bytes = self.background_file.read()
|
||||
self.bg_pdf = PdfFileReader(BytesIO(self.bg_bytes), strict=False)
|
||||
self.bg_pdf = PdfReader(BytesIO(self.bg_bytes), strict=False)
|
||||
else:
|
||||
self.bg_bytes = None
|
||||
self.bg_pdf = None
|
||||
@@ -861,7 +861,7 @@ class Renderer:
|
||||
canvas.restoreState()
|
||||
|
||||
def draw_page(self, canvas: Canvas, order: Order, op: OrderPosition, show_page=True, only_page=None):
|
||||
page_count = self.bg_pdf.getNumPages()
|
||||
page_count = len(self.bg_pdf.pages)
|
||||
|
||||
if not only_page and not show_page:
|
||||
raise ValueError("only_page=None and show_page=False cannot be combined")
|
||||
@@ -881,7 +881,7 @@ class Renderer:
|
||||
elif o['type'] == "poweredby":
|
||||
self._draw_poweredby(canvas, op, o)
|
||||
if self.bg_pdf:
|
||||
canvas.setPageSize((self.bg_pdf.getPage(page).mediaBox[2], self.bg_pdf.getPage(page).mediaBox[3]))
|
||||
canvas.setPageSize((self.bg_pdf.pages[0].mediabox[2], self.bg_pdf.pages[0].mediabox[3]))
|
||||
if show_page:
|
||||
canvas.showPage()
|
||||
|
||||
@@ -905,17 +905,17 @@ class Renderer:
|
||||
with open(os.path.join(d, 'out.pdf'), 'rb') as f:
|
||||
return BytesIO(f.read())
|
||||
else:
|
||||
from PyPDF2 import PdfFileReader, PdfFileWriter
|
||||
from PyPDF2 import PdfReader, PdfWriter
|
||||
buffer.seek(0)
|
||||
new_pdf = PdfFileReader(buffer)
|
||||
output = PdfFileWriter()
|
||||
new_pdf = PdfReader(buffer)
|
||||
output = PdfWriter()
|
||||
|
||||
for i, page in enumerate(new_pdf.pages):
|
||||
bg_page = copy.copy(self.bg_pdf.getPage(i))
|
||||
bg_page.mergePage(page)
|
||||
output.addPage(bg_page)
|
||||
bg_page = copy.copy(self.bg_pdf.pages[i])
|
||||
bg_page.merge_page(page)
|
||||
output.add_page(bg_page)
|
||||
|
||||
output.addMetadata({
|
||||
output.add_metadata({
|
||||
'/Title': str(title),
|
||||
'/Creator': 'pretix',
|
||||
})
|
||||
|
||||
@@ -57,6 +57,7 @@ from django_countries.fields import Country
|
||||
from hierarkey.models import GlobalSettingsBase, Hierarkey
|
||||
from i18nfield.forms import I18nFormField, I18nTextarea, I18nTextInput
|
||||
from i18nfield.strings import LazyI18nString
|
||||
from phonenumbers import PhoneNumber, parse
|
||||
from rest_framework import serializers
|
||||
|
||||
from pretix.api.serializers.fields import (
|
||||
@@ -3030,6 +3031,7 @@ settings_hierarkey.add_type(LazyI18nStringList,
|
||||
settings_hierarkey.add_type(RelativeDateWrapper,
|
||||
serialize=lambda rdw: rdw.to_string(),
|
||||
unserialize=lambda s: RelativeDateWrapper.from_string(s))
|
||||
settings_hierarkey.add_type(PhoneNumber, lambda pn: pn.as_international, lambda s: parse(s))
|
||||
|
||||
|
||||
@settings_hierarkey.set_global(cache_namespace='global')
|
||||
|
||||
@@ -39,8 +39,8 @@ from django.utils.crypto import get_random_string
|
||||
from django.utils.timezone import now
|
||||
from django.utils.translation import gettext as _
|
||||
from django.views.generic import TemplateView
|
||||
from PyPDF2 import PdfFileReader, PdfFileWriter
|
||||
from PyPDF2.utils import PdfReadError
|
||||
from PyPDF2 import PdfReader, PdfWriter
|
||||
from PyPDF2.errors import PdfReadError
|
||||
from reportlab.lib.units import mm
|
||||
|
||||
from pretix.base.i18n import language
|
||||
@@ -153,9 +153,9 @@ class BaseEditorView(EventPermissionRequiredMixin, TemplateView):
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
||||
if "emptybackground" in request.POST:
|
||||
p = PdfFileWriter()
|
||||
p = PdfWriter()
|
||||
try:
|
||||
p.addBlankPage(
|
||||
p.add_blank_page(
|
||||
width=float(request.POST.get('width')) * mm,
|
||||
height=float(request.POST.get('height')) * mm,
|
||||
)
|
||||
@@ -203,7 +203,7 @@ class BaseEditorView(EventPermissionRequiredMixin, TemplateView):
|
||||
|
||||
try:
|
||||
bg_bytes = c.file.read()
|
||||
PdfFileReader(BytesIO(bg_bytes), strict=False)
|
||||
PdfReader(BytesIO(bg_bytes), strict=False)
|
||||
except PdfReadError as e:
|
||||
return JsonResponse({
|
||||
"status": "error",
|
||||
|
||||
@@ -48,6 +48,7 @@ from django.db.models import Exists, OuterRef, Q
|
||||
from django.db.models.functions import Coalesce
|
||||
from django.utils.timezone import make_aware
|
||||
from django.utils.translation import gettext as _, gettext_lazy
|
||||
from PyPDF2 import Transformation
|
||||
from reportlab.lib import pagesizes
|
||||
from reportlab.lib.units import mm
|
||||
from reportlab.pdfgen import canvas
|
||||
@@ -157,7 +158,7 @@ OPTIONS = OrderedDict([
|
||||
|
||||
|
||||
def render_pdf(event, positions, opt):
|
||||
from PyPDF2 import PdfFileReader, PdfFileWriter
|
||||
from PyPDF2 import PdfReader, PdfWriter
|
||||
Renderer._register_fonts()
|
||||
|
||||
renderermap = {
|
||||
@@ -168,7 +169,7 @@ def render_pdf(event, positions, opt):
|
||||
default_renderer = _renderer(event, event.badge_layouts.get(default=True))
|
||||
except BadgeLayout.DoesNotExist:
|
||||
default_renderer = None
|
||||
output_pdf_writer = PdfFileWriter()
|
||||
output_pdf_writer = PdfWriter()
|
||||
|
||||
any = False
|
||||
npp = opt['cols'] * opt['rows']
|
||||
@@ -189,22 +190,19 @@ def render_pdf(event, positions, opt):
|
||||
p.showPage()
|
||||
p.save()
|
||||
buffer.seek(0)
|
||||
canvas_pdf_reader = PdfFileReader(buffer)
|
||||
empty_pdf_page = output_pdf_writer.addBlankPage(
|
||||
width=opt['pagesize'][0] if opt['pagesize'] else positions[0][1].bg_pdf.getPage(0).mediaBox[2],
|
||||
height=opt['pagesize'][1] if opt['pagesize'] else positions[0][1].bg_pdf.getPage(0).mediaBox[3],
|
||||
canvas_pdf_reader = PdfReader(buffer)
|
||||
empty_pdf_page = output_pdf_writer.add_blank_page(
|
||||
width=opt['pagesize'][0] if opt['pagesize'] else positions[0][1].bg_pdf.pages[0].mediabox[2],
|
||||
height=opt['pagesize'][1] if opt['pagesize'] else positions[0][1].bg_pdf.pages[0].mediabox[3],
|
||||
)
|
||||
for i, (op, r) in enumerate(positions):
|
||||
bg_page = copy.copy(r.bg_pdf.getPage(0))
|
||||
bg_page.trimBox = bg_page.mediaBox
|
||||
bg_page = copy.copy(r.bg_pdf.pages[0])
|
||||
bg_page.trimbox = bg_page.mediabox
|
||||
offsetx = opt['margins'][3] + (i % opt['cols']) * opt['offsets'][0]
|
||||
offsety = opt['margins'][2] + (opt['rows'] - 1 - i // opt['cols']) * opt['offsets'][1]
|
||||
empty_pdf_page.mergeTranslatedPage(
|
||||
bg_page,
|
||||
tx=offsetx,
|
||||
ty=offsety
|
||||
)
|
||||
empty_pdf_page.mergePage(canvas_pdf_reader.getPage(0))
|
||||
bg_page.add_transformation(Transformation().translate(offsetx, offsety))
|
||||
empty_pdf_page.merge_page(bg_page)
|
||||
empty_pdf_page.merge_page(canvas_pdf_reader.pages[0])
|
||||
|
||||
pagebuffer = []
|
||||
outbuffer = BytesIO()
|
||||
@@ -221,7 +219,7 @@ def render_pdf(event, positions, opt):
|
||||
if pagebuffer:
|
||||
render_page(pagebuffer)
|
||||
|
||||
output_pdf_writer.addMetadata({
|
||||
output_pdf_writer.add_metadata({
|
||||
'/Title': 'Badges',
|
||||
'/Creator': 'pretix',
|
||||
})
|
||||
|
||||
@@ -43,7 +43,7 @@ from django.db.models import Q
|
||||
from django.db.models.functions import Coalesce
|
||||
from django.utils.timezone import make_aware
|
||||
from django.utils.translation import gettext as _, gettext_lazy
|
||||
from PyPDF2.merger import PdfFileMerger
|
||||
from PyPDF2 import PdfMerger
|
||||
|
||||
from pretix.base.exporter import BaseExporter
|
||||
from pretix.base.i18n import language
|
||||
@@ -105,7 +105,7 @@ class AllTicketsPDF(BaseExporter):
|
||||
return d
|
||||
|
||||
def render(self, form_data):
|
||||
merger = PdfFileMerger()
|
||||
merger = PdfMerger()
|
||||
qs = OrderPosition.objects.filter(
|
||||
order__event__in=self.events
|
||||
).prefetch_related(
|
||||
|
||||
@@ -44,7 +44,7 @@ from django.http import HttpRequest
|
||||
from django.template.loader import get_template
|
||||
from django.utils.functional import cached_property
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from PyPDF2 import PdfFileMerger
|
||||
from PyPDF2 import PdfMerger
|
||||
|
||||
from pretix.base.i18n import language
|
||||
from pretix.base.models import Order, OrderPosition
|
||||
@@ -112,7 +112,7 @@ class PdfTicketOutput(BaseTicketOutput):
|
||||
return renderer.render_background(buffer, _('Ticket'))
|
||||
|
||||
def generate_order(self, order: Order):
|
||||
merger = PdfFileMerger()
|
||||
merger = PdfMerger()
|
||||
with language(order.locale, self.event.settings.region):
|
||||
for op in order.positions_with_tickets:
|
||||
layout = override_layout.send_chained(
|
||||
|
||||
@@ -211,7 +211,7 @@ setup(
|
||||
'psycopg2-binary',
|
||||
'pycountry',
|
||||
'pycparser==2.21',
|
||||
'PyPDF2==1.27.9',
|
||||
'PyPDF2==2.9.*',
|
||||
'python-bidi==0.4.*', # Support for Arabic in reportlab
|
||||
'python-dateutil==2.8.*',
|
||||
'python-u2flib-server==4.*',
|
||||
|
||||
@@ -39,7 +39,7 @@ from io import BytesIO
|
||||
import pytest
|
||||
from django.utils.timezone import now
|
||||
from django_scopes import scope
|
||||
from PyPDF2 import PdfFileReader
|
||||
from PyPDF2 import PdfReader
|
||||
|
||||
from pretix.base.models import (
|
||||
Event, Item, ItemVariation, Order, OrderPosition, Organizer,
|
||||
@@ -100,8 +100,8 @@ def test_generate_pdf(env):
|
||||
'include_pending': True
|
||||
})
|
||||
assert ftype == 'application/pdf'
|
||||
pdf = PdfFileReader(BytesIO(buf))
|
||||
assert pdf.numPages == 2
|
||||
pdf = PdfReader(BytesIO(buf))
|
||||
assert len(pdf.pages) == 2
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
@@ -115,5 +115,5 @@ def test_generate_pdf_multi(env):
|
||||
'include_pending': True
|
||||
})
|
||||
assert ftype == 'application/pdf'
|
||||
pdf = PdfFileReader(BytesIO(buf))
|
||||
assert pdf.numPages == 1
|
||||
pdf = PdfReader(BytesIO(buf))
|
||||
assert len(pdf.pages) == 1
|
||||
|
||||
@@ -26,7 +26,7 @@ from io import BytesIO
|
||||
import pytest
|
||||
from django.utils.timezone import now
|
||||
from django_scopes import scope
|
||||
from PyPDF2 import PdfFileReader
|
||||
from PyPDF2 import PdfReader
|
||||
|
||||
from pretix.base.models import (
|
||||
Event, Item, ItemVariation, Order, OrderPosition, Organizer,
|
||||
@@ -70,5 +70,5 @@ def test_generate_pdf(env0):
|
||||
o = PdfTicketOutput(event)
|
||||
fname, ftype, buf = o.generate(order.positions.first())
|
||||
assert ftype == 'application/pdf'
|
||||
pdf = PdfFileReader(BytesIO(buf))
|
||||
assert pdf.numPages == 1
|
||||
pdf = PdfReader(BytesIO(buf))
|
||||
assert len(pdf.pages) == 1
|
||||
|
||||
Reference in New Issue
Block a user