/** * 조코딩 HTML 슬라이드를 PPTX로 변환하는 스크립트 (깨끗한 버전) * Skills 폴더의 html2pptx.js 기술을 사용 */ const html2pptx = require('./.claude/skills/pptx-skill/scripts/html2pptx.js'); const pptxgen = require('pptxgenjs'); const fs = require('fs'); async function convertJoCodingSlides() { console.log('🎬 조코딩 프레젠테이션 변환을 시작합니다...'); console.log('📊 총 12장의 슬라이드를 변환합니다.'); const pres = new pptxgen(); pres.layout = 'LAYOUT_16x9'; pres.author = '조코딩 프레젠테이션'; pres.title = '조코딩(조웅현) - 국내 1위 코딩 교육 유튜버'; let successCount = 0; let errorCount = 0; // 12장의 슬라이드 변환 for (let i = 1; i <= 12; i++) { const slideNum = i.toString().padStart(2, '0'); const htmlFile = `slides/jocoding-slide-${slideNum}.html`; if (!fs.existsSync(htmlFile)) { console.warn(`⚠️ 파일 없음: ${htmlFile}`); continue; } console.log(`🔄 변환 중: 슬라이드 ${i}/12 (${htmlFile})`); try { // Skills의 html2pptx 기술 사용 const { slide, placeholders } = await html2pptx(htmlFile, pres); successCount++; console.log(`✅ 완료: 슬라이드 ${i}`); if (placeholders && placeholders.length > 0) { console.log(`📍 플레이스홀더 ${placeholders.length}개 발견`); } } catch (error) { errorCount++; console.error(`❌ 실패: 슬라이드 ${i} - ${error.message}`); // 실패시 기본 슬라이드 생성 const errorSlide = pres.addSlide(); errorSlide.addText(`슬라이드 ${i}`, { x: 1, y: 2, w: 8, h: 1, fontSize: 28, fontFace: 'Malgun Gothic', color: '333333', bold: true, align: 'center' }); errorSlide.addText('변환 중 오류 발생', { x: 1, y: 3, w: 8, h: 1, fontSize: 16, fontFace: 'Malgun Gothic', color: '666666', align: 'center' }); } } // PPTX 파일 저장 const fileName = '조코딩_프레젠테이션_12장_최종.pptx'; await pres.writeFile({ fileName }); console.log(`\n🎉 변환 완료!`); console.log(`📄 파일: ${fileName}`); console.log(`📊 결과: ${pres.slides.length}개 슬라이드 (성공: ${successCount}, 오류: ${errorCount})`); if (successCount === 12) { console.log(`🌟 모든 슬라이드가 성공적으로 변환되었습니다!`); } } // 실행 convertJoCodingSlides() .then(() => { console.log('✨ 모든 작업이 완료되었습니다.'); }) .catch(error => { console.error('💥 변환 중 오류:', error.message); process.exit(1); });