
Product
Introducing Webhook Events for Alert Changes
Add real-time Socket webhook events to your workflows to automatically receive software supply chain alert changes in real time.
docx-reporting
Advanced tools
NPM module to render a docx file from a template.
The template docx file support a template syntax for text insertion, conditionals, loops and images.
yarn add docx-reporting
import * as docx from "docx-reporting";
const template = fs.readFileSync(`template.docx`);
const data = {
text: "Hello, World!",
};
docx.generate(template, data).then(rendered => {
fs.writeFileSync(`rendered.docx`, rendered);
});
| Template | Description |
|---|---|
{value} | Simple placeholder. {value} will be substituted with the real value. |
{#items}...{/items} | Loop placeholder. The content within the loop scope, indicated by "...", will be repeated for as many items there are. See "Loops" below for further details |
{?value}...{/value} | Condition placeholder. The content within the condition scope, indicated by "...", will be rendered if value is not null, undefined or false. Otherwise the whole construct is removed. |
{!image}🖼️{/image} | Image placeholder. The image within, indicated by 🖼️, will be replaced with a provided image. See "Images" below for further details |
Each time the loop is rendered, the scope is set to the current array element.
Example:
Template:
{#fruits}
{name}
{price} EUR
{/fruits}
Data:
{
fruits: [{ name: "Apple", price: 1.0 }, { name: "Orange", price: 1.8 }];
}
To access variables outside the element scope, $parent can be used.
Example:
Template:
{#fruits}
{name}
{price} {$parent.currency}
{/fruits}
Data:
{
"currency": "EUR",
"fruits": [
{ "name": "Apple", "price": 1.0 },
{ "name": "Orange", "price": 1.8 }
]
}
Additionaly a set of special variables are provided for additional loop control
| Variable | Type | Description |
|---|---|---|
$index | number | iterator offset of the repeated element (0..length-1) |
$first | boolean | true if the repeated element is first in the iterator. |
$notFirst | boolean | true if the repeated element is not first in the iterator. |
$middle | boolean | true if the repeated element is between the first and last in the iterator. |
$last | boolean | true if the repeated element is last in the iterator. |
$notLast | boolean | true if the repeated element is not last in the iterator. |
$even | boolean | true if the iterator position $index is even |
$odd | boolean | true if the iterator position $index is odd |
The template need to include an image that will be repalced during rendering. You can use this placeholder image to set the correct size and position.
Example:
Template:
{?image}
🖼️
{/image}
Data:
{
"image": {
"name": "image.jpg"
}
}
The actual image data must be passed as an ArrayBuffer or Buffer as the third parameter to the docx.generate function.
import * as docx from "docx-reporting";
const template = fs.readFileSync(`template.docx`);
const image = fs.readFileSync(`image.jpg`);
const data = {
image: { name: "image.jpg" },
};
const media = {
"image.jpg": image,
};
docx.generate(template, data, media);
If you do not want your image to keep the size set in the template you can provide a size in pixels in the image object:
{
"image": {
"name": "image.jpg",
"size": {
"width": 500,
"height": 300
}
}
}
FAQs
Render a docx file from a template
The npm package docx-reporting receives a total of 31 weekly downloads. As such, docx-reporting popularity was classified as not popular.
We found that docx-reporting demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Product
Add real-time Socket webhook events to your workflows to automatically receive software supply chain alert changes in real time.

Security News
ENISA has become a CVE Program Root, giving the EU a central authority for coordinating vulnerability reporting, disclosure, and cross-border response.

Product
Socket now scans OpenVSX extensions, giving teams early detection of risky behaviors, hidden capabilities, and supply chain threats in developer tools.