From 436cf377b47a585bd8ac2a8c3eca1d8f39d032ef Mon Sep 17 00:00:00 2001 From: singerla Date: Mon, 5 Feb 2024 11:11:02 +0100 Subject: [PATCH] fix(master): use correct rels path on swapping image on slideMaster --- .../modify-master-external-image.test.ts | 29 ++++++++++++++ .../RootTemplateWithImages.pptx | Bin 66078 -> 66369 bytes src/classes/has-shapes.ts | 37 ++++++++++++------ src/helper/xml-helper.ts | 3 +- src/shapes/image.ts | 3 +- 5 files changed, 56 insertions(+), 16 deletions(-) create mode 100644 __tests__/modify-master-external-image.test.ts diff --git a/__tests__/modify-master-external-image.test.ts b/__tests__/modify-master-external-image.test.ts new file mode 100644 index 0000000..5746636 --- /dev/null +++ b/__tests__/modify-master-external-image.test.ts @@ -0,0 +1,29 @@ +import Automizer from '../src/automizer'; +import { ModifyImageHelper, ModifyShapeHelper } from '../src'; +import { CmToDxa } from '../src/helper/modify-helper'; + +test('Load external media, modify image target on slide master', async () => { + const automizer = new Automizer({ + templateDir: `${__dirname}/../__tests__/pptx-templates`, + outputDir: `${__dirname}/../__tests__/pptx-output`, + mediaDir: `${__dirname}/../__tests__/images`, + removeExistingSlides: true, + cleanup: true, + }); + + const pres = automizer + .loadRoot(`RootTemplateWithImages.pptx`) + .loadMedia([`test.jpg`]) + .load(`RootTemplateWithImages.pptx`, 'base'); + + pres.addMaster('base', 1, (master) => { + master.modifyElement('masterImagePNG', [ + ModifyImageHelper.setRelationTarget('test.jpg'), + ]); + }); + + // Expect imported slide master (#2) to have swapped (left top) background image + const result = await pres.write(`modify-master-add-external-image.test.pptx`); + + expect(result.images).toBe(8); +}); diff --git a/__tests__/pptx-templates/RootTemplateWithImages.pptx b/__tests__/pptx-templates/RootTemplateWithImages.pptx index 1d9e0bb6abd24e95d11451abb0b22011b8ac395c..9c1bacd584d95dcd25e725851e04cc2edb5364ef 100644 GIT binary patch delta 17169 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 twrTIDS1bF#w;R+{pj{ delta 16862 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 diff --git a/src/classes/has-shapes.ts b/src/classes/has-shapes.ts index 5d7bd2c..38c1be1 100644 --- a/src/classes/has-shapes.ts +++ b/src/classes/has-shapes.ts @@ -32,6 +32,7 @@ import { Image } from '../shapes/image'; import { ElementType } from '../enums/element-type'; import { GenericShape } from '../shapes/generic'; import { XmlSlideHelper } from '../helper/xml-slide-helper'; +import { vd } from '../helper/general-helper'; export default class HasShapes { /** @@ -387,17 +388,27 @@ export default class HasShapes { ? this.getSlideNumber(template, importElement.slideNumber) : importElement.slideNumber; - let sourcePath = `ppt/slides/slide${slideNumber}.xml`; - + let currentMode = 'slideToSlide'; if (this.targetType === 'slideMaster') { - // It is possible to import shapes from loaded presentations, - // as well as to modify an existing shape on current slideMaster - sourcePath = - importElement.mode === 'append' - ? `ppt/slides/slide${slideNumber}.xml` - : `ppt/slideMasters/slideMaster${slideNumber}.xml`; + if (importElement.mode === 'append') { + currentMode = 'slideToMaster'; + } else { + currentMode = 'onMaster'; + } } + // It is possible to import shapes from loaded slides to slideMaster, + // as well as to modify an existing shape on current slideMaster + const sourcePath = + currentMode === 'onMaster' + ? `ppt/slideMasters/slideMaster${slideNumber}.xml` + : `ppt/slides/slide${slideNumber}.xml`; + + const sourceRelPath = + currentMode === 'onMaster' + ? `ppt/slideMasters/_rels/slideMaster${slideNumber}.xml.rels` + : `ppt/slides/_rels/slide${slideNumber}.xml.rels`; + const sourceArchive = await template.archive; const useCreationIds = template.useCreationIds === true && template.creationIds !== undefined; @@ -420,7 +431,7 @@ export default class HasShapes { const appendElementParams = await this.analyzeElement( sourceElement, sourceArchive, - slideNumber, + sourceRelPath, ); return { @@ -754,13 +765,13 @@ export default class HasShapes { async analyzeElement( sourceElement: XmlElement, sourceArchive: IArchive, - slideNumber: number, + relsPath: string, ): Promise { const isChart = sourceElement.getElementsByTagName('c:chart'); if (isChart.length) { const target = await XmlHelper.getTargetByRelId( sourceArchive, - slideNumber, + relsPath, sourceElement, 'chart', ); @@ -775,7 +786,7 @@ export default class HasShapes { if (isChartEx.length) { const target = await XmlHelper.getTargetByRelId( sourceArchive, - slideNumber, + relsPath, sourceElement, 'chartEx', ); @@ -792,7 +803,7 @@ export default class HasShapes { type: ElementType.Image, target: await XmlHelper.getTargetByRelId( sourceArchive, - slideNumber, + relsPath, sourceElement, 'image', ), diff --git a/src/helper/xml-helper.ts b/src/helper/xml-helper.ts index d45e275..310a57e 100644 --- a/src/helper/xml-helper.ts +++ b/src/helper/xml-helper.ts @@ -331,7 +331,7 @@ export class XmlHelper { static async getTargetByRelId( archive: IArchive, - slideNumber: number, + relsPath: string, element: XmlElement, type: string, ): Promise { @@ -339,7 +339,6 @@ export class XmlHelper { const sourceRid = element .getElementsByTagName(params.relRootTag)[0] .getAttribute(params.relAttribute); - const relsPath = `ppt/slides/_rels/slide${slideNumber}.xml.rels`; const imageRels = await XmlHelper.getRelationshipTargetsByPrefix( archive, relsPath, diff --git a/src/shapes/image.ts b/src/shapes/image.ts index 49d11d7..b5f6380 100644 --- a/src/shapes/image.ts +++ b/src/shapes/image.ts @@ -82,9 +82,10 @@ export class Image extends Shape implements IImage { this.applyImageCallbacks(); if (this.hasSvgRelation()) { + const relsPath = `ppt/slides/_rels/slide${this.sourceSlideNumber}.xml.rels`; const target = await XmlHelper.getTargetByRelId( this.sourceArchive, - this.sourceSlideNumber, + relsPath, this.targetElement, 'image:svg', );