Add buffer packer

This commit is contained in:
Dolan Miu
2018-07-01 02:16:11 +01:00
parent 4b06baab3f
commit ded155a6af
4 changed files with 68 additions and 0 deletions

20
demo/demo19.js Normal file
View File

@ -0,0 +1,20 @@
const fs = require("fs");
const docx = require("../build");
var doc = new docx.Document();
var paragraph = new docx.Paragraph("Hello World");
var institutionText = new docx.TextRun("Foo").bold();
var dateText = new docx.TextRun("Bar").tab().bold();
paragraph.addRun(institutionText);
paragraph.addRun(dateText);
doc.addParagraph(paragraph);
var exporter = new docx.BufferPacker(doc);
exporter.pack("My Document").then((buffer) => {
// At this point, you can do anything with the buffer, including casting it to a string etc.
console.log(buffer);
fs.writeFileSync('My Document.docx', buffer);
console.log("Document created successfully at project root!");
});

View File

@ -2,3 +2,4 @@ export * from "./packer/local";
export * from "./packer/express"; export * from "./packer/express";
export * from "./packer/packer"; export * from "./packer/packer";
export * from "./packer/stream"; export * from "./packer/stream";
export * from "./packer/buffer";

View File

@ -0,0 +1,28 @@
import { Writable } from "stream";
export class BufferStream extends Writable {
private data: Buffer[];
constructor() {
super();
this.data = [];
}
// tslint:disable-next-line:no-any
public _write(chunk: any, encoding: string, next: (err?: Error) => void): void {
this.data.push(Buffer.from(chunk));
next();
}
// tslint:disable-next-line:ban-types
public end(cb?: Function): void {
super.end(cb);
this.emit("close");
}
public get Buffer(): Buffer {
return Buffer.concat(this.data);
}
}

View File

@ -0,0 +1,19 @@
import { File } from "../../file";
import { BufferStream } from "./buffer-stream";
import { Compiler } from "./compiler";
export class BufferPacker {
private readonly packer: Compiler;
constructor(file: File) {
this.packer = new Compiler(file);
}
public async pack(): Promise<Buffer> {
const stream = new BufferStream();
await this.packer.compile(stream);
return stream.Buffer;
}
}