diff --git a/src/file/document/document.ts b/src/file/document/document.ts index 23b73a97fd..5e16212f86 100644 --- a/src/file/document/document.ts +++ b/src/file/document/document.ts @@ -1,6 +1,7 @@ // http://officeopenxml.com/WPdocument.php +import { IMediaData } from "file/media"; import { XmlComponent } from "file/xml-components"; -import { Paragraph } from "../paragraph"; +import { Paragraph, PictureRun } from "../paragraph"; import { Table } from "../table"; import { Body } from "./body"; import { DocumentAttributes } from "./document-attributes"; @@ -52,4 +53,18 @@ export class Document extends XmlComponent { this.addTable(table); return table; } + + public addDrawing(imageData: IMediaData): void { + const paragraph = new Paragraph(); + const run = new PictureRun(imageData); + paragraph.addRun(run); + + this.body.push(paragraph); + } + + public createDrawing(imageData: IMediaData): void { + this.addDrawing(imageData); + + return; + } } diff --git a/src/file/drawing/inline/graphic-frame/graphic-frame-locks/graphic-frame-lock-attributes.ts b/src/file/drawing/inline/graphic-frame/graphic-frame-locks/graphic-frame-lock-attributes.ts new file mode 100644 index 0000000000..dad7841ed1 --- /dev/null +++ b/src/file/drawing/inline/graphic-frame/graphic-frame-locks/graphic-frame-lock-attributes.ts @@ -0,0 +1,13 @@ +import { XmlAttributeComponent } from "file/xml-components"; + +export interface IGraphicFrameLockAttributes { + xmlns?: string; + noChangeAspect?: number; +} + +export class GraphicFrameLockAttributes extends XmlAttributeComponent { + protected xmlKeys = { + xmlns: "xmlns:a", + noChangeAspect: "noChangeAspect", + }; +} diff --git a/src/file/drawing/inline/graphic-frame/graphic-frame-locks/graphic-frame-locks.ts b/src/file/drawing/inline/graphic-frame/graphic-frame-locks/graphic-frame-locks.ts new file mode 100644 index 0000000000..c6e70d02ce --- /dev/null +++ b/src/file/drawing/inline/graphic-frame/graphic-frame-locks/graphic-frame-locks.ts @@ -0,0 +1,14 @@ +import { XmlComponent } from "file/xml-components"; +import { GraphicFrameLockAttributes } from "./graphic-frame-lock-attributes"; + +export class GraphicFrameLocks extends XmlComponent { + + constructor() { + super("a:graphicFrameLocks"); + + this.root.push(new GraphicFrameLockAttributes({ + xmlns: "http://schemas.openxmlformats.org/drawingml/2006/main", + noChangeAspect: 1, + })); + } +} diff --git a/src/file/drawing/inline/graphic-frame/graphic-frame-properties.ts b/src/file/drawing/inline/graphic-frame/graphic-frame-properties.ts new file mode 100644 index 0000000000..764fb05b19 --- /dev/null +++ b/src/file/drawing/inline/graphic-frame/graphic-frame-properties.ts @@ -0,0 +1,11 @@ +import { XmlComponent } from "file/xml-components"; +import { GraphicFrameLocks } from "./graphic-frame-locks/graphic-frame-locks"; + +export class GraphicFrameProperties extends XmlComponent { + + constructor() { + super("wp:cNvGraphicFramePr"); + + this.root.push(new GraphicFrameLocks()); + } +} diff --git a/src/file/drawing/inline/graphic/graphic-data/pic/index.ts b/src/file/drawing/inline/graphic/graphic-data/pic/index.ts index b7907e20dc..84e1d96f7b 100644 --- a/src/file/drawing/inline/graphic/graphic-data/pic/index.ts +++ b/src/file/drawing/inline/graphic/graphic-data/pic/index.ts @@ -1,10 +1 @@ -import { XmlComponent } from "file/xml-components"; -import { BlipFill } from "./blip/blip-fill"; - -export class Pic extends XmlComponent { - - constructor(referenceId: number) { - super("pic:pic"); - this.root.push(new BlipFill(referenceId)); - } -} +export * from "./pic"; diff --git a/src/file/drawing/inline/graphic/graphic-data/pic/non-visual-pic-properties/child-non-visual-pic-properties/child-non-visual-pic-properties.ts b/src/file/drawing/inline/graphic/graphic-data/pic/non-visual-pic-properties/child-non-visual-pic-properties/child-non-visual-pic-properties.ts new file mode 100644 index 0000000000..f1e56fe332 --- /dev/null +++ b/src/file/drawing/inline/graphic/graphic-data/pic/non-visual-pic-properties/child-non-visual-pic-properties/child-non-visual-pic-properties.ts @@ -0,0 +1,11 @@ +import { XmlComponent } from "file/xml-components"; +import { PicLocks } from "./pic-locks/pic-locks"; + +export class ChildNonVisualProperties extends XmlComponent { + + constructor() { + super("pic:cNvPicPr"); + + this.root.push(new PicLocks()); + } +} diff --git a/src/file/drawing/inline/graphic/graphic-data/pic/non-visual-pic-properties/child-non-visual-pic-properties/pic-locks/pic-locks-attributes.ts b/src/file/drawing/inline/graphic/graphic-data/pic/non-visual-pic-properties/child-non-visual-pic-properties/pic-locks/pic-locks-attributes.ts new file mode 100644 index 0000000000..b5fe12fc48 --- /dev/null +++ b/src/file/drawing/inline/graphic/graphic-data/pic/non-visual-pic-properties/child-non-visual-pic-properties/pic-locks/pic-locks-attributes.ts @@ -0,0 +1,13 @@ +import { XmlAttributeComponent } from "file/xml-components"; + +export interface IPicLocksAttributes { + noChangeAspect?: number; + noChangeArrowheads?: number; +} + +export class PicLocksAttributes extends XmlAttributeComponent { + protected xmlKeys = { + noChangeAspect: "noChangeAspect", + noChangeArrowheads: "noChangeArrowheads", + }; +} diff --git a/src/file/drawing/inline/graphic/graphic-data/pic/non-visual-pic-properties/child-non-visual-pic-properties/pic-locks/pic-locks.ts b/src/file/drawing/inline/graphic/graphic-data/pic/non-visual-pic-properties/child-non-visual-pic-properties/pic-locks/pic-locks.ts new file mode 100644 index 0000000000..6a6027b89d --- /dev/null +++ b/src/file/drawing/inline/graphic/graphic-data/pic/non-visual-pic-properties/child-non-visual-pic-properties/pic-locks/pic-locks.ts @@ -0,0 +1,13 @@ +import { XmlComponent } from "file/xml-components"; +import { PicLocksAttributes } from "./pic-locks-attributes"; + +export class PicLocks extends XmlComponent { + + constructor() { + super("a:picLocks"); + this.root.push(new PicLocksAttributes({ + noChangeAspect: 1, + noChangeArrowheads: 1, + })); + } +} diff --git a/src/file/drawing/inline/graphic/graphic-data/pic/non-visual-pic-properties/non-visual-pic-properties.ts b/src/file/drawing/inline/graphic/graphic-data/pic/non-visual-pic-properties/non-visual-pic-properties.ts new file mode 100644 index 0000000000..50551a9c58 --- /dev/null +++ b/src/file/drawing/inline/graphic/graphic-data/pic/non-visual-pic-properties/non-visual-pic-properties.ts @@ -0,0 +1,14 @@ +import { XmlComponent } from "file/xml-components"; +import { ChildNonVisualProperties } from "./child-non-visual-pic-properties/child-non-visual-pic-properties"; +import { NonVisualProperties } from "./non-visual-properties/non-visual-properties"; + +export class NonVisualPicProperties extends XmlComponent { + + constructor() { + super("pic:nvPicPr"); + + this.root.push(new NonVisualProperties()); + this.root.push(new ChildNonVisualProperties()); + + } +} diff --git a/src/file/drawing/inline/graphic/graphic-data/pic/non-visual-pic-properties/non-visual-properties/non-visual-properties-attributes.ts b/src/file/drawing/inline/graphic/graphic-data/pic/non-visual-pic-properties/non-visual-properties/non-visual-properties-attributes.ts new file mode 100644 index 0000000000..1f4abe7204 --- /dev/null +++ b/src/file/drawing/inline/graphic/graphic-data/pic/non-visual-pic-properties/non-visual-properties/non-visual-properties-attributes.ts @@ -0,0 +1,15 @@ +import { XmlAttributeComponent } from "file/xml-components"; + +export interface INonVisualPropertiesAttributes { + id?: number; + name?: string; + descr?: string; +} + +export class NonVisualPropertiesAttributes extends XmlAttributeComponent { + protected xmlKeys = { + id: "id", + name: "name", + descr: "desc", + }; +} diff --git a/src/file/drawing/inline/graphic/graphic-data/pic/non-visual-pic-properties/non-visual-properties/non-visual-properties.ts b/src/file/drawing/inline/graphic/graphic-data/pic/non-visual-pic-properties/non-visual-properties/non-visual-properties.ts new file mode 100644 index 0000000000..b37e3f77ba --- /dev/null +++ b/src/file/drawing/inline/graphic/graphic-data/pic/non-visual-pic-properties/non-visual-properties/non-visual-properties.ts @@ -0,0 +1,15 @@ +import { XmlComponent } from "file/xml-components"; +import { NonVisualPropertiesAttributes } from "./non-visual-properties-attributes"; + +export class NonVisualProperties extends XmlComponent { + + constructor() { + super("pic:cNvPr"); + + this.root.push(new NonVisualPropertiesAttributes({ + id: 0, + name: "", + descr: "", + })); + } +} diff --git a/src/file/drawing/inline/graphic/graphic-data/pic/pic.ts b/src/file/drawing/inline/graphic/graphic-data/pic/pic.ts new file mode 100644 index 0000000000..a6f7d7f75b --- /dev/null +++ b/src/file/drawing/inline/graphic/graphic-data/pic/pic.ts @@ -0,0 +1,13 @@ +import { XmlComponent } from "file/xml-components"; +import { BlipFill } from "./blip/blip-fill"; +import { NonVisualPicProperties } from "./non-visual-pic-properties/non-visual-pic-properties"; + +export class Pic extends XmlComponent { + + constructor(referenceId: number) { + super("pic:pic"); + + this.root.push(new NonVisualPicProperties()); + this.root.push(new BlipFill(referenceId)); + } +} diff --git a/src/file/drawing/inline/index.ts b/src/file/drawing/inline/index.ts index 3e7ab22831..2fdaa4a91f 100644 --- a/src/file/drawing/inline/index.ts +++ b/src/file/drawing/inline/index.ts @@ -1,10 +1 @@ -import { XmlComponent } from "file/xml-components"; -import { Graphic } from "./graphic"; - -export class Inline extends XmlComponent { - - constructor(referenceId: number) { - super("wp:inline"); - this.root.push(new Graphic(referenceId)); - } -} +export * from "./inline"; diff --git a/src/file/drawing/inline/inline.ts b/src/file/drawing/inline/inline.ts new file mode 100644 index 0000000000..0cc61ad005 --- /dev/null +++ b/src/file/drawing/inline/inline.ts @@ -0,0 +1,13 @@ +import { XmlComponent } from "file/xml-components"; +import { Graphic } from "./graphic"; +import { GraphicFrameProperties } from "./graphic-frame/graphic-frame-properties"; + +export class Inline extends XmlComponent { + + constructor(referenceId: number) { + super("wp:inline"); + + this.root.push(new GraphicFrameProperties()); + this.root.push(new Graphic(referenceId)); + } +} diff --git a/src/file/file.ts b/src/file/file.ts index 5b76af52a3..a2af594339 100644 --- a/src/file/file.ts +++ b/src/file/file.ts @@ -52,6 +52,12 @@ export class File { return this.document.createTable(rows, cols); } + public createImage(image: string): void { + const mediaData = this.media.addMedia(image); + this.relationships.createRelationship(mediaData.referenceId, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image", `media/${mediaData.fileName}`); + this.document.createDrawing(mediaData); + } + public get Document(): Document { return this.document; }