From f7c2072cffe7c1406e4b823e04609e4891f8fbf4 Mon Sep 17 00:00:00 2001 From: Dolan Date: Tue, 16 Jan 2018 00:43:00 +0000 Subject: [PATCH] Progress on embeddding image --- demo/demo5.js | 4 +++- demo/{penguins.jpg => image1.jpeg} | Bin src/export/packer/compiler.ts | 2 +- .../graphic-data/graphic-data-attribute.ts | 11 +++++++++++ .../graphic/graphic-data/graphic-data.ts | 16 ++++++++++++++++ .../inline/graphic/graphic-data/index.ts | 11 +---------- .../graphic/graphic-data/pic/blip/blip.ts | 3 +++ .../graphic/graphic-data/pic/pic-attributes.ts | 11 +++++++++++ .../inline/graphic/graphic-data/pic/pic.ts | 5 ++++- src/file/drawing/inline/inline-attributes.ts | 17 +++++++++++++++++ src/file/drawing/inline/inline.ts | 8 ++++++++ template/[Content_Types].xml | 1 + 12 files changed, 76 insertions(+), 13 deletions(-) rename demo/{penguins.jpg => image1.jpeg} (100%) create mode 100644 src/file/drawing/inline/graphic/graphic-data/graphic-data-attribute.ts create mode 100644 src/file/drawing/inline/graphic/graphic-data/graphic-data.ts create mode 100644 src/file/drawing/inline/graphic/graphic-data/pic/pic-attributes.ts create mode 100644 src/file/drawing/inline/inline-attributes.ts diff --git a/demo/demo5.js b/demo/demo5.js index 444b73e54c..504d764d9b 100644 --- a/demo/demo5.js +++ b/demo/demo5.js @@ -2,8 +2,10 @@ const docx = require('../build'); var doc = new docx.File(); -const image = doc.createImage("./demo/penguins.jpg"); +var paragraph = new docx.Paragraph("Hello World"); +doc.addParagraph(paragraph); +const image = doc.createImage("./demo/image1.jpeg"); var exporter = new docx.LocalPacker(doc); exporter.pack('My Document'); diff --git a/demo/penguins.jpg b/demo/image1.jpeg similarity index 100% rename from demo/penguins.jpg rename to demo/image1.jpeg diff --git a/src/export/packer/compiler.ts b/src/export/packer/compiler.ts index 0e1e2fcdbb..48d7b54561 100644 --- a/src/export/packer/compiler.ts +++ b/src/export/packer/compiler.ts @@ -32,7 +32,7 @@ export class Compiler { cwd: TEMPLATE_PATH, }); - const xmlDocument = xml(this.formatter.format(this.file.Document)); + const xmlDocument = xml(this.formatter.format(this.file.Document), true); const xmlStyles = xml(this.formatter.format(this.file.Styles)); const xmlProperties = xml(this.formatter.format(this.file.Properties), { declaration: { diff --git a/src/file/drawing/inline/graphic/graphic-data/graphic-data-attribute.ts b/src/file/drawing/inline/graphic/graphic-data/graphic-data-attribute.ts new file mode 100644 index 0000000000..a248ecabf0 --- /dev/null +++ b/src/file/drawing/inline/graphic/graphic-data/graphic-data-attribute.ts @@ -0,0 +1,11 @@ +import { XmlAttributeComponent } from "file/xml-components"; + +export interface IGraphicDataAttributes { + uri?: string; +} + +export class GraphicDataAttributes extends XmlAttributeComponent { + protected xmlKeys = { + uri: "uri", + }; +} diff --git a/src/file/drawing/inline/graphic/graphic-data/graphic-data.ts b/src/file/drawing/inline/graphic/graphic-data/graphic-data.ts new file mode 100644 index 0000000000..12406c5e17 --- /dev/null +++ b/src/file/drawing/inline/graphic/graphic-data/graphic-data.ts @@ -0,0 +1,16 @@ +import { XmlComponent } from "file/xml-components"; +import { GraphicDataAttributes } from "./graphic-data-attribute"; +import { Pic } from "./pic"; + +export class GraphicData extends XmlComponent { + + constructor(referenceId: number) { + super("a:graphicData"); + + this.root.push(new GraphicDataAttributes({ + uri: "http://schemas.openxmlformats.org/drawingml/2006/picture", + })); + + this.root.push(new Pic(referenceId)); + } +} diff --git a/src/file/drawing/inline/graphic/graphic-data/index.ts b/src/file/drawing/inline/graphic/graphic-data/index.ts index 0f462b62ae..1196483b8a 100644 --- a/src/file/drawing/inline/graphic/graphic-data/index.ts +++ b/src/file/drawing/inline/graphic/graphic-data/index.ts @@ -1,10 +1 @@ -import { XmlComponent } from "file/xml-components"; -import { Pic } from "./pic"; - -export class GraphicData extends XmlComponent { - - constructor(referenceId: number) { - super("a:graphicData"); - this.root.push(new Pic(referenceId)); - } -} +export * from "./graphic-data"; diff --git a/src/file/drawing/inline/graphic/graphic-data/pic/blip/blip.ts b/src/file/drawing/inline/graphic/graphic-data/pic/blip/blip.ts index c4aca1f156..095bae8696 100644 --- a/src/file/drawing/inline/graphic/graphic-data/pic/blip/blip.ts +++ b/src/file/drawing/inline/graphic/graphic-data/pic/blip/blip.ts @@ -2,11 +2,13 @@ import { XmlAttributeComponent, XmlComponent } from "file/xml-components"; interface IBlipProperties { embed: string; + cstate: string; } class BlipAttributes extends XmlAttributeComponent { protected xmlKeys = { embed: "r:embed", + cstate: "cstate", }; } @@ -16,6 +18,7 @@ export class Blip extends XmlComponent { super("a:blip"); this.root.push(new BlipAttributes({ embed: `rId${referenceId}`, + cstate: "none", })); } } diff --git a/src/file/drawing/inline/graphic/graphic-data/pic/pic-attributes.ts b/src/file/drawing/inline/graphic/graphic-data/pic/pic-attributes.ts new file mode 100644 index 0000000000..b73c6c8cd0 --- /dev/null +++ b/src/file/drawing/inline/graphic/graphic-data/pic/pic-attributes.ts @@ -0,0 +1,11 @@ +import { XmlAttributeComponent } from "file/xml-components"; + +export interface IPicAttributes { + xmlns?: string; +} + +export class PicAttributes extends XmlAttributeComponent { + protected xmlKeys = { + xmlns: "xmlns:pic", + }; +} diff --git a/src/file/drawing/inline/graphic/graphic-data/pic/pic.ts b/src/file/drawing/inline/graphic/graphic-data/pic/pic.ts index e5bd2c9bd5..ac848a71f3 100644 --- a/src/file/drawing/inline/graphic/graphic-data/pic/pic.ts +++ b/src/file/drawing/inline/graphic/graphic-data/pic/pic.ts @@ -2,13 +2,16 @@ import { XmlComponent } from "file/xml-components"; import { BlipFill } from "./blip/blip-fill"; import { NonVisualPicProperties } from "./non-visual-pic-properties/non-visual-pic-properties"; +import { PicAttributes } from "./pic-attributes"; import { ShapeProperties } from "./shape-properties/shape-properties"; export class Pic extends XmlComponent { - constructor(referenceId: number) { super("pic:pic"); + this.root.push(new PicAttributes({ + xmlns: "http://schemas.openxmlformats.org/drawingml/2006/picture", + })); this.root.push(new NonVisualPicProperties()); this.root.push(new BlipFill(referenceId)); this.root.push(new ShapeProperties()); diff --git a/src/file/drawing/inline/inline-attributes.ts b/src/file/drawing/inline/inline-attributes.ts new file mode 100644 index 0000000000..1a4ef74e3c --- /dev/null +++ b/src/file/drawing/inline/inline-attributes.ts @@ -0,0 +1,17 @@ +import { XmlAttributeComponent } from "file/xml-components"; + +export interface IInlineAttributes { + distT?: number; + distB?: number; + distL?: number; + distR?: number; +} + +export class InlineAttributes extends XmlAttributeComponent { + protected xmlKeys = { + distT: "distT", + distB: "distB", + distL: "distL", + distR: "distR", + }; +} diff --git a/src/file/drawing/inline/inline.ts b/src/file/drawing/inline/inline.ts index 0cc61ad005..42937fa251 100644 --- a/src/file/drawing/inline/inline.ts +++ b/src/file/drawing/inline/inline.ts @@ -1,12 +1,20 @@ import { XmlComponent } from "file/xml-components"; import { Graphic } from "./graphic"; import { GraphicFrameProperties } from "./graphic-frame/graphic-frame-properties"; +import { InlineAttributes } from "./inline-attributes"; export class Inline extends XmlComponent { constructor(referenceId: number) { super("wp:inline"); + this.root.push(new InlineAttributes({ + distT: 0, + distB: 0, + distL: 0, + distR: 0, + })); + this.root.push(new GraphicFrameProperties()); this.root.push(new Graphic(referenceId)); } diff --git a/template/[Content_Types].xml b/template/[Content_Types].xml index 419d57897f..6d07a1a165 100644 --- a/template/[Content_Types].xml +++ b/template/[Content_Types].xml @@ -1,5 +1,6 @@ +