Files
docx-js/docs/usage/packers.md
2025-02-17 21:22:07 +00:00

2.3 KiB

Packers

Packers are the way in which docx turns your code into .docx format. It is completely decoupled from the docx.Document.

Packers works in both a node and browser environment (Angular etc). Now, the packer returns a Buffer, Blob, string, base64 string, ArrayBuffer, or Stream. It is up to you to take that and persist it with node's fs, send it down as a downloadable file, or anything else you wish. As of version 4+, this library will not have options to export to PDF.

Export as Buffer

This will return a NodeJS Buffer. If this is used in the browser, it will return a UInt8Array instead.

Packer.toBuffer(doc).then((buffer) => {
    fs.writeFileSync("My Document.docx", buffer);
});

Export as string

Packer.toString(doc).then((string) => {
    console.log(string);
});

Export as a base64 string

Packer.toBase64String(doc).then((string) => {
    console.log(string);
});

Export as Blob

This is useful if you want to send it as an downloadable in a browser environment.

Packer.toBlob(doc).then((blob) => {
    // saveAs from FileSaver will download the file
    saveAs(blob, "example.docx");
});

Export as ArrayBuffer

This may be useful when working in a Node.js worker.

Packer.toArrayBuffer(doc).then((arrayBuffer) => {
    port.postMessage(arrayBuffer, [arrayBuffer]);
});

Export as a Stream

Packer.toStream(doc).then((stream) => {
    // read from stream
});

Export using optional arguments

The Packer methods support 2 optional arguments.

The first is for controlling the indentation of the xml and should be a boolean or keyof typeof PrettifyType.

The second is an array of subfile overrides ({path: string, data: string}[]). These overrides can be used to write additional subfiles to the result or even override default subfiles in the case that the default handling of these subfiles does not meet your needs.

const overrides = [{ path: "word/commentsExtended.xml", data: "string_data" }];
Packer.toString(doc, true, overrides).then((string) => {
    console.log(string);
});

Export to arbitrary formats

You can also use the lower-level Packer.pack method to export to any specified type.

Packer.pack(doc, 'string').then((string) => {
    console.log(string);
});