@slidef/cli
Version:
CLI tool for converting PDF slides to web-viewable format
55 lines • 2.51 kB
JavaScript
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