import sys, json from pathlib import Path import pypdfium2 as pdfium from PIL import Image, ImageDraw, ImageFont base=Path(__file__).resolve().parents[3]/'caterium-pdf-20260918'/'tmp'/'pdfs' for phase in sys.argv[1:] or ['after']: root=base/phase rows=json.loads((root/'report.json').read_text(encoding='utf8')) covers=[]; pages=[] for row in rows: doc=pdfium.PdfDocument(str(root/(row['id']+'.pdf'))) for n in range(len(doc)): im=doc[n].render(scale=1.25).to_pil().convert('RGB') im.save(root/f"{row['id']}-{n+1}.png") pages.append((row['id']+f' / {n+1}',im)) if n==0: covers.append(pages[-1]) def sheet(entries,name,cols=4): tw,th=250,380 out=Image.new('RGB',(tw*cols,th*((len(entries)+cols-1)//cols)),'#dce1e5') d=ImageDraw.Draw(out) for i,(label,im) in enumerate(entries): tile=im.copy(); tile.thumbnail((tw-12,th-32)) x=(i%cols)*tw; y=(i//cols)*th out.paste(tile,(x+6,y+25));d.text((x+6,y+6),label,fill='black') out.save(root/name) sheet(covers,'covers.png') for start in range(0,len(pages),12):sheet(pages[start:start+12],f'pages-{start//12+1}.png') print(phase,len(pages),'pages rendered')