From e52f7ea5d99d94b0df452335fae5900df8885b7f Mon Sep 17 00:00:00 2001 From: Vlad Date: Sun, 11 May 2025 02:04:27 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B5=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=B3=D0=B5=D0=BD=D0=B5=D1=80=D0=B0=D1=86=D0=B8=D1=8F?= =?UTF-8?q?=20PDF=20=D0=BE=D1=82=D1=87=D0=B5=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Добавлен OverlayCanvas для отрисовки штампа поверх контента - Изменено позиционирование штампа - Добавлены необходимые импорты для работы с Canvas --- app.py | 48 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/app.py b/app.py index bc44ffe..634ea47 100644 --- a/app.py +++ b/app.py @@ -20,7 +20,9 @@ from reportlab.lib import colors from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer, Image from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.units import inch, mm +from reportlab.pdfgen.canvas import Canvas from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_RIGHT +from reportlab.platypus import Frame import sys import logging @@ -150,6 +152,34 @@ dictConfig({ # Создаем логгер для приложения logger = logging.getLogger("app") +class OverlayCanvas(Canvas): + def __init__(self, *args, **kwargs): + Canvas.__init__(self, *args, **kwargs) + self._saved_page_states = [] + + def showPage(self): + self._saved_page_states.append(dict(self.__dict__)) + self._startPage() + + def save(self): + for state in self._saved_page_states: + self.__dict__.update(state) + self.draw_overlay() # теперь рисуем поверх + Canvas.showPage(self) + Canvas.save(self) + + def draw_overlay(self): + stamp_path = os.path.join(app_path, 'static', 'stamp256.png') + if os.path.exists(stamp_path): + self.drawImage( + stamp_path, + x=400, # настроить по ширине + y=400, # настроить по высоте + width=100, + height=100, + mask='auto' + ) + @app.after_request def after_request(response): if request.cookies.get('user_id', None) == None: @@ -1107,6 +1137,19 @@ def generate_pdf_report(vin): elements.append(Spacer(1, 15*mm)) + # Добавляем штамп поверх таблицы + # stamp_path = os.path.join(app_path, 'static', 'stamp256.png') + # if os.path.exists(stamp_path): + # stamp_img = Image(stamp_path, width=100, height=100) + # stamp_img.hAlign = 'RIGHT' + # stamp_img.vAlign = 'TOP' + # # Размещаем штамп поверх таблицы + # elements.append(stamp_img) + + # elements.append(Spacer(1, 15*mm)) + + + # Дисклеймер disclaimer_text = """ Disclaimer: This report provides information about salvage or junk vehicles; damage from hail, flood or fire; @@ -1120,10 +1163,11 @@ def generate_pdf_report(vin): elements.append(Spacer(1, 15*mm)) elements.append(Paragraph(f"© {current_year} SALVAGEDB.COM - All Rights Reserved", styles['SalvageDBFooter'])) elements.append(Paragraph("Visit SALVAGEDB.COM for more information about vehicle history", styles['SalvageDBFooter'])) - elements.append(Paragraph("This report is provided as is without any guarantees or warranty.", styles['Disclaimer'])) + elements.append(Paragraph('"This report is provided as is without any guarantees or warranty."', styles['Disclaimer'])) # Строим PDF документ - doc.build(elements) + # doc.build(elements, onFirstPage=add_stamp_overlay, onLaterPages=add_stamp_overlay) + doc.build(elements, canvasmaker=OverlayCanvas) # Получаем содержимое буфера pdf_data = buffer.getvalue()