caterium-app/ops/pdf/build-showcase.py

61 lines
4.1 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""Overview plus unchanged PDFs exported by the application. Fictional order data."""
from pathlib import Path
import json
from reportlab.pdfgen import canvas
from reportlab.lib.colors import HexColor
from reportlab.lib.utils import ImageReader
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from pypdf import PdfReader, PdfWriter
root=Path(__file__).resolve().parents[3]/'caterium-pdf-20260918'
audit=root/'tmp'/'pdfs'/'after'
output=root/'output'/'pdf';output.mkdir(parents=True,exist_ok=True)
pdfmetrics.registerFont(TTFont('Body','C:/Windows/Fonts/arial.ttf'))
pdfmetrics.registerFont(TTFont('Title','C:/Windows/Fonts/georgia.ttf'))
names=['Минимализм','Luxury Dark','Editorial Magazine','Warm Sun','Bento Cards','Event Story','Food First','Personal Letter','Event Ticket','Solar Experience','Ночной минимализм','Изумрудная классика','Изумрудный акцент','Кремовая классика','Неоновое меню','Изумрудные круги','Тёмный чек-лист','Гастро-витрина','Изумруд и золото','Премиум тёмный','Премиум изумрудный']
rows=json.loads((audit/'report.json').read_text(encoding='utf8'))
overview=root/'tmp'/'pdfs'/'overview.pdf'
W,H=595.28,841.89
c=canvas.Canvas(str(overview),pagesize=(W,H))
c.setTitle('Caterium - обновлённые предложения клиенту')
def background():
c.setFillColor(HexColor('#faf7ef'));c.rect(0,0,W,H,fill=1,stroke=0)
c.setFillColor(HexColor('#20362d'))
def text(x,y,value,size=12,font='Body'):
c.setFont(font,size);c.drawString(x,y,value)
background()
text(44,H-66,'Caterium',17)
text(44,H-150,'Предложения,',38,'Title')
text(44,H-198,'которые хочется',38,'Title')
text(44,H-246,'отправить клиенту',38,'Title')
text(44,H-304,'Обзор 21 стиля и три полных образца',15)
c.setStrokeColor(HexColor('#b19464'));c.line(44,H-340,W-44,H-340)
text(44,H-380,'Что изменилось',20,'Title')
for i,line in enumerate(['Вернули композиции первых обложек и развели стили.', 'Выровняли поля, цены и карточки меню.', 'Сохранили полные названия, состав, вес и расчёт стоимости.', 'Шрифты загружаются вместе с приложением.', 'Предпросмотр и скачанный PDF используют одни страницы.']):
text(44,H-418-i*26,line,11)
text(44,190,'В этом файле',20,'Title')
text(44,158,'Стр. 2-4: обзор всех вариантов оформления.',11)
starts={};page_no=5
selected=['light','editorial-grid','premium-dark']
for id in selected:
i=next(i for i,r in enumerate(rows) if r['id']==id);count=rows[i]['pages'];starts[id]=page_no
text(44,130-selected.index(id)*24,f'Стр. {page_no}-{page_no+count-1}: {names[i]}.',11);page_no+=count
text(44,39,'18 сентября 2026 · Учебный заказ, не клиентская заявка',9)
c.showPage()
for start in range(0,len(rows),9):
background();text(34,H-44,'Коллекция оформлений',25,'Title');text(34,H-69,f'{start+1}-{min(start+9,len(rows))} из 21',11)
for i,row in enumerate(rows[start:start+9]):
col=i%3;line=i//3;x=34+col*178;y=H-106-line*235
c.drawImage(str(audit/(row['id']+'-1.png')),x,y-209,width=148,height=209)
text(x,y-224,f'{start+i+1:02d} {names[start+i]}',8.4)
text(34,27,'Полные примеры далее. Любой стиль доступен в приложении.',9)
c.showPage()
c.save()
writer=PdfWriter();writer.append(PdfReader(str(overview)))
for id in selected:writer.append(PdfReader(str(audit/(id+'.pdf'))))
writer.add_metadata({'/Title':'Caterium - коллекция предложений клиенту','/Author':'Caterium'})
target=output/'Caterium-предложения-образцы.pdf'
writer.write(str(target))
print(target, 'pages:',len(writer.pages))