Skip to content

Commit 1602f44

Browse files
committed
Merge branch 'refactor-re-import-output'
# Conflicts: # src/helper/xml-slide-helper.ts
2 parents 7c86f04 + 4a7f910 commit 1602f44

File tree

5 files changed

+94
-21
lines changed

5 files changed

+94
-21
lines changed

src/dev.ts

Lines changed: 73 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,96 @@
11
import Automizer, { modify } from './index';
22
import { vd } from './helper/general-helper';
3+
import * as fs from 'fs';
34

45
const run = async () => {
56
const outputDir = `${__dirname}/../__tests__/pptx-output`;
67
const templateDir = `${__dirname}/../__tests__/pptx-templates`;
78

8-
const automizer = new Automizer({
9+
// Step 1: Create a pptx with images and a chart inside.
10+
// The chart is modified by pptx-automizer
11+
12+
const writer = new Automizer({
913
templateDir,
10-
outputDir
14+
outputDir,
15+
verbosity: 0,
16+
removeExistingSlides: true
1117
});
1218

13-
const pres = automizer
19+
const pres = writer
1420
.loadRoot(`RootTemplate.pptx`)
21+
.load(`EmptySlide.pptx`, 'empty')
22+
.load(`SlideWithImages.pptx`, 'images')
1523
.load(`ChartBarsStacked.pptx`, 'charts');
1624

1725
const dataSmaller = {
18-
series: [
19-
{ label: 'series s1' },
20-
{ label: 'series s2' }
21-
],
26+
series: [{ label: 'series s1' }, { label: 'series s2' }],
2227
categories: [
23-
{ label: 'item test r1', values: [ 10, null ] },
24-
{ label: 'item test r2', values: [ 12, 18 ] },
28+
{ label: 'item test r1', values: [10, null] },
29+
{ label: 'item test r2', values: [12, 18] },
2530
],
26-
}
31+
};
2732

28-
const result = await pres
33+
await pres
34+
.addSlide('empty', 1, (slide) => {
35+
slide.addElement('images', 1, 'Grafik 5');
36+
})
2937
.addSlide('charts', 1, (slide) => {
30-
slide.modifyElement('BarsStacked', [
31-
modify.setChartData(dataSmaller),
32-
]);
38+
slide.modifyElement('BarsStacked', [modify.setChartData(dataSmaller)]);
3339
})
34-
.write(`modify-chart-stacked-bars.test.pptx`)
40+
.write(`modify-automizer-generated-file.tmp.test.pptx`);
41+
42+
// Step 2: Create a copy of the generated file in templateDir
43+
// and load it as a normal template
44+
45+
await fs.promises.copyFile(
46+
`${outputDir}/modify-automizer-generated-file.tmp.test.pptx`,
47+
`${templateDir}/PptxAutomizerGeneratedFile.pptx`,
48+
);
49+
50+
const reader = new Automizer({
51+
templateDir,
52+
outputDir,
53+
// This will display all log() output
54+
verbosity: 2
55+
});
56+
57+
58+
const dataSmallerMod = {
59+
series: [{ label: 'series s3' }, { label: 'series s4' }],
60+
categories: [
61+
{ label: 'item test r3', values: [22, 45] },
62+
{ label: 'item test r4', values: [23, 46] },
63+
{ label: 'item test r5', values: [24, 47] },
64+
],
65+
};
66+
67+
const pres2 = reader
68+
.loadRoot(`RootTemplate.pptx`)
69+
.load(`EmptySlide.pptx`, 'empty')
70+
.load(`SlideWithImages.pptx`, 'images')
71+
.load(`PptxAutomizerGeneratedFile.pptx`, 'generated')
72+
73+
const presInfo = await pres2.getInfo();
74+
const slides = presInfo
75+
.slidesByTemplate(`generated`)
76+
77+
console.log(`The re-imported file PptxAutomizerGeneratedFile.pptx seems to have ${slides.length} slides`)
78+
// But only 2 slides were expected with removeExistingSlides: true
79+
80+
const result2 = await pres2
81+
.addSlide('empty', 1, (slide) => {
82+
slide.addElement('images', 1, 'Grafik 5');
83+
})
84+
.addSlide('generated', 2, (slide) => {
85+
slide.addElement('images', 1, 'Grafik 5');
86+
})
87+
.addSlide('generated', 3, (slide) => {
88+
slide.modifyElement('BarsStacked', [modify.setChartData(dataSmallerMod)]);
89+
})
90+
.write(`modify-automizer-generated-file.test.pptx`);
91+
92+
vd(result2)
3593

36-
vd(result)
3794
};
3895

3996
run().catch((error) => {

src/helper/general-helper.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ export interface Logger {
3131
verbosity: 0 | 1 | 2;
3232
target: 'console' | 'file';
3333
log: (
34-
message: string,
34+
message: string | number | object,
3535
verbosity: Logger['verbosity'],
3636
showStack?: boolean,
3737
target?: Logger['target'],
@@ -58,7 +58,7 @@ export const Logger = <Logger>{
5858
},
5959
};
6060

61-
export const log = (message: string, verbosity: Logger['verbosity']) => {
61+
export const log = (message: string | number | object, verbosity: Logger['verbosity']) => {
6262
Logger.log(message, verbosity);
6363
};
6464

src/helper/modify-xml-helper.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,10 @@ export default class ModifyXmlHelper {
151151
throw 'Unable to set value @index: ' + index;
152152
}
153153

154+
if(!valueElement[0].firstChild) {
155+
return
156+
}
157+
154158
valueElement[0].firstChild.textContent = String(value);
155159
if (index !== undefined) {
156160
element.setAttribute('idx', String(index));

src/helper/xml-template-helper.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,14 @@ export class XmlTemplateHelper {
3838
this.relType,
3939
);
4040

41+
// ToDo: The slide list is based on the relations from this.path
42+
// which contains non-visible slides, too.
43+
// Should be either:
44+
// a.) remove unused slides on generation
45+
// b.) use slides list from 'p:sldIdLst' in `ppt/presentation.xml`
46+
vd(this.relType)
47+
vd(this.path)
48+
4149
const creationIds: SlideInfo[] = [];
4250
for (const slideRel of relationships) {
4351
try {

src/shapes/chart.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import { RootPresTemplate } from '../interfaces/root-pres-template';
2020
import { contentTracker } from '../helper/content-tracker';
2121
import IArchive from '../interfaces/iarchive';
2222
import { ContentTypeExtension } from '../enums/content-type-map';
23-
import { log } from '../helper/general-helper';
23+
import { log, vd } from '../helper/general-helper';
2424

2525
export class Chart extends Shape implements IChart {
2626
sourceWorksheet: number | string;
@@ -499,13 +499,17 @@ export class Chart extends Shape implements IChart {
499499
}
500500

501501
async copyWorksheetFile(): Promise<void> {
502+
const sourceFile = `ppt/embeddings/${this.worksheetFilePrefix}${this.sourceWorksheet}${this.wbExtension}`;
502503
const targetFile = `ppt/embeddings/${this.worksheetFilePrefix}${this.targetWorksheet}${this.wbExtension}`;
504+
503505
await FileHelper.zipCopy(
504506
this.sourceArchive,
505-
`ppt/embeddings/${this.worksheetFilePrefix}${this.sourceWorksheet}${this.wbExtension}`,
507+
sourceFile,
506508
this.targetArchive,
507509
targetFile,
508-
);
510+
).catch((e) => {
511+
log(e, 2);
512+
});
509513
}
510514

511515
appendChartExtensionToContentType(): Promise<XmlElement | boolean> {

0 commit comments

Comments
 (0)