diff --git a/demo/demo15.js b/demo/demo15.js new file mode 100644 index 0000000000..61d9351817 --- /dev/null +++ b/demo/demo15.js @@ -0,0 +1,14 @@ +const docx = require('../build'); + +var doc = new docx.Document(); + +var paragraph = new docx.Paragraph("Hello World"); +var paragraph2 = new docx.Paragraph("Hello World on another page").pageBreakBefore(); + +doc.addParagraph(paragraph); +doc.addParagraph(paragraph2); + +var exporter = new docx.LocalPacker(doc); +exporter.pack('My Document'); + +console.log('Document created successfully at project root!'); diff --git a/src/file/paragraph/formatting/page-break.spec.ts b/src/file/paragraph/formatting/page-break.spec.ts index 675ac5d112..6ba877311f 100644 --- a/src/file/paragraph/formatting/page-break.spec.ts +++ b/src/file/paragraph/formatting/page-break.spec.ts @@ -1,7 +1,7 @@ import { assert } from "chai"; import { Utility } from "../../../tests/utility"; -import { PageBreak } from "./page-break"; +import { PageBreak, PageBreakBefore } from "./page-break"; describe("PageBreak", () => { let pageBreak: PageBreak; @@ -30,3 +30,11 @@ describe("PageBreak", () => { }); }); }); + +describe("PageBreakBefore", () => { + it("should create page break before", () => { + const pageBreakBefore = new PageBreakBefore(); + const newJson = Utility.jsonify(pageBreakBefore); + assert.equal(newJson.rootKey, "w:pageBreakBefore"); + }); +}); diff --git a/src/file/paragraph/formatting/page-break.ts b/src/file/paragraph/formatting/page-break.ts index 1b4e6642b5..13556d12e2 100644 --- a/src/file/paragraph/formatting/page-break.ts +++ b/src/file/paragraph/formatting/page-break.ts @@ -19,3 +19,12 @@ export class PageBreak extends Run { this.root.push(new Break()); } } + +/** + * Add page break before the paragraph if there is no one added before. + */ +export class PageBreakBefore extends XmlComponent { + constructor() { + super("w:pageBreakBefore"); + } +} diff --git a/src/file/paragraph/paragraph.spec.ts b/src/file/paragraph/paragraph.spec.ts index bd36211295..dd64f1fed2 100644 --- a/src/file/paragraph/paragraph.spec.ts +++ b/src/file/paragraph/paragraph.spec.ts @@ -161,6 +161,24 @@ describe("Paragraph", () => { }); }); + describe("#pageBreakBefore()", () => { + it("should add page break before to JSON", () => { + paragraph.pageBreakBefore(); + const tree = new Formatter().format(paragraph); + expect(tree).to.deep.equal({ + "w:p": [ + { + "w:pPr": [ + { + "w:pageBreakBefore": [], + }, + ], + }, + ], + }); + }); + }); + describe("#bullet()", () => { it("should default to 0 indent level if no bullet was specified", () => { paragraph.bullet(); diff --git a/src/file/paragraph/paragraph.ts b/src/file/paragraph/paragraph.ts index 2f75422077..970c4bfae9 100644 --- a/src/file/paragraph/paragraph.ts +++ b/src/file/paragraph/paragraph.ts @@ -8,7 +8,7 @@ import { Alignment } from "./formatting/alignment"; import { ThematicBreak } from "./formatting/border"; import { Indent } from "./formatting/indent"; import { KeepLines, KeepNext } from "./formatting/keep"; -import { PageBreak } from "./formatting/page-break"; +import { PageBreak, PageBreakBefore } from "./formatting/page-break"; import { ISpacingProperties, Spacing } from "./formatting/spacing"; import { Style } from "./formatting/style"; import { CenterTabStop, LeftTabStop, MaxRightTabStop, RightTabStop } from "./formatting/tab-stop"; @@ -115,6 +115,11 @@ export class Paragraph extends XmlComponent { return this; } + public pageBreakBefore(): Paragraph { + this.properties.push(new PageBreakBefore()); + return this; + } + public maxRightTabStop(): Paragraph { this.properties.push(new MaxRightTabStop()); return this;