couple-repo/work_chinese/PPT04122025/create_alimentari.js
StillHammer 1d1d42b8d9 Add PowerPoint generation improvements for Alimentari Piccolo
- Fix html2pptx Windows file path handling (file:/// URLs)
- Fix Italian flag diagonal (remove CSS rotation, use positioned rectangles)
- Add Chinese character background watermark (意)
- Add geometric pattern attempt (Art Deco style)
- Fix validation errors (text positioning, margins)
- Add backup slides directory
- Add build scripts and image resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 11:21:54 +08:00

108 lines
4.2 KiB
JavaScript

const pptxgen = require('pptxgenjs');
const path = require('path');
const html2pptx = require('../../.claude/skills/pptx/scripts/html2pptx.js');
async function createPresentation() {
console.log('🍝 Création présentation Alimentari Piccolo (Design LUXE)...\n');
const pptx = new pptxgen();
pptx.layout = 'LAYOUT_16x9';
pptx.author = 'Alexis - Xiezuo Course';
pptx.title = 'Alimentari Piccolo - 意大利餐吧评价';
pptx.subject = '餐厅评价作业';
try {
// Slide 1: Title
console.log('📄 Slide 1: 封面 LUXE...');
await html2pptx(
path.join(__dirname, 'slides/slide1_title.html'),
pptx,
{ tmpDir: path.join(__dirname, '_build') }
);
// Slide 2: Location
console.log('📄 Slide 2: 位置 (hero photo + overlay)...');
await html2pptx(
path.join(__dirname, 'slides/slide2_location.html'),
pptx,
{ tmpDir: path.join(__dirname, '_build') }
);
// Slide 3: Piadina
console.log('📄 Slide 3: Piadina (asymétrique)...');
await html2pptx(
path.join(__dirname, 'slides/slide3_piadina.html'),
pptx,
{ tmpDir: path.join(__dirname, '_build') }
);
// Slide 4: Croquettes
console.log('📄 Slide 4: Croquettes (asymétrique inversé)...');
await html2pptx(
path.join(__dirname, 'slides/slide4_croquettes.html'),
pptx,
{ tmpDir: path.join(__dirname, '_build') }
);
// Slide 5: Ambiance
console.log('📄 Slide 5: Ambiance intérieure + évaluation...');
await html2pptx(
path.join(__dirname, 'slides/slide5_ambiance.html'),
pptx,
{ tmpDir: path.join(__dirname, '_build') }
);
// Slide 6: Menu
console.log('📄 Slide 6: Menu (carte CN uniquement)...');
await html2pptx(
path.join(__dirname, 'slides/slide6_menu.html'),
pptx,
{ tmpDir: path.join(__dirname, '_build') }
);
// Slide 7: Credits
console.log('📄 Slide 7: Crédits (noms membres)...');
await html2pptx(
path.join(__dirname, 'slides/slide7_credits.html'),
pptx,
{ tmpDir: path.join(__dirname, '_build') }
);
// Save
const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, -5);
const outputFile = `Alimentari_Piccolo_${timestamp}.pptx`;
await pptx.writeFile({ fileName: path.join(__dirname, outputFile) });
console.log('\n✅ 演示文稿创建成功!');
console.log(`📁 文件名: ${outputFile}`);
console.log('📍 位置: work_chinese/PPT04122025/');
console.log('\n🎨 Design LUXE & CLASSE :');
console.log(' ✓ Fond noir #1A1A1A (ultra-premium)');
console.log(' ✓ Or riche #D4AF37 (signature)');
console.log(' ✓ Vert forêt #2D5016 + Bordeaux #8B1A1A');
console.log(' ✓ Barre dorée verticale SIGNATURE');
console.log(' ✓ Pattern géométrique italien');
console.log(' ✓ Drapeau diagonal 3 bandes (rotation globale)');
console.log(' ✓ TOUTES les images utilisées');
console.log(' ✓ Design asymétrique luxueux');
console.log(' ✓ Texte 100% chinois/italien (zéro anglais)');
console.log(' ✓ 7 slides premium');
console.log('\n📝 Contenu :');
console.log(' 1. Titre LUXE avec pattern géométrique');
console.log(' 2. Hero photo extérieur + overlay info (位置/评分/价格)');
console.log(' 3. Piadina (grande photo gauche, info droite)');
console.log(' 4. Croquettes (inversé : info gauche, photo droite)');
console.log(' 5. Ambiance intérieure (2 photos) + évaluation');
console.log(' 6. Menu (carte CN uniquement, centrée)');
console.log(' 7. Crédits (李知珉、闵智铉、亓昊天)');
} catch (error) {
console.error('\n❌ 错误:', error.message);
if (error.stack) {
console.error('\nStack:', error.stack);
}
}
}
createPresentation();