Sending media data down image

This commit is contained in:
Dolan
2018-12-21 01:39:20 +00:00
parent 1ea347ed21
commit d021a3995e
9 changed files with 43 additions and 23 deletions

View File

@ -8,7 +8,21 @@ import { Anchor } from "./anchor";
function createDrawing(drawingOptions: IDrawingOptions): Anchor { function createDrawing(drawingOptions: IDrawingOptions): Anchor {
return new Anchor( return new Anchor(
1, {
referenceId: 1,
fileName: "test.png",
stream: new Buffer(""),
dimensions: {
pixels: {
x: 0,
y: 0,
},
emus: {
x: 0,
y: 0,
},
},
},
{ {
pixels: { pixels: {
x: 100, x: 100,

View File

@ -1,5 +1,5 @@
// http://officeopenxml.com/drwPicFloating.php // http://officeopenxml.com/drwPicFloating.php
import { IMediaDataDimensions } from "file/media"; import { IMediaData, IMediaDataDimensions } from "file/media";
import { XmlComponent } from "file/xml-components"; import { XmlComponent } from "file/xml-components";
import { IDrawingOptions } from "../drawing"; import { IDrawingOptions } from "../drawing";
import { import {
@ -34,7 +34,7 @@ const defaultOptions: IFloating = {
}; };
export class Anchor extends XmlComponent { export class Anchor extends XmlComponent {
constructor(referenceId: number, dimensions: IMediaDataDimensions, drawingOptions: IDrawingOptions) { constructor(mediaData: IMediaData, dimensions: IMediaDataDimensions, drawingOptions: IDrawingOptions) {
super("wp:anchor"); super("wp:anchor");
const floating = { const floating = {
@ -83,6 +83,6 @@ export class Anchor extends XmlComponent {
this.root.push(new DocProperties()); this.root.push(new DocProperties());
this.root.push(new GraphicFrameProperties()); this.root.push(new GraphicFrameProperties());
this.root.push(new Graphic(referenceId, dimensions.emus.x, dimensions.emus.y)); this.root.push(new Graphic(mediaData, dimensions.emus.x, dimensions.emus.y));
} }
} }

View File

@ -33,20 +33,16 @@ export class Drawing extends XmlComponent {
constructor(imageData: IMediaData, drawingOptions?: IDrawingOptions) { constructor(imageData: IMediaData, drawingOptions?: IDrawingOptions) {
super("w:drawing"); super("w:drawing");
if (imageData === undefined) {
throw new Error("imageData cannot be undefined");
}
const mergedOptions = { const mergedOptions = {
...defaultDrawingOptions, ...defaultDrawingOptions,
...drawingOptions, ...drawingOptions,
}; };
if (mergedOptions.position === PlacementPosition.INLINE) { if (mergedOptions.position === PlacementPosition.INLINE) {
this.inline = new Inline(imageData.referenceId, imageData.dimensions); this.inline = new Inline(imageData, imageData.dimensions);
this.root.push(this.inline); this.root.push(this.inline);
} else if (mergedOptions.position === PlacementPosition.FLOATING) { } else if (mergedOptions.position === PlacementPosition.FLOATING) {
this.root.push(new Anchor(imageData.referenceId, imageData.dimensions, mergedOptions)); this.root.push(new Anchor(imageData, imageData.dimensions, mergedOptions));
} }
} }

View File

@ -1,11 +1,13 @@
import { IMediaData } from "file/media";
import { XmlComponent } from "file/xml-components"; import { XmlComponent } from "file/xml-components";
import { GraphicDataAttributes } from "./graphic-data-attribute"; import { GraphicDataAttributes } from "./graphic-data-attribute";
import { Pic } from "./pic"; import { Pic } from "./pic";
export class GraphicData extends XmlComponent { export class GraphicData extends XmlComponent {
private readonly pic: Pic; private readonly pic: Pic;
constructor(referenceId: number, x: number, y: number) { constructor(mediaData: IMediaData, x: number, y: number) {
super("a:graphicData"); super("a:graphicData");
this.root.push( this.root.push(
@ -14,7 +16,7 @@ export class GraphicData extends XmlComponent {
}), }),
); );
this.pic = new Pic(referenceId, x, y); this.pic = new Pic(mediaData, x, y);
this.root.push(this.pic); this.root.push(this.pic);
} }

View File

@ -1,12 +1,15 @@
import { IMediaData } from "file/media";
import { XmlComponent } from "file/xml-components"; import { XmlComponent } from "file/xml-components";
import { Blip } from "./blip"; import { Blip } from "./blip";
import { SourceRectangle } from "./source-rectangle"; import { SourceRectangle } from "./source-rectangle";
import { Stretch } from "./stretch"; import { Stretch } from "./stretch";
export class BlipFill extends XmlComponent { export class BlipFill extends XmlComponent {
constructor(referenceId: number) { constructor(mediaData: IMediaData) {
super("pic:blipFill"); super("pic:blipFill");
this.root.push(new Blip(referenceId));
this.root.push(new Blip(mediaData));
this.root.push(new SourceRectangle()); this.root.push(new SourceRectangle());
this.root.push(new Stretch()); this.root.push(new Stretch());
} }

View File

@ -1,3 +1,4 @@
import { IMediaData } from "file/media";
import { XmlAttributeComponent, XmlComponent } from "file/xml-components"; import { XmlAttributeComponent, XmlComponent } from "file/xml-components";
interface IBlipProperties { interface IBlipProperties {
@ -13,11 +14,11 @@ class BlipAttributes extends XmlAttributeComponent<IBlipProperties> {
} }
export class Blip extends XmlComponent { export class Blip extends XmlComponent {
constructor(referenceId: number) { constructor(mediaData: IMediaData) {
super("a:blip"); super("a:blip");
this.root.push( this.root.push(
new BlipAttributes({ new BlipAttributes({
embed: `rId${referenceId}`, embed: `rId{${mediaData.fileName}}`,
cstate: "none", cstate: "none",
}), }),
); );

View File

@ -1,5 +1,7 @@
// http://officeopenxml.com/drwPic.php // http://officeopenxml.com/drwPic.php
import { IMediaData } from "file/media";
import { XmlComponent } from "file/xml-components"; import { XmlComponent } from "file/xml-components";
import { BlipFill } from "./blip/blip-fill"; import { BlipFill } from "./blip/blip-fill";
import { NonVisualPicProperties } from "./non-visual-pic-properties/non-visual-pic-properties"; import { NonVisualPicProperties } from "./non-visual-pic-properties/non-visual-pic-properties";
import { PicAttributes } from "./pic-attributes"; import { PicAttributes } from "./pic-attributes";
@ -8,7 +10,7 @@ import { ShapeProperties } from "./shape-properties/shape-properties";
export class Pic extends XmlComponent { export class Pic extends XmlComponent {
private readonly shapeProperties: ShapeProperties; private readonly shapeProperties: ShapeProperties;
constructor(referenceId: number, x: number, y: number) { constructor(mediaData: IMediaData, x: number, y: number) {
super("pic:pic"); super("pic:pic");
this.root.push( this.root.push(
@ -20,7 +22,7 @@ export class Pic extends XmlComponent {
this.shapeProperties = new ShapeProperties(x, y); this.shapeProperties = new ShapeProperties(x, y);
this.root.push(new NonVisualPicProperties()); this.root.push(new NonVisualPicProperties());
this.root.push(new BlipFill(referenceId)); this.root.push(new BlipFill(mediaData));
this.root.push(new ShapeProperties(x, y)); this.root.push(new ShapeProperties(x, y));
} }

View File

@ -1,4 +1,6 @@
import { IMediaData } from "file/media";
import { XmlAttributeComponent, XmlComponent } from "file/xml-components"; import { XmlAttributeComponent, XmlComponent } from "file/xml-components";
import { GraphicData } from "./graphic-data"; import { GraphicData } from "./graphic-data";
interface IGraphicProperties { interface IGraphicProperties {
@ -14,7 +16,7 @@ class GraphicAttributes extends XmlAttributeComponent<IGraphicProperties> {
export class Graphic extends XmlComponent { export class Graphic extends XmlComponent {
private readonly data: GraphicData; private readonly data: GraphicData;
constructor(referenceId: number, x: number, y: number) { constructor(mediaData: IMediaData, x: number, y: number) {
super("a:graphic"); super("a:graphic");
this.root.push( this.root.push(
new GraphicAttributes({ new GraphicAttributes({
@ -22,7 +24,7 @@ export class Graphic extends XmlComponent {
}), }),
); );
this.data = new GraphicData(referenceId, x, y); this.data = new GraphicData(mediaData, x, y);
this.root.push(this.data); this.root.push(this.data);
} }

View File

@ -1,5 +1,5 @@
// http://officeopenxml.com/drwPicInline.php // http://officeopenxml.com/drwPicInline.php
import { IMediaDataDimensions } from "file/media"; import { IMediaData, IMediaDataDimensions } from "file/media";
import { XmlComponent } from "file/xml-components"; import { XmlComponent } from "file/xml-components";
import { DocProperties } from "./../doc-properties/doc-properties"; import { DocProperties } from "./../doc-properties/doc-properties";
import { EffectExtent } from "./../effect-extent/effect-extent"; import { EffectExtent } from "./../effect-extent/effect-extent";
@ -12,7 +12,7 @@ export class Inline extends XmlComponent {
private readonly extent: Extent; private readonly extent: Extent;
private readonly graphic: Graphic; private readonly graphic: Graphic;
constructor(referenceId: number, private readonly dimensions: IMediaDataDimensions) { constructor(readonly mediaData: IMediaData, private readonly dimensions: IMediaDataDimensions) {
super("wp:inline"); super("wp:inline");
this.root.push( this.root.push(
@ -25,7 +25,7 @@ export class Inline extends XmlComponent {
); );
this.extent = new Extent(dimensions.emus.x, dimensions.emus.y); this.extent = new Extent(dimensions.emus.x, dimensions.emus.y);
this.graphic = new Graphic(referenceId, dimensions.emus.x, dimensions.emus.y); this.graphic = new Graphic(mediaData, dimensions.emus.x, dimensions.emus.y);
this.root.push(this.extent); this.root.push(this.extent);
this.root.push(new EffectExtent()); this.root.push(new EffectExtent());