Skip to content

[BUG] Content_Types.xml references phantom slideMaster entries for multi-slide presentations #1444

@NAM-MAN

Description

@NAM-MAN

Description

The makeXmlContTypes() function generates one slideMaster Override entry per slide in the [Content_Types].xml file (e.g., slideMaster1.xml, slideMaster2.xml, etc.), but PptxGenJS only produces a single ppt/slideMasters/slideMaster1.xml file. The phantom references to non-existent slideMaster2.xml, slideMaster3.xml, etc. trigger the PowerPoint repair dialog.

Root Cause

In gen-xml.ts (compiled: pptxgen.cjs.js, makeXmlContTypes()):

slides.forEach((slide, idx) => {
    // This creates slideMaster1, slideMaster2, slideMaster3... for EACH slide
    strXml += '<Override PartName="/ppt/slideMasters/slideMaster' + (idx + 1) + '.xml" ...>';
    strXml += '<Override PartName="/ppt/slides/slide' + (idx + 1) + '.xml" ...>';
});

For a 10-slide presentation, this generates references to slideMaster1.xml through slideMaster10.xml, but only slideMaster1.xml actually exists in the archive.

Steps to Reproduce

  1. Generate a .pptx with 2+ slides
  2. Inspect [Content_Types].xml in the zip
  3. Observe slideMaster2.xml, slideMaster3.xml, etc. references
  4. Verify only ppt/slideMasters/slideMaster1.xml exists in the archive
  5. Open in Microsoft PowerPoint → repair dialog (among other triggers)

Expected Behavior

Only one slideMaster1.xml Override entry should be generated, outside the slide loop:

strXml += '<Override PartName="/ppt/slideMasters/slideMaster1.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml"/>';
slides.forEach((slide, idx) => {
    strXml += '<Override PartName="/ppt/slides/slide' + (idx + 1) + '.xml" ...>';
    // ...
});

Environment

  • PptxGenJS: 4.0.1
  • PowerPoint for Mac (Microsoft 365)
  • Node.js 22.x

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions