UNPKG

@slidef/cli

Version:

CLI tool for converting PDF slides to web-viewable format

55 lines 2.51 kB
import * as path from 'path'; import chalk from 'chalk'; import ora from 'ora'; import { convertPdfToImages } from '../utils/pdf.js'; import { saveMetadata, fileExists, getBaseName } from '../utils/file.js'; export async function convertCommand(pdfFile, options) { const spinner = ora('Starting PDF conversion...').start(); try { // Check if PDF file exists const pdfPath = path.resolve(pdfFile); if (!(await fileExists(pdfPath))) { spinner.fail(chalk.red(`PDF file not found: ${pdfFile}`)); process.exit(1); } // Determine slide name const slideName = options.name || getBaseName(pdfFile); const outputDir = path.resolve('slides', slideName); const imagesDir = path.join(outputDir, 'images'); spinner.text = `Converting ${chalk.cyan(pdfFile)} to images...`; // Parse scale option const scale = options.scale ? parseFloat(options.scale) : 2; if (isNaN(scale) || scale <= 0) { spinner.fail(chalk.red('Scale must be a positive number')); process.exit(1); } // Convert PDF to images // Pass relative path to work around pdf-to-png-converter path handling const relativeImagesDir = path.relative(process.cwd(), imagesDir); const pageCount = await convertPdfToImages(pdfPath, relativeImagesDir, scale); spinner.text = 'Saving metadata...'; // Create metadata const metadata = { name: slideName, filename: path.basename(pdfFile), pageCount, createdAt: new Date().toISOString(), }; // Save metadata await saveMetadata(outputDir, metadata); spinner.succeed(chalk.green(`Successfully converted ${chalk.cyan(pageCount)} pages to ${chalk.cyan(outputDir)}`)); console.log(chalk.gray('\nOutput structure:')); console.log(chalk.gray(` ${outputDir}/`)); console.log(chalk.gray(` ├── images/`)); console.log(chalk.gray(` │ ├── slide-001.png`)); console.log(chalk.gray(` │ ├── slide-002.png`)); console.log(chalk.gray(` │ └── ...`)); console.log(chalk.gray(` └── metadata.json`)); } catch (error) { spinner.fail(chalk.red('Conversion failed')); console.error(chalk.red('\nError:'), error instanceof Error ? error.message : error); process.exit(1); } } //# sourceMappingURL=convert.js.map