officegen
officegen copied to clipboard
Is it possible to and slides to an existing PPT document?
Hi, our client has an existing PPT template with lots of pre defined styles and layouts.
Is it possible to use this as the base for a our generated one? So the outputted ppt still has these styles and templates?
We don't need templating in the traditional sense (we make all the dynamic slides from scratch), we just want to keep / include the other styles and layouts into the final PPT.
m
Concur, it'd be awesome to construct a new PPTX object from an existing .pptx file.
There are two ways to frame this question:
- Narrow: can we import themes from an existing pres?
- Broad: can we use use an existing pres as the starting point (including existing slides, layouts, etc.)
The broad one would be great. Starting small, it's technically possible to import the theme from an existing presentation. As a quick hack, if we modify the source code to lib/msofficegen.js
to add the following line:
function cbMakeTheme ( data ) {
if (options.theme) return options.theme; // add this line
var theme = ... <long XML string>
return gen_private.plugs.type.msoffice.cbMakeMsOfficeBasicXml ( data ) + theme ;
}
We can then extract a theme from an existing presentation and pass it as an option:
var AdmZip = require('adm-zip'); // need to install this module
var zip = new AdmZip("/Users/me/MyTemplate.potx");
var theme = zip.readAsText("ppt/theme/theme1.xml");
var pptx = officegen({type: 'pptx', theme:theme });
Looking at the code, it's not immediately clear to me how to extend an entire document. The basic logic is to generate the entire XML as a catenation of various resource objects described as XML snippets returned by various cbMakeSomething()
callbacks.
I wonder if we can iteratively apply this narrow approach, and extend all the various such that they can either provide stock code (as today) or extract their equivalent from an existing doc.
Thinking out loud, one approach might be to unzip the file, extract each component, parse the XML using node-xml2js, and turn those into resources, which can be edited as JS objects (thus addressing issues #25 and #50) and which get turned back into XML using xmlbuilderhttps://github.com/oozcitak/xmlbuilder-js.
The risk is that maybe existing docs have components that we're not expecting, so either we're okay with these being dropped or we have a general way to iterate and turn components into resources.
@gradualstudent @Ziv-Barber There's a project by @edi9999 called docxtemplater: https://github.com/edi9999/docxtemplater
which also has a work-in-progress pptx templater part.
I have tried docx templater and it works well. Haven't tried the pptx templater yet because I think @edi9999 is still working on it.
I would love to see some integration of these projects - especially the powerpoint templating and creation.
Go do some magic @Ziv-Barber
The base of the pptx templater is working (in docxtemplater), however you can't yet add more slides.
Any updates on this in 2020?
Any news on this? @Ziv-Barber
Any updates on this in 2020?
Any news in 2023? :)