@grunt-io/pptxgen
v0.1.5
Published
PptxGenJS helpers for inserting Grunt-editable PowerPoint objects
Readme
grunt-io - pptxgen
PptxGenJS helpers for inserting Grunt-editable PowerPoint objects.
Installation
npm install @grunt-io/pptxgen pptxgenjsLicense
Proprietary.
Example
import PptxGenJS from "pptxgenjs";
import { GruntPptxGen } from "@grunt-io/pptxgen";
const pptx = new PptxGenJS();
const slide = pptx.addSlide();
const grunt = new GruntPptxGen(pptx);
grunt.addGruntObject(slide, {
position: { x: 1, y: 1 },
svg: "<svg xmlns=\"http://www.w3.org/2000/svg\">...</svg>",
pageObject: "<base64 from Grunt serializer>",
dataService: "<base64 from Grunt serializer>",
resources: "<base64 from Grunt serializer>",
versionStamp: "2026.2-r13-0",
webAssetId: "<optional asset id>",
webAssetCommit: "<optional asset commit>"
});
await grunt.writeFile("example.pptx");With grunt-io
grunt-io's exportProject() objects are shaped so they can be passed directly into addGruntObject().
Note that the bounds for client.exportProject() uses points, while GruntPptxGen.addGruntObject() uses inches for position just like PptxGenJS
import PptxGenJS from "pptxgenjs";
import { GruntAssetClient } from "grunt-io";
import { GruntPptxGen } from "grunt-io-pptxgen";
const client = new GruntAssetClient({
baseUrl: process.env.GRUNT_API_BASE_URL!,
token: process.env.GRUNT_API_TOKEN!
});
const exportProject = await client.exportProject({
assetId: process.env.GRUNT_ASSET_ID!,
projectCommitKey: process.env.GRUNT_ASSET_COMMIT,
bounds: {
x: 0,
y: 0,
width: 397,
height: 397 /*(in points not inches)*/
}
});
const pptx = new PptxGenJS();
const slide = pptx.addSlide();
const grunt = new GruntPptxGen(pptx);
for (const exportObject of exportProject.objects) {
grunt.addGruntObject(slide, {
...exportObject,
webAssetId: process.env.GRUNT_ASSET_ID!,
webAssetCommit: process.env.GRUNT_ASSET_COMMIT
});
}
await grunt.writeFile("example.pptx");Notes
pageObject,dataService, andresourcesmust already be serialized by Grunt and base64-encoded the same way the existing .NET PowerPoint adapter does.- The package writes:
GRUNT-PAGEOBJECTGRUNT-X-PAGEOBJECTGRUNT-X-DATASERVICEGRUNT-X-RESOURCESGRUNT-VERSION-2
- Large tag values are chunked using the same
-<count>-prefix scheme used inGrunt.OutputAdapters.PowerPoint.
