officegen icon indicating copy to clipboard operation
officegen copied to clipboard

Is it possible to and slides to an existing PPT document?

Open mattbryson opened this issue 10 years ago • 7 comments

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

mattbryson avatar Aug 21 '14 15:08 mattbryson

Concur, it'd be awesome to construct a new PPTX object from an existing .pptx file.

protobi avatar Dec 05 '14 19:12 protobi

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.

pietersv avatar Feb 09 '15 17:02 pietersv

@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

DirkStevens avatar Feb 09 '15 18:02 DirkStevens

The base of the pptx templater is working (in docxtemplater), however you can't yet add more slides.

edi9999 avatar Feb 10 '15 10:02 edi9999

Any updates on this in 2020?

agrinko avatar Feb 25 '20 16:02 agrinko

Any news on this? @Ziv-Barber

gtamas avatar Oct 26 '20 12:10 gtamas

Any updates on this in 2020?

Any news in 2023? :)

anagami avatar Apr 05 '23 07:04 anagami