Files
sam-hotfix/research/flow-chart/convert-slides.js
김보곤 d86b5851d0 chore: 프로젝트 설정 및 문서 파일 추가
- .agent/, .claude/, .vscode/ 설정 파일
- design/ 디자인 리소스
- reports/, research/ 분석 문서
- testcase/ 테스트 케이스 문서
- db_sync_chandj.bat, sam.code-workspace

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 19:51:43 +09:00

93 lines
2.7 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 로컬 node_modules 경로 추가
const path = require('path');
module.paths.unshift(path.join(__dirname, 'node_modules'));
const PptxGenJS = require('pptxgenjs');
const html2pptx = require('C:/Users/aweso/.claude/skills/pptx-skill/scripts/html2pptx.js');
const fs = require('fs');
async function main() {
const pres = new PptxGenJS();
// 16:9 비율 설정 (720pt × 405pt = 10" × 5.625")
// LAYOUT_WIDE는 13.3" × 7.5"이므로 커스텀 레이아웃 사용
pres.defineLayout({ name: 'CUSTOM_16x9', width: 10, height: 5.625 });
pres.layout = 'CUSTOM_16x9';
// 프레젠테이션 메타데이터
pres.title = 'SAM_ERP Storyboard';
pres.subject = 'SAM ERP 스토리보드 D1.2';
pres.author = 'CODE-BRIDGE X';
pres.company = 'SAM';
const slidesDir = path.join(__dirname, 'slides');
// 슬라이드 파일 목록 (순서대로)
const slideFiles = [
'slide-01-cover.html',
'slide-02-history.html',
'slide-03-menu.html',
'slide-04-section-common.html',
'slide-05-interaction.html',
'slide-06-responsive.html',
'slide-07-section-operation.html',
'slide-08-flowchart.html',
'slide-09-login.html'
];
let successCount = 0;
let failCount = 0;
const errors = [];
console.log('SAM_ERP Storyboard PPTX 변환 시작...\n');
for (const slideFile of slideFiles) {
const slidePath = path.join(slidesDir, slideFile);
if (!fs.existsSync(slidePath)) {
console.log(`⚠️ ${slideFile}: 파일 없음`);
failCount++;
errors.push({ file: slideFile, error: '파일 없음' });
continue;
}
try {
console.log(`🔄 ${slideFile} 변환 중...`);
await html2pptx(slidePath, pres);
console.log(`${slideFile} 완료`);
successCount++;
} catch (error) {
console.log(`${slideFile}: ${error.message}`);
failCount++;
errors.push({ file: slideFile, error: error.message });
}
}
console.log('\n========================================');
console.log(`변환 결과: ${successCount}개 성공, ${failCount}개 실패`);
if (errors.length > 0) {
console.log('\n실패한 슬라이드:');
errors.forEach(({ file, error }) => {
console.log(` - ${file}: ${error.substring(0, 100)}${error.length > 100 ? '...' : ''}`);
});
}
// PPTX 저장
const outputDir = path.join(__dirname, 'pptx');
if (!fs.existsSync(outputDir)) {
fs.mkdirSync(outputDir, { recursive: true });
}
const outputPath = path.join(outputDir, 'SAM_ERP_Storyboard_v2.pptx');
try {
await pres.writeFile({ fileName: outputPath });
console.log(`\n📁 PPTX 저장 완료: ${outputPath}`);
} catch (error) {
console.error(`\n❌ PPTX 저장 실패: ${error.message}`);
}
}
main().catch(console.error);