Loads the shared product sheet and lays the products out as 103 × 73 mm cards on A3 or A4, ready for printing.
Access-Control-Allow-Origin. In the S3 console, open the bucket → Permissions → Cross-origin resource sharing (CORS) and paste:
[
{
"AllowedHeaders": ["*"],
"AllowedMethods": ["GET", "HEAD"],
"AllowedOrigins": ["*"],
"ExposeHeaders": []
}
]
Save and retry. Preview already works because plain <img> tags don't need CORS — only canvas reads do.
Pick which CSV column feeds each field on the card. Multi-line text in allergens: use a quoted cell with literal line breaks, or write “\n” between lines.
Adds or removes rows in the Google Sheet itself — sign in required. New cards are inserted at the end of their section (legend) with the id following the section’s pattern, 品項 mirrors mamalili品名, and the layout starts from the shared template.
Pick a card, then drag elements or type exact x / y / size. Use Edit scope to change just this card, or the shared template (t0) — template edits save only to the t0 row and never overwrite a card’s own saved layout (cards without one follow the template). Signed in: every layout edit saves to the sheet’s metaData column (shared with everyone). Not signed in: edits stay in this browser only and the 15s refresh won’t clobber them.
Fonts cover Traditional Chinese. Each distinct font on a sheet is embedded in the PDF (several MB each) — keep the variety small to keep PDFs fast.
Editing a field updates this card and, when signed in, writes that cell back to the Google Sheet.
This is the actual generated PDF — what you see is exactly what “Generate PDF” downloads.