docs: add procurement system presentation
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
import { createRequire } from "module";
|
||||
import { pathToFileURL } from "url";
|
||||
|
||||
const require = createRequire(import.meta.url);
|
||||
const repoRoot = path.resolve(path.dirname(new URL(import.meta.url).pathname.slice(1)), "..", "..");
|
||||
const toolRoot = path.join(repoRoot, ".local", "ppt-tools", "node_modules");
|
||||
const canvasModule = require(path.join(toolRoot, "@napi-rs", "canvas"));
|
||||
|
||||
globalThis.DOMMatrix = canvasModule.DOMMatrix;
|
||||
globalThis.ImageData = canvasModule.ImageData;
|
||||
globalThis.Path2D = canvasModule.Path2D;
|
||||
|
||||
const pdfjsPath = path.join(toolRoot, "pdfjs-dist", "legacy", "build", "pdf.mjs");
|
||||
const pdfjs = await import(pathToFileURL(pdfjsPath).href);
|
||||
|
||||
const [pdfArgument, outputArgument] = process.argv.slice(2);
|
||||
if (!pdfArgument || !outputArgument) {
|
||||
throw new Error("Usage: node render-pdf.mjs <input.pdf> <output-dir>");
|
||||
}
|
||||
|
||||
const pdfPath = path.resolve(pdfArgument);
|
||||
const outputDir = path.resolve(outputArgument);
|
||||
fs.mkdirSync(outputDir, { recursive: true });
|
||||
|
||||
const data = new Uint8Array(fs.readFileSync(pdfPath));
|
||||
const document = await pdfjs.getDocument({
|
||||
data,
|
||||
disableFontFace: true,
|
||||
isEvalSupported: false,
|
||||
useSystemFonts: true,
|
||||
}).promise;
|
||||
|
||||
for (let pageNumber = 1; pageNumber <= document.numPages; pageNumber += 1) {
|
||||
const page = await document.getPage(pageNumber);
|
||||
const baseViewport = page.getViewport({ scale: 1 });
|
||||
const scale = 1600 / baseViewport.width;
|
||||
const viewport = page.getViewport({ scale });
|
||||
const canvas = canvasModule.createCanvas(
|
||||
Math.round(viewport.width),
|
||||
Math.round(viewport.height),
|
||||
);
|
||||
const context = canvas.getContext("2d");
|
||||
await page.render({ canvasContext: context, viewport }).promise;
|
||||
const outputPath = path.join(outputDir, `slide${pageNumber}.png`);
|
||||
fs.writeFileSync(outputPath, canvas.toBuffer("image/png"));
|
||||
}
|
||||
|
||||
console.log(`Rendered ${document.numPages} pages to ${outputDir}`);
|
||||
Reference in New Issue
Block a user