Fixé avec le dossier KissMetrics du 24/08 et validé par l'opérateur : « on peut se souvenir de ce format pour les communications avec KM et futurs prospects/clients ». Il ne servira à rien s'il faut le reconstituer à chaque fois — d'où un gabarit, un script, et les raisons écrites. LE TEST DU GABARIT : la lettre du 24/08 s'en régénère à l'identique, au mot près, vérifié par diff du texte extrait. Un gabarit qui ne reproduit pas son propre exemple n'est pas un gabarit. LES CHOIX, ET POURQUOI. Charter pour le texte — dessinée par Matthew Carter pour tenir le petit corps là où d'autres se délitent — et Optima pour les titres. Les deux incorporées au PDF : le rendu est le même chez le destinataire. Chiffres elzéviriens, pour que les montants s'alignent au lieu de faire des bâtons. Deux encadrés, deux usages : le gris porte une question, le rouge sourd ce qui doit être lu en diagonale — UN SEUL par lettre, deux et plus rien ne ressort. Les tableaux portent un <thead>, sans quoi ils perdent leur en-tête en se coupant entre deux pages. LE PIÈGE, consigné parce qu'il coûte une heure à qui le redécouvre : weasyprint NE SAIT PAS rendre Apple Color Emoji. C'est un format bitmap sbix qu'il ignore, et les trois emblèmes 🏹💻🪽 sortent en carrés vides — sans erreur, sans avertissement. D'où correspondance/emblemes/*.png, rendus une fois pour toutes par test/emoji2png.ts, qui passe par Chromium : lui lit la police système. Les PNG sont incorporés en base64 À LA GÉNÉRATION, pas dans le gabarit : un gabarit de 400 Ko dont 97 % de charabia ne se relit pas. Le PDF produit reste autonome. Les trois emblèmes viennent du site — « Gabriel 🪽 Radureau, pour 🏹 réussir vos projets 💻 ». L'arc et l'ange sont dans le nom lui-même. lettre.py proteste au-delà de deux pages : une lettre d'affaires qui déborde ne se lit pas, et la tentation est alors de rétrécir la typographie plutôt que le propos. C'est le propos qu'il faut resserrer. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
17 lines
760 B
TypeScript
17 lines
760 B
TypeScript
// Rend un emoji en PNG transparent via Chromium, qui sait lire Apple Color
|
|
// Emoji là où weasyprint échoue (format bitmap sbix, non géré).
|
|
import { chromium } from "playwright";
|
|
const [outDir, ...emojis] = Deno.args;
|
|
const b = await chromium.launch({ headless: true });
|
|
const p = await (await b.newContext({ deviceScaleFactor: 8 })).newPage();
|
|
for (const [i, e] of emojis.entries()) {
|
|
await p.setContent(
|
|
`<body style="margin:0"><span id="g" style="font-family:'Apple Color Emoji';` +
|
|
`font-size:64px;line-height:1;display:inline-block">${e}</span></body>`);
|
|
const el = p.locator("#g");
|
|
const f = `${outDir}/emoji-${i + 1}.png`;
|
|
await el.screenshot({ path: f, omitBackground: true });
|
|
console.log(` ${e} -> ${f}`);
|
|
}
|
|
await b.close();
|