From ae1d619ab23a517f04a70b60b370da346faf6253 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jim=20Liu=20=E5=AE=9D=E7=8E=89?= Date: Thu, 9 Apr 2026 10:00:29 -0500 Subject: [PATCH] fix(baoyu-slide-deck): add pptxgenjs dependency and detect image format by magic bytes --- bun.lockb | Bin 124512 -> 131320 bytes package.json | 3 ++- .../baoyu-slide-deck/scripts/merge-to-pdf.ts | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/bun.lockb b/bun.lockb index 4dcb909971a6d8ac064ea0de28a8fc37098ae12e..0741acf8e049c0d43f3a176432a5951288caf241 100755 GIT binary patch delta 27065 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 diff --git a/package.json b/package.json index 15e026f..46e0cf4 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "tsx": "^4.20.5" }, "dependencies": { - "pdf-lib": "^1.17.1" + "pdf-lib": "^1.17.1", + "pptxgenjs": "^4.0.1" } } diff --git a/skills/baoyu-slide-deck/scripts/merge-to-pdf.ts b/skills/baoyu-slide-deck/scripts/merge-to-pdf.ts index 6ba342c..5edccdc 100644 --- a/skills/baoyu-slide-deck/scripts/merge-to-pdf.ts +++ b/skills/baoyu-slide-deck/scripts/merge-to-pdf.ts @@ -73,8 +73,8 @@ async function createPdf(slides: SlideInfo[], outputPath: string) { for (const slide of slides) { const imageData = readFileSync(slide.path); - const ext = slide.filename.toLowerCase(); - const image = ext.endsWith(".png") + const isPng = imageData[0] === 0x89 && imageData[1] === 0x50 && imageData[2] === 0x4e && imageData[3] === 0x47; + const image = isPng ? await pdfDoc.embedPng(imageData) : await pdfDoc.embedJpg(imageData);