- スキャンID:
- e7abbfac-71e8-4550-8420-7b09d9e060dd終了
- 送信済みURL:
- https://docxtemplater.com/docker/
- レポート終了日:
リンク · 8件検出
ページから特定された発信リンク
リンク | テキスト |
---|---|
https://github.com/open-xml-templating/docxtemplater/issues/764 | View Github issue |
https://github.com/peerigon/angular-expressions/security/advisories/GHSA-5462-4vcx-jh7j | this github advisory |
https://github.com/peerigon/angular-expressions/security/advisories/GHSA-hxhm-96pp-2m43 | advisory |
https://github.com/open-xml-templating/docxtemplater/issues/488 | github issue |
https://cal.com/coding-puffin/docxtemplater | Talk with sales |
https://codingpuffin.com/ | Coding Puffin |
https://www.freepik.com/ | Freepik |
https://www.flaticon.com/ | www.flaticon.com |
JavaScript変数 · 26件検出
ページのウィンドウオブジェクトにロードされたグローバルのJavaScript変数は関数以外の場所で宣言された変数で、現在のスコープ内であればコードのどこからでもアクセス可能です
名前 | 規模 |
---|---|
onbeforetoggle | object |
documentPictureInPicture | object |
onscrollend | object |
docsSearchBar | function |
currentSearch | string |
debounce | function |
trackSearch | function |
_zid | number |
_paq | object |
waitUntilInstalled | function |
コンソールログメッセージ · 1件検出
Webコンソールにログ記録されたメッセージ
規模 | 分類 | ログ |
---|---|---|
log | other |
|
HTML
未加工のHTMLページ本文
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><!-- Instruct Internet Explorer to use its latest rendering engine --><meta http-equiv="x-ua-compatible" content="ie=edge"><!-- Viewport for responsive web design --><meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover"><title>Docker Container | docxtemplater</title><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="keywords" content="docxtemplater, docker, modules, ENTREPRISE"><meta name="description" content="A docker image with all docxtemplater modules activated, part of the ENTREPRISE plan"><meta name="author" content="Edgar Hipp"><style>html{display:none}body{font-family:karla,sans-serif;-webkit-font-smoothing:antialiased;background-color:#fefeff;color:#5c5c5c}.codeblock{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*{border:0}applet,body,div,html,iframe,li,object,p,span,ul{margin:0;padding:0;font-weight:400}h1{font-size:58px;padding-bottom:20px}h2{font-size:36px;padding-bottom:10px}*+h2{padding-bottom:10px;padding-top:60px}h2 strong{font-size:.6em}h3{font-size:24px;padding-bottom:8px;padding-top:16px}h4{font-size:18px;padding-bottom:8px;padding-top:16px}h5{font-size:14px;padding-bottom:8px;padding-top:15px}h5 a{font-weight:300}footer h4{padding-top:0}p,ul{font-size:16px;line-height:24px;text-align:left}.heading,h1,h2,h3,h4,h5,h6{color:#262727;font-weight:800}nav svg{width:3rem;height:3rem}.computerwrapper{height:100%;position:relative}.computerwrapper svg{max-width:7rem;max-width:15rem;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.home-nav svg{fill:#703fff;margin-right:32px}body.scrolled nav{box-shadow:0 4px 8px 1px #dedede}nav{padding:14px 0;position:fixed;background-color:#fff;top:0;height:72px;width:100%;width:100vw;z-index:10;padding-right:2rem}nav .navigation{display:flex;height:100%;justify-content:space-between}.meilisearch-autocomplete.meilisearch-autocomplete-right .dsb-dropdown-menu:before{right:48px;top:30px}#meilisearch-autocomplete-listbox-0{min-width:100%}.home-nav{margin-left:1rem}a{text-decoration:none;font-weight:600}a:not(.btn):not(.cp_nav-link){color:#713ffe}a:visited:not(.btn):not(.cp_nav-link){color:#713ffe}a:focus{outline:0}a:hover{text-decoration:none}a.cp_nav-link{text-decoration:none;font-size:18px;color:#5c5c5c;padding:0;font-weight:600;display:inline-block;-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none;vertical-align:middle;flex:0 .5;line-height:46px}.cp_nav-link:not(:first-of-type){margin-left:20px}@media (max-width:900px){.cp_nav-link:not(:first-of-type){margin-left:7px}}</style><link rel="stylesheet" type="text/css" href="/css/main.css"><!-- Standard favicon --><link rel="icon" type="image/x-icon" href="/favicon.ico"><!-- Recommended favicon format --><link rel="icon" type="image/png" href="/favicon.png"><noscript><style>.jsonly{display:none}</style></noscript></head><body class="dockerpage"><div class="d-none" id="offline_status" style="position:fixed;bottom:0;z-index:1">You are currently offline, serving cached version</div><svg xmlns="http://www.w3.org/2000/svg" style="display:none"><symbol id="checkmark" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path></symbol><symbol id="cross" viewBox="-250 -250 750 750"><path d="M285.08,230.397L456.218,59.27c6.076-6.077,6.076-15.911,0-21.986L423.511,4.565c-2.913-2.911-6.866-4.55-10.992-4.55 c-4.127,0-8.08,1.639-10.993,4.55l-171.138,171.14L59.25,4.565c-2.913-2.911-6.866-4.55-10.993-4.55 c-4.126,0-8.08,1.639-10.992,4.55L4.558,37.284c-6.077,6.075-6.077,15.909,0,21.986l171.138,171.128L4.575,401.505 c-6.074,6.077-6.074,15.911,0,21.986l32.709,32.719c2.911,2.911,6.865,4.55,10.992,4.55c4.127,0,8.08-1.639,10.994-4.55 l171.117-171.12l171.118,171.12c2.913,2.911,6.866,4.55,10.993,4.55c4.128,0,8.081-1.639,10.992-4.55l32.709-32.719 c6.074-6.075,6.074-15.909,0-21.986L285.08,230.397z"></path></symbol></svg><nav><div class="navigation"><a href="/" class="home-nav"><svg xmlns="http://www.w3.org/2000/svg" version="1.0" viewBox="220 220 550 550"><path d="M245 255v9l2.8.5c25.3 5.3 33.4 11 50.8 35.6 13.1 18.4 143.8 210.5 151.8 223l1.7 2.6-15.3 19.9c-45.1 59-116.8 148.5-127.7 159.5-15.2 15.3-28.1 22-51.5 26.6l-13.6 2.7v7c0 3.9-.3 8.1-.6 9.3l-.6 2.3H431v-9.4c0-10.3-.1-10.5-7.5-10.6-5.9 0-31.6-5.9-37.5-8.6-11.5-5.1-16.5-14.7-14.1-26.6 3.5-16.8 24.5-49 81.9-126.1l15.5-20.7 4.2 6.2c17.9 26.7 72.8 115.9 79.5 129.3 8.7 17.1 9.9 26.9 4.4 34.3-5.1 6.6-14.5 9.5-38.4 11.8-9.1.9-16.6 1.7-16.6 1.7-.1.1-.4 4.4-.6 9.4l-.4 9.3h255.2l-.4-8.8c-.2-4.8-.7-9-1.1-9.4-.3-.4-3.9-1.4-7.9-2.2-20.6-4.3-33.6-17.9-69.2-72.5-23.6-36.3-93-144.3-110.2-171.6-14.2-22.5-18.8-30.4-18.8-32.4 0-1.6 56.7-80.1 75.8-105 23.7-30.9 49.7-58.7 63-67.5 12.5-8.2 30.5-14.8 48.7-17.6 12.8-2 11.5-.8 11.5-11v-9H560.9l.3 9.2.3 9.2 14 1.8c21.3 2.6 25.5 3.5 29.7 6.3 7.9 5.3 10.8 17.4 7.3 31-3.5 13.8-12.8 28.6-49.4 78.5-31.9 43.4-33.1 45-34 45-1 0-10.4-14-37.1-55.5-45.1-69.9-45.9-71.5-46-82.9 0-8.7 3-14.5 9.1-17.6 4.3-2.3 18.2-4.6 32.9-5.5 5.2-.3 11-.8 12.8-1.1l3.2-.5V246H245z"></path></svg></a><input id="menu-toggle" type="checkbox"> <label class="menu-button-container" for="menu-toggle"><div class="menu-button"></div></label><div class="menu"><a href="/demo" class="cp_nav-link">Demo</a> <a href="/docs" class="cp_nav-link">Docs</a> <a href="/pricing" class="cp_nav-link">Pricing</a> <a href="/faq" class="cp_nav-link secondary-link">FAQ</a> <a href="https://blog.docxtemplater.com/" class="cp_nav-link">Blog</a> <div class="docs-searchbar-js" data-ds-theme="light"><span class="meilisearch-autocomplete" style="position: relative; display: inline-block; direction: ltr;"><input id="meili" type="search" placeholder="search modules, docs, faq, ..." class="form-control dsb-input" style="position: relative; vertical-align: top;" autocomplete="off" spellcheck="false" role="combobox" aria-autocomplete="list" aria-expanded="false" aria-label="search input" aria-owns="meilisearch-autocomplete-listbox-0" dir="auto"><pre aria-hidden="true" style="position: absolute; visibility: hidden; white-space: pre; font-family: Inter; font-size: 13.3333px; font-style: normal; font-variant: normal; font-weight: 500; word-spacing: 0px; letter-spacing: normal; text-indent: 0px; text-rendering: auto; text-transform: none;"></pre><span class="dsb-dropdown-menu" role="listbox" id="meilisearch-autocomplete-listbox-0" style="position: absolute; top: 100%; z-index: 100; display: none;"><div class="dsb-dataset-1"></div></span></span></div> <a href="/client-admin" class="cp_nav-link">Login</a></div></div></nav><div class="post-nav"></div><div class="announcement">10 December 2024 : If you are using angular-expressions to parse expressions such as {user.name}, {#users.length > 10}, please upgrade asap to [email protected] for security reasons : <a href="https://github.com/open-xml-templating/docxtemplater/issues/764">View Github issue</a></div><div class="container-fluid"><div class="module-documentation-container"><div class="sticky-navbar-container"><div class="sticky-navbar toc"><strong>Version 3.36.3</strong> <a href="#docker-image" class="level-1">Docker Image</a> <a href="#sdks" class="level-1">Sdks</a> <a href="#exposed-http-api" class="level-1">Exposed HTTP API</a> <a href="#usage-with-curl" class="level-1">Usage with curl</a> <a href="#configuration" class="level-1">Configuration</a> <a href="#logging" class="level-1">Logging</a> <a href="#specs-to-host-the-docker-image" class="level-1">Specs to host the docker image</a> <a href="#image-sizing" class="level-1">Image sizing</a> <a href="#using-a-custom-certificate" class="level-1">Using a custom certificate</a> <a href="#openapi-specification" class="level-1">OpenAPI specification :</a> <a href="#changelog" class="level-1">Changelog</a> <a class="rss-link" href="/modules/docker/releases.rss"><img src="/img/rss.png" alt="RSS">Releases RSS Feed</a><div class="highlight-menu" style="top: 198px; left: 12px;"></div></div></div><div class="module-documentation"><div class="readme"><a class="anchor" id="readme"></a> <a class="anchor" id="docker-image"></a><h2><a href="#docker-image">Docker Image</a></h2><p>The docker image allows you to run docxtemplater with all 18 docxtemplater modules contained in the ENTREPRISE plan, without having to configure them. The modules are already configured to sane defaults (and customizable) and work well with each other.</p><a class="anchor" id="sdks"></a><h2><a href="#sdks">Sdks</a></h2><p>We have developped manys sdks in multiple languages to allow you to generate your documents from those languages :</p><ul><li>node.js <img src="/langs/nodejs.svg" alt="" width="52" height="30"></li><li>go <img src="/langs/go.svg" alt="" width="30" height="30"></li><li>python3 <img src="/langs/python.svg" alt="" width="30" height="30"></li><li>PHP <img src="/langs/php.svg" alt="" width="60" height="30"></li><li>ruby <img src="/langs/ruby.svg" alt="" width="30" height="30"></li><li>dart <img src="/langs/dart.svg" alt="" width="60" height="30"></li><li>C# <img src="/langs/csharp.svg" alt="" width="60" height="30"></li><li>C <img src="/langs/c.svg" alt="" width="60" height="30"></li><li>C++ <img src="/langs/cpp.svg" alt="" width="60" height="30"></li><li>Java <img src="/langs/java.svg" alt="" width="40" height="40"></li><li>Lua <img src="/langs/lua.svg" alt="" width="40" height="40"></li><li>Rust <img src="/langs/rust.svg" alt="" width="40" height="40"></li></ul><p>After downloading the docker image, you can find all sdks in the <code>sdk/</code> folder for example : <code>sdk/php/</code>.</p><a class="anchor" id="exposed-http-api"></a><h2><a href="#exposed-http-api">Exposed HTTP API</a></h2><p>The API exposes an HTTP <code>POST</code> route to do the generation that takes as input the template file and the data to be used for the generation.</p><p>The API outputs the generated file as docx, pptx or xlsx.</p><p>The docker image can be used to generate documents from other languages (Java, .Net), since it only requires to do one HTTP Call.</p><a class="anchor" id="usage-with-curl"></a><h2><a href="#usage-with-curl">Usage with curl</a></h2><p>This example requires you to have input.docx, data.json and it exports output.docx</p><div class="relative pre-container"><button class="btn btn-xs btn-secondary" onclick="copy_code(event)" style="position:absolute;right:8px;top:6px">Copy</button><pre><code class="js language-bash"><span class="hljs-comment"># creates a new file descriptor 3 that redirects to 1 (STDOUT)</span>
<span class="hljs-built_in">exec</span> 3><span class="hljs-string">"output.docx"</span>
<span class="hljs-comment"># Run curl in a separate command,</span>
<span class="hljs-comment"># capturing output of -w "%{http_code}" into HTTP_STATUS</span>
<span class="hljs-comment"># and sending the content to this command's STDOUT with -o >(cat >&3)</span>
curl --silent \
-X POST \
-F <span class="hljs-string">"[email protected]"</span> \
-F <span class="hljs-string">"filecomment=This is an image file"</span> \
-F <span class="hljs-string">"[email protected]"</span> \
-w <span class="hljs-string">"%{http_code}"</span> \
<span class="hljs-string">"<span class="hljs-variable">$host</span>/api/v1/generate"</span> \
-o >(<span class="hljs-built_in">cat</span> >&3) >/tmp/httpstatus || code=<span class="hljs-string">"$?"</span>
</code></pre></div><p>It is also possible to get the list of tags in a template (no generation done, by using following script :</p><div class="relative pre-container"><button class="btn btn-xs btn-secondary" onclick="copy_code(event)" style="position:absolute;right:8px;top:6px">Copy</button><pre><code class="js language-bash">curl --silent \
-X POST \
-F <span class="hljs-string">"[email protected]"</span> \
<span class="hljs-string">"<span class="hljs-variable">$host</span>/api/v1/retrieve-tags"</span> || code=<span class="hljs-string">"$?"</span>
</code></pre></div><a class="anchor" id="configuration"></a><h2><a href="#configuration">Configuration</a></h2><p>It is possible to configure your instance by editing the <code>configuration.js</code> file.</p><p>There are different parts that you can configure.</p><p>By implementing <code>configureAngularParser</code>, you can add angular filters that you want to be able to use in your template :</p><div class="relative pre-container"><button class="btn btn-xs btn-secondary" onclick="copy_code(event)" style="position:absolute;right:8px;top:6px">Copy</button><pre><code class="js language-js"><span class="hljs-variable language_">module</span>.<span class="hljs-property">exports</span> = {
<span class="hljs-title function_">configureAngularParser</span>(<span class="hljs-params">expressions</span>) {
<span class="hljs-comment">/* Here you can define custom filters
* For example if you wish to write { clientName | upper }
*/</span>
expressions.<span class="hljs-property">filters</span>.<span class="hljs-property">upper</span> = <span class="hljs-keyword">function</span> (<span class="hljs-params">input</span>) {
<span class="hljs-comment">// Make sure that if your input is undefined, your</span>
<span class="hljs-comment">// output will be undefined as well and will not</span>
<span class="hljs-comment">// throw an error</span>
<span class="hljs-keyword">if</span> (!input) {
<span class="hljs-keyword">return</span> input;
}
<span class="hljs-keyword">return</span> input.<span class="hljs-title function_">toUpperCase</span>();
};
<span class="hljs-keyword">return</span> expressions;
},
};
</code></pre></div><p>By implementing <code>configureDocxtemplater</code>, you can attach additional modules that you have developped yourself.</p><div class="relative pre-container"><button class="btn btn-xs btn-secondary" onclick="copy_code(event)" style="position:absolute;right:8px;top:6px">Copy</button><pre><code class="js language-js"><span class="hljs-variable language_">module</span>.<span class="hljs-property">exports</span> = {
<span class="hljs-title function_">configureDocxtemplater</span>(<span class="hljs-params">doc</span>) {
<span class="hljs-comment">/*
* Here you can configure the docxtemplater instance before compiling/rendering
* For example :
*
* doc.attachModule(new MyCustomModule());
*/</span>
<span class="hljs-keyword">return</span> doc;
},
};
</code></pre></div><p>By implementing <code>configureModule</code>, you can modify the configuration of a given module.</p><div class="relative pre-container"><button class="btn btn-xs btn-secondary" onclick="copy_code(event)" style="position:absolute;right:8px;top:6px">Copy</button><pre><code class="js language-js"><span class="hljs-variable language_">module</span>.<span class="hljs-property">exports</span> = {
<span class="hljs-title function_">configureModule</span>(<span class="hljs-params">moduleName, options</span>) {
<span class="hljs-comment">/*
* Here you can configure each of the docxtemplater modules
* For example to fetch urls for the image module :
*/</span>
<span class="hljs-keyword">const</span> https = <span class="hljs-built_in">require</span>(<span class="hljs-string">"https"</span>);
<span class="hljs-keyword">const</span> http = <span class="hljs-built_in">require</span>(<span class="hljs-string">"http"</span>);
<span class="hljs-keyword">const</span> <span class="hljs-title class_">Stream</span> = <span class="hljs-built_in">require</span>(<span class="hljs-string">"stream"</span>).<span class="hljs-property">Transform</span>;
<span class="hljs-keyword">if</span> (moduleName === <span class="hljs-string">"image"</span>) {
options.<span class="hljs-property">getImage</span> = <span class="hljs-keyword">function</span> (<span class="hljs-params">url</span>) {
<span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Promise</span>(<span class="hljs-keyword">function</span> (<span class="hljs-params">resolve, reject</span>) {
(url.<span class="hljs-title function_">substr</span>(<span class="hljs-number">0</span>, <span class="hljs-number">5</span>) === <span class="hljs-string">"https"</span> ? https : http)
.<span class="hljs-title function_">request</span>(url, <span class="hljs-keyword">function</span> (<span class="hljs-params">response</span>) {
<span class="hljs-keyword">if</span> (response.<span class="hljs-property">statusCode</span> !== <span class="hljs-number">200</span>) {
<span class="hljs-keyword">return</span> <span class="hljs-title function_">reject</span>(
<span class="hljs-keyword">new</span> <span class="hljs-title class_">Error</span>(
<span class="hljs-string">`Request to <span class="hljs-subst">${url}</span> failed, status code: <span class="hljs-subst">${response.statusCode}</span>`</span>
)
);
}
<span class="hljs-keyword">const</span> data = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Stream</span>();
response.<span class="hljs-title function_">on</span>(
<span class="hljs-string">"data"</span>,
<span class="hljs-keyword">function</span> (<span class="hljs-params">chunk</span>) {
data.<span class="hljs-title function_">push</span>(chunk);
}
);
response.<span class="hljs-title function_">on</span>(<span class="hljs-string">"end"</span>, <span class="hljs-keyword">function</span> (<span class="hljs-params"></span>) {
<span class="hljs-title function_">resolve</span>(data.<span class="hljs-title function_">read</span>());
});
response.<span class="hljs-title function_">on</span>(<span class="hljs-string">"error"</span>, <span class="hljs-keyword">function</span> (<span class="hljs-params">e</span>) {
<span class="hljs-title function_">reject</span>(e);
});
})
.<span class="hljs-title function_">end</span>();
});
};
}
<span class="hljs-keyword">return</span> options;
},
};
</code></pre></div><a class="anchor" id="logging"></a><h2><a href="#logging">Logging</a></h2><p>By default, the docker container will store :</p><ol><li>The templates + request in the folder : <code>/var/docxstore/:uuid/doc</code> => contains the docx file for a given generation</li><li><strong>Logs</strong> (which contains the data used for the templates). Those are printed to stdout, and are then stored by docker.</li><li><strong>Errors</strong> (which contains stacktraces, list of errors in the template).</li></ol><p>All three of this things can be set to not be logged.</p><ol><li>For not storing the templates, set the <code>STORE_TEMPLATES</code> env variable to <code>false</code>.</li><li>For not storing the normal logs, set the <code>LOG_REQUESTS</code> env variable to <code>false</code>.</li><li>For not storing the errors, set the <code>LOG_ERRORS</code> env variable to <code>false</code>.</li></ol><p>So if you want to stop storing any kind of logs, do the following :</p><div class="relative pre-container"><button class="btn btn-xs btn-secondary" onclick="copy_code(event)" style="position:absolute;right:8px;top:6px">Copy</button><pre><code class="js language-bash">STORE_TEMPLATES=<span class="hljs-literal">false</span> LOG_REQUESTS=<span class="hljs-literal">false</span> LOG_ERRORS=<span class="hljs-literal">false</span> ./run.bash
</code></pre></div><a class="anchor" id="specs-to-host-the-docker-image"></a><h2><a href="#specs-to-host-the-docker-image">Specs to host the docker image</a></h2><p>You can host the docker image on an EC2 Amazon instance for example, or on a virtual machine that you own.</p><p>Recommended specs would be :</p><ul><li><p>A decent CPU, the docker image uses only one core (no parallelism in docxtemplater), so you don't "need" a 16 CPU server. (But you can have one instance of the docker image for each CPU if you expect very high load). Docxtemplater is CPU bound, meaning that to improve the speed of your docker instance, the most useful thing to do is to upgrade your CPU</p></li><li><p>2GB of Ram or more for each instance of the docker image</p></li><li><p>SSD and good network quality cannot hurt as well.</p></li></ul><a class="anchor" id="image-sizing"></a><h2><a href="#image-sizing">Image sizing</a></h2><p>The algorithm for image sizing since version 3.21.0 will :</p><p>Calculate the intrinsic image size in pixel of the image coming from your data source.</p><p>Calculate the width and height of the container of the {%image} text.</p><p>It will then scale the image down if the width of the intrinsic image exceeds that of its container. It will not scale the image up to avoid scaled up images with low quality.</p><p>You can also decide to scale up or down some images using following syntax :</p><ul><li><p><code>{%image | scale:2}</code> If the intrinsic image size is 100px/100px, it will scale it up to 200px/200px.</p></li><li><p><code>{%image | scale:.5}</code> If the intrinsic image size is 100px/100px, it will scale it down to 50px/50px.</p></li><li><p><code>{%image | maxWidth:100}</code> This will set the maxWidth to 100px, hence the image will not be able to stretch over more than 100px in the word document. If the intrinsic image size is 200px/200px, the final size will be 100px/100px. If the intrinsic size is 60px/60px, the image will not be scaled up, and the final size will be 60px/60px.</p></li><li><p><code>{%image | maxWidth:"1in"}</code> This will set the maxWidth to 1 inch, hence the image will not be able to stretch over more than 1 inch in the word document</p></li></ul><a class="anchor" id="using-a-custom-certificate"></a><h2><a href="#using-a-custom-certificate">Using a custom certificate</a></h2><p>It is possible to use a custom certificate by adding your certificate in same folder as the "Dockerfile", simply put your certificate in that folder with the name : <code>ca-certificate.crt</code>.</p><p>That certificate will then be used during the package installation and for requests done using the Imagemodule, using following data for example :</p><div class="relative pre-container"><button class="btn btn-xs btn-secondary" onclick="copy_code(event)" style="position:absolute;right:8px;top:6px">Copy</button><pre><code class="js language-json"><span class="hljs-punctuation">{</span>
<span class="hljs-attr">"image"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"https://docxtemplater.com/puffin.png"</span>
<span class="hljs-punctuation">}</span>
</code></pre></div><a class="anchor" id="openapi-specification"></a><h2><a href="#openapi-specification">OpenAPI specification :</a></h2><div class="relative pre-container"><button class="btn btn-xs btn-secondary" onclick="copy_code(event)" style="position:absolute;right:8px;top:6px">Copy</button><pre><code class="js language-yml"><span class="hljs-attr">openapi:</span> <span class="hljs-number">3.0</span><span class="hljs-number">.0</span>
<span class="hljs-attr">info:</span>
<span class="hljs-attr">version:</span> <span class="hljs-number">1.0</span><span class="hljs-number">.0</span>
<span class="hljs-attr">title:</span> <span class="hljs-string">Docxtemplater</span> <span class="hljs-string">docker</span> <span class="hljs-string">api</span>
<span class="hljs-attr">description:</span> <span class="hljs-string">A</span> <span class="hljs-string">docker</span> <span class="hljs-string">API</span> <span class="hljs-string">that</span> <span class="hljs-string">allows</span> <span class="hljs-string">to</span> <span class="hljs-string">render</span> <span class="hljs-string">a</span> <span class="hljs-string">docx/pptx/xlsx</span> <span class="hljs-string">template</span> <span class="hljs-string">with</span> <span class="hljs-string">JSON</span> <span class="hljs-string">data.</span>
<span class="hljs-attr">externalDocs:</span>
<span class="hljs-attr">url:</span> <span class="hljs-string">https://docxtemplater.com/docker/</span>
<span class="hljs-attr">paths:</span>
<span class="hljs-string">/api/v1/retrieve-tags:</span>
<span class="hljs-attr">post:</span>
<span class="hljs-attr">requestBody:</span>
<span class="hljs-attr">required:</span> <span class="hljs-literal">true</span>
<span class="hljs-attr">content:</span>
<span class="hljs-attr">multipart/form-data:</span>
<span class="hljs-attr">schema:</span>
<span class="hljs-attr">type:</span> <span class="hljs-string">object</span>
<span class="hljs-attr">properties:</span>
<span class="hljs-attr">doc:</span>
<span class="hljs-attr">type:</span> <span class="hljs-string">string</span>
<span class="hljs-attr">format:</span> <span class="hljs-string">binary</span>
<span class="hljs-attr">description:</span> <span class="hljs-string">The</span> <span class="hljs-string">docx/pptx/xlsx</span> <span class="hljs-string">template</span>
<span class="hljs-attr">required:</span>
<span class="hljs-bullet">-</span> <span class="hljs-string">doc</span>
<span class="hljs-attr">parameters:</span>
<span class="hljs-bullet">-</span> <span class="hljs-attr">in:</span> <span class="hljs-string">query</span>
<span class="hljs-attr">name:</span> <span class="hljs-string">delimiters</span>
<span class="hljs-attr">schema:</span>
<span class="hljs-attr">type:</span> <span class="hljs-string">string</span>
<span class="hljs-attr">description:</span> <span class="hljs-string">Delimiters</span> <span class="hljs-string">that</span> <span class="hljs-string">should</span> <span class="hljs-string">be</span> <span class="hljs-string">used</span> <span class="hljs-string">instead</span> <span class="hljs-string">of</span> {<span class="hljs-string">user</span>}
<span class="hljs-attr">example:</span> <span class="hljs-string">"[[ ]]"</span>
<span class="hljs-attr">responses:</span>
<span class="hljs-attr">"200":</span>
<span class="hljs-attr">description:</span> <span class="hljs-string">The</span> <span class="hljs-string">list</span> <span class="hljs-string">of</span> <span class="hljs-string">the</span> <span class="hljs-string">tags</span> <span class="hljs-string">that</span> <span class="hljs-string">are</span> <span class="hljs-string">defined</span> <span class="hljs-string">in</span> <span class="hljs-string">the</span> <span class="hljs-string">docxtemplate</span>
<span class="hljs-string">/api/v1/generate:</span>
<span class="hljs-attr">post:</span>
<span class="hljs-attr">requestBody:</span>
<span class="hljs-attr">required:</span> <span class="hljs-literal">true</span>
<span class="hljs-attr">content:</span>
<span class="hljs-attr">multipart/form-data:</span>
<span class="hljs-attr">schema:</span>
<span class="hljs-attr">type:</span> <span class="hljs-string">object</span>
<span class="hljs-attr">properties:</span>
<span class="hljs-attr">data:</span>
<span class="hljs-attr">type:</span> <span class="hljs-string">string</span>
<span class="hljs-attr">description:</span> <span class="hljs-string">The</span> <span class="hljs-string">JSON</span> <span class="hljs-string">data</span> <span class="hljs-string">to</span> <span class="hljs-string">apply</span> <span class="hljs-string">to</span> <span class="hljs-string">the</span> <span class="hljs-string">template</span>
<span class="hljs-attr">example:</span> <span class="hljs-string">'{ "name": "John" }'</span>
<span class="hljs-attr">doc:</span>
<span class="hljs-attr">type:</span> <span class="hljs-string">string</span>
<span class="hljs-attr">format:</span> <span class="hljs-string">binary</span>
<span class="hljs-attr">description:</span> <span class="hljs-string">The</span> <span class="hljs-string">docx/pptx/xlsx</span> <span class="hljs-string">template</span>
<span class="hljs-attr">delimiters:</span>
<span class="hljs-attr">type:</span> <span class="hljs-string">string</span>
<span class="hljs-attr">description:</span> <span class="hljs-string">Delimiters</span> <span class="hljs-string">that</span> <span class="hljs-string">should</span> <span class="hljs-string">be</span> <span class="hljs-string">used</span> <span class="hljs-string">instead</span> <span class="hljs-string">of</span> {<span class="hljs-string">user</span>}
<span class="hljs-attr">example:</span> <span class="hljs-string">"[[ ]]"</span>
<span class="hljs-attr">required:</span>
<span class="hljs-bullet">-</span> <span class="hljs-string">doc</span>
<span class="hljs-bullet">-</span> <span class="hljs-string">data</span>
<span class="hljs-attr">parameters:</span>
<span class="hljs-bullet">-</span> <span class="hljs-attr">in:</span> <span class="hljs-string">query</span>
<span class="hljs-attr">name:</span> <span class="hljs-string">delimiters</span>
<span class="hljs-attr">schema:</span>
<span class="hljs-attr">type:</span> <span class="hljs-string">string</span>
<span class="hljs-attr">description:</span> <span class="hljs-string">Delimiters</span> <span class="hljs-string">that</span> <span class="hljs-string">should</span> <span class="hljs-string">be</span> <span class="hljs-string">used</span> <span class="hljs-string">instead</span> <span class="hljs-string">of</span> {<span class="hljs-string">user</span>}
<span class="hljs-attr">example:</span> <span class="hljs-string">"[[ ]]"</span>
<span class="hljs-bullet">-</span> <span class="hljs-attr">in:</span> <span class="hljs-string">query</span>
<span class="hljs-attr">name:</span> <span class="hljs-string">imagesize</span>
<span class="hljs-attr">schema:</span>
<span class="hljs-attr">type:</span> <span class="hljs-string">string</span>
<span class="hljs-attr">description:</span> <span class="hljs-string">Max</span> <span class="hljs-string">Image</span> <span class="hljs-string">size,</span> <span class="hljs-string">in</span> <span class="hljs-string">format</span> <span class="hljs-string">"<width>x<height>"</span><span class="hljs-string">,</span> <span class="hljs-string">in</span> <span class="hljs-string">pixels,</span> <span class="hljs-string">that</span> <span class="hljs-string">will</span> <span class="hljs-string">not</span> <span class="hljs-string">be</span> <span class="hljs-string">eceeded</span>
<span class="hljs-attr">example:</span> <span class="hljs-string">"200x300"</span>
<span class="hljs-attr">responses:</span>
<span class="hljs-attr">"200":</span>
<span class="hljs-attr">description:</span> <span class="hljs-string">The</span> <span class="hljs-string">filled</span> <span class="hljs-string">in</span> <span class="hljs-string">document</span>
<span class="hljs-attr">content:</span>
<span class="hljs-attr">application/vnd.openxmlformats-officedocument.wordprocessingml.document:</span>
<span class="hljs-attr">schema:</span>
<span class="hljs-attr">type:</span> <span class="hljs-string">string</span>
<span class="hljs-attr">format:</span> <span class="hljs-string">binary</span>
<span class="hljs-attr">application/vnd.openxmlformats-officedocument.spreadsheetml.sheet:</span>
<span class="hljs-attr">schema:</span>
<span class="hljs-attr">type:</span> <span class="hljs-string">string</span>
<span class="hljs-attr">format:</span> <span class="hljs-string">binary</span>
<span class="hljs-attr">application/vnd.openxmlformats-officedocument.presentationml.presentation:</span>
<span class="hljs-attr">schema:</span>
<span class="hljs-attr">type:</span> <span class="hljs-string">string</span>
<span class="hljs-attr">format:</span> <span class="hljs-string">binary</span>
<span class="hljs-attr">headers:</span>
<span class="hljs-attr">Content-Disposition:</span>
<span class="hljs-attr">schema:</span>
<span class="hljs-attr">type:</span> <span class="hljs-string">string</span>
<span class="hljs-attr">example:</span> <span class="hljs-string">attachment;</span> <span class="hljs-string">filename="generated.docx"</span>
</code></pre></div></div><div class="changelog"><a id="changelog" class="anchor"></a><h2><a href="#changelog">CHANGELOG</a></h2><a class="anchor" id="3-36-3"></a><h3><a href="#3-36-3">3.36.3</a></h3><p>Fix output of <code>/retrieve-tags</code> and <code>/retrieve-structured-tags</code> when the template is invalid, such as :</p><div class="herodoc small word"><div class="toolbar"></div><div class="doccontainer"><div class="doccontent"><button onclick="copy_doc(event)" class="btn btn-xs btn-secondary">Copy</button><div>Hello {user<br></div></div></div></div><a class="anchor" id="3-36-2"></a><h3><a href="#3-36-2">3.36.2</a></h3><p>Fix CVE-2024-54152</p><p>(Upgrades to fixed package [email protected]).</p><p>See <a href="https://github.com/peerigon/angular-expressions/security/advisories/GHSA-5462-4vcx-jh7j">this github advisory</a>.</p><a class="anchor" id="3-36-1"></a><h3><a href="#3-36-1">3.36.1</a></h3><ul><li>Add sortBy filter</li><li>Update docxtemplater to 3.55.0</li><li>Update xlsx-module to 3.27.0</li></ul><a class="anchor" id="3-36-0"></a><h3><a href="#3-36-0">3.36.0</a></h3><ul><li>Update to use docxtemplater v4 api. Drop <code>configureDocxtemplater</code> API</li></ul><p>If you're using configureDocxtemplater to add new modules, please convert your code from :</p><div class="relative pre-container"><button class="btn btn-xs btn-secondary" onclick="copy_code(event)" style="position:absolute;right:8px;top:6px">Copy</button><pre><code class="js language-js"><span class="hljs-keyword">const</span> <span class="hljs-title class_">CommentModule</span> = <span class="hljs-built_in">require</span>(<span class="hljs-string">"./comment-module.js"</span>);
<span class="hljs-variable language_">module</span>.<span class="hljs-property">exports</span> = {
<span class="hljs-comment">/* code */</span>
<span class="hljs-title function_">configureDocxtemplater</span>(<span class="hljs-params">doc</span>) {
doc.<span class="hljs-title function_">attachModule</span>(<span class="hljs-keyword">new</span> <span class="hljs-title class_">CommentModule</span>());
<span class="hljs-comment">/*
* Here you can configure the docxtemplater instance before compiling/rendering
* For example :
*
* doc.attachModule(new MyCustomModule());
*/</span>
<span class="hljs-keyword">return</span> doc;
},
};
</code></pre></div><p>To this :</p><div class="relative pre-container"><button class="btn btn-xs btn-secondary" onclick="copy_code(event)" style="position:absolute;right:8px;top:6px">Copy</button><pre><code class="js language-js"><span class="hljs-keyword">const</span> <span class="hljs-title class_">CommentModule</span> = <span class="hljs-built_in">require</span>(<span class="hljs-string">"./comment-module.js"</span>);
<span class="hljs-variable language_">module</span>.<span class="hljs-property">exports</span> = {
<span class="hljs-comment">/* code */</span>
<span class="hljs-title function_">transformModules</span>(<span class="hljs-params">modules</span>) {
modules.<span class="hljs-title function_">push</span>(<span class="hljs-keyword">new</span> <span class="hljs-title class_">CommentModule</span>());
<span class="hljs-keyword">return</span> modules;
},
};
</code></pre></div><ul><li><p>Update Dockerfile to allow to use a custom ca-certificate</p></li><li><p>Add <code>to2d</code> filter for xlsx files</p></li><li><p>Update retrieve-structured-tags and retrieve-tags to work on invalid template</p></li><li><p>Update xlsx-module-3.26.1</p></li><li><p>Update to node 20.18.1</p></li><li><p>Update to eslint@9, [email protected]</p></li><li><p>Update to [email protected]</p></li><li><p>Update table-module-3.23.1</p></li><li><p>Update subtemplate-module-3.19.0</p></li><li><p>Update qrcode-module-3.5.0</p></li><li><p>Update pptx-sub-module-3.1.10</p></li><li><p>Update meta-module-3.13.0</p></li><li><p>Update image-module-3.29.4</p></li><li><p>Update html-module-3.55.1</p></li><li><p>Update chart-module-3.15.2</p></li></ul><a class="anchor" id="3-35-3"></a><h3><a href="#3-35-3">3.35.3</a></h3><ul><li>Update to [email protected]</li><li>Update table-module-3.22.3</li><li>Update html-module-3.54.0</li><li>Update error-location-module-3.9.6</li><li>Update node to 20.17.0</li></ul><a class="anchor" id="3-35-2"></a><h3><a href="#3-35-2">3.35.2</a></h3><ul><li>Update xlsx-module-3.24.1</li><li>Update subtemplate-module-3.18.0</li><li>Update meta-module-3.11.5</li><li>Update html-module-3.53.2</li><li>Update docxtemplater to 3.50.0</li><li>Update chart-module-3.13.8</li><li>Update dart sdk lockfile</li><li>Log uncatched errors</li></ul><a class="anchor" id="3-35-1"></a><h3><a href="#3-35-1">3.35.1</a></h3><ul><li>Update subtemplate-module-3.17.5</li><li>Update html-module-3.52.0</li><li>For subtemplate and subsection module, when using subrendering feature, include all modules in the subtemplate.</li></ul><a class="anchor" id="3-35-0"></a><h3><a href="#3-35-0">3.35.0</a></h3><ul><li>Bugfix to not exit server if having malformed multipart request.</li><li>Add SDKs for Lua, C++, Rust, C#, C and Java</li></ul><a class="anchor" id="3-34-0"></a><h3><a href="#3-34-0">3.34.0</a></h3><ul><li>Add sdk for dart language</li><li>Update html-module-3.51.0</li><li>Update node to 20.15.1</li><li>Update chart-module-3.13.7</li></ul><a class="anchor" id="3-33-0"></a><h3><a href="#3-33-0">3.33.0</a></h3><ul><li>Bugfix HTTP : don't exit server on SSL error</li><li>Update node to 20.15</li><li>Update xlsx-module-3.23.3</li><li>Update styling-module-3.8.3</li><li>Update slides-module-3.6.1</li><li>Update pptx-sub-module-3.1.9</li><li>Update image-module-3.29.1</li><li>Update html-module-3.50.0</li><li>Update chart-module-3.13.6</li><li>Bugfixes for attrParsed</li><li>Add /health route and add identifiers to /structured-tags route</li><li>Add <code>.contain</code> filter</li></ul><a class="anchor" id="3-32-19"></a><h3><a href="#3-32-19">3.32.19</a></h3><ul><li>Update xlsx-module-3.21.0</li><li>Update word-run-module-3.2.5</li><li>Update table-module-3.22.2</li><li>Update subtemplate-module-3.17.4</li><li>Update subsection-module-3.5.10</li><li>Update styling-module-3.8.2</li><li>Update slides-module-3.5.6</li><li>Update qrcode-module-3.4.10</li><li>Update pptx-sub-module-3.1.8</li><li>Update paragraph-placeholder-module-3.5.8</li><li>Update meta-module-3.11.4</li><li>Update image-module-3.28.5</li><li>Update html-xlsx-module-3.2.7</li><li>Update html-module-3.49.5</li><li>Update footnotes-module-3.4.7</li><li>Update docxtemplater to 3.47.4</li><li>Update chart-module-3.13.5</li></ul><a class="anchor" id="3-32-18"></a><h3><a href="#3-32-18">3.32.18</a></h3><ul><li>Update meta-module-3.11.2</li><li>Update Ruby sdk to correctly handle Japanese characters</li></ul><a class="anchor" id="3-32-17"></a><h3><a href="#3-32-17">3.32.17</a></h3><ul><li>Update xlsx-module-3.20.3</li><li>Update meta-module-3.11.1</li></ul><a class="anchor" id="3-32-16"></a><h3><a href="#3-32-16">3.32.16</a></h3><ul><li>Update xlsx-module-3.20.2</li><li>Update image-module-3.27.0</li><li>Update html-module-3.49.2</li></ul><a class="anchor" id="3-32-15"></a><h3><a href="#3-32-15">3.32.15</a></h3><ul><li>Update retrieve-structured-tags to work on all inputs (previously it would fail with an out of memory error for some templates)</li><li>Update pptx-sub-module-3.1.6</li><li>Update html-pptx-module-3.5.7</li><li>Update html-module-3.49.1</li><li>Update docxtemplater to 3.47.1</li></ul><a class="anchor" id="3-32-14"></a><h3><a href="#3-32-14">3.32.14</a></h3><ul><li>Update html-xlsx-module-3.2.4</li></ul><a class="anchor" id="3-32-13"></a><h3><a href="#3-32-13">3.32.13</a></h3><ul><li>Update subtemplate-module-3.16.16</li><li>Update node to 20.12</li><li>Update html-module-3.48.3</li><li>Update docxtemplater to 3.46.2</li></ul><a class="anchor" id="3-32-12"></a><h3><a href="#3-32-12">3.32.12</a></h3><ul><li>Update table-module-3.22.0</li><li>Update styling-module-3.8.0</li><li>Update meta-module-3.11.0</li><li>Update image-module-3.26.2</li><li>Update html-xlsx-module-3.2.3</li><li>Update html-module-3.48.1</li><li>Update error-location-module-3.9.5</li><li>Update docxtemplater to 3.46.1</li></ul><a class="anchor" id="3-32-11"></a><h3><a href="#3-32-11">3.32.11</a></h3><ul><li>Add /retrieve-structured-tags route</li><li>Update xlsx-module-3.20.1</li><li>Update subtemplate-module-3.16.15</li><li>Update styling-module-3.7.16</li><li>Update html-xlsx-module-3.2.2</li><li>Update html-pptx-module-3.5.5</li><li>Update html-module-3.47.1</li></ul><a class="anchor" id="3-32-10"></a><h3><a href="#3-32-10">3.32.10</a></h3><ul><li>Add initial csharp sdk</li><li>Update node to 20.11.1</li><li>Update image-module-3.24.5</li><li>Update html-xlsx-module-3.2.1</li><li>Update html-pptx-module-3.5.4</li><li>Update html-module-3.46.3</li><li>Update error-location-module-3.9.4</li><li>Update docxtemplater to 3.46.0</li><li>Update chart-module-3.13.2</li></ul><a class="anchor" id="3-32-9"></a><h3><a href="#3-32-9">3.32.9</a></h3><ul><li>Update xlsx-module-3.19.1</li><li>Update table-module-3.21.1</li><li>Update qrcode-module-3.4.9</li><li>Update meta-module-3.10.0</li><li>Update image-module-3.24.4</li><li>Update html-module-3.44.0</li><li>Update chart-module-3.13.1</li><li>Update docxtemplater to 3.44.0</li></ul><a class="anchor" id="3-32-8"></a><h3><a href="#3-32-8">3.32.8</a></h3><ul><li>Update html-xlsx-module-3.1.11</li><li>Update html-module-3.43.2</li></ul><a class="anchor" id="3-32-7"></a><h3><a href="#3-32-7">3.32.7</a></h3><p>Allow to configure following modules in the configuration.js file :</p><ul><li>Chartmodule using the <code>module === "chart"</code> condition.</li><li>XlsxModule using the <code>module === "xlsx"</code> condition.</li><li>HTMLXlsxModule using the <code>module === "html-xlsx"</code> condition.</li><li>FootnotesModule using the <code>module === "footnote"</code> condition.</li><li>FullTableModule using the <code>module === "table-full"</code> condition.</li><li>GridTableModule using the <code>module === "table-grid"</code> condition.</li><li>PptxSubtemplateModule using the <code>module === "pptx-sub"</code> condition.</li></ul><a class="anchor" id="3-32-6"></a><h3><a href="#3-32-6">3.32.6</a></h3><ul><li>Update xlsx-module-3.18.0</li><li>Update html-module-3.43.0</li><li>Update chart-module-3.13.0</li></ul><a class="anchor" id="3-32-5"></a><h3><a href="#3-32-5">3.32.5</a></h3><ul><li>Update xlsx-module-3.17.5</li><li>Update word-run-module-3.2.3</li><li>Update table-module-3.21.0</li><li>Update subtemplate-module-3.16.14</li><li>Update subsection-module-3.5.7</li><li>Update styling-module-3.7.15</li><li>Update slides-module-3.5.4</li><li>Update qrcode-module-3.4.8</li><li>Update pptx-sub-module-3.1.5</li><li>Update paragraph-placeholder-module-3.5.6</li><li>Update meta-module-3.8.1</li><li>Update image-module-3.24.3</li><li>Update ignored tests</li><li>Update html-xlsx-module-3.1.9</li><li>Update html-pptx-module-3.5.3</li><li>Update html-module-3.42.4</li><li>Update footnotes-module-3.4.5</li><li>Update error-location-module-3.9.3</li><li>Update docxtemplater to 3.43.1</li><li>Update chart-module-3.12.5</li></ul><a class="anchor" id="3-32-4"></a><h3><a href="#3-32-4">3.32.4</a></h3><ul><li>Update table-module-3.20.0</li><li>Update subtemplate-module-3.16.11</li><li>Update html-pptx-module-3.1.7</li><li>Update html-module-3.42.1</li></ul><a class="anchor" id="3-32-3"></a><h3><a href="#3-32-3">3.32.3</a></h3><p>Fix 400 Bad request when sending an XML file (that starts with <code><?xml version="1.0" encoding="UTF-8"?></code>) for text templating.</p><p>Allow to change delimiters when using Text templating</p><p>Now the output is correct</p><ul><li>Update html-module-3.42.0</li><li>Update docxtemplater-3.42.7</li><li>Update error-location-module-3.9.1</li></ul><a class="anchor" id="3-32-2"></a><h3><a href="#3-32-2">3.32.2</a></h3><ul><li>When using API with ?silent=true parameter, if the template contains errors, the errors will be shown in the HTTP response.</li></ul><a class="anchor" id="3-32-1"></a><h3><a href="#3-32-1">3.32.1</a></h3><ul><li>Update docxtemplater to 3.42.6</li><li>When using TxtTemplating, if there is an error in the input, the status will now be 400, and the error will be shown in a multi error</li></ul><a class="anchor" id="3-32-0"></a><h3><a href="#3-32-0">3.32.0</a></h3><ul><li>Add support for error-location module with xlsx files</li><li>Update xlsx-module-3.17.1</li><li>Update table-module-3.19.10</li><li>Update subtemplate-module-3.16.10</li><li>Update image-module-3.24.0</li><li>Update error-location-module-3.9.0</li><li>Update docxtemplater to 3.42.4</li></ul><a class="anchor" id="3-31-0"></a><h3><a href="#3-31-0">3.31.0</a></h3><ul><li>Add support for templating text files</li><li>Update docxtemplater to 3.42.3</li><li>Add Access-Control-Expose-Headers</li></ul><a class="anchor" id="3-30-2"></a><h3><a href="#3-30-2">3.30.2</a></h3><ul><li>Update image-module-3.23.11</li></ul><a class="anchor" id="3-30-1"></a><h3><a href="#3-30-1">3.30.1</a></h3><ul><li>Update styling-module-3.7.13</li></ul><a class="anchor" id="3-30-0"></a><h3><a href="#3-30-0">3.30.0</a></h3><ul><li>Update xlsx-module-3.15.0</li><li>Update table-module-3.19.9</li><li>Update subtemplate-module-3.16.9</li><li>Update styling-module-3.7.12</li><li>Update slides-module-3.5.3</li><li>Update qrcode-module-3.4.7</li><li>Update pptx-sub-module-3.1.4</li><li>Update paragraph-placeholder-module-3.5.4</li><li>Update meta-module-3.8.0</li><li>Update image-module-3.23.10</li><li>Update html-xlsx-module-3.1.6</li><li>Update html-module-3.41.9</li><li>Update error-location-module-3.8.6</li><li>Update docxtemplater to 3.42.1</li><li>Access-control allow all methods</li></ul><a class="anchor" id="3-29-3"></a><h3><a href="#3-29-3">3.29.3</a></h3><ul><li>Update xlsx-module-3.13.13</li><li>Update table-module-3.19.7</li><li>Update styling-module-3.7.11</li><li>Update qrcode-module-3.4.4</li><li>Update image-module-3.23.8</li><li>Update html-pptx-module-3.5.2</li><li>Update html-module-3.41.8</li><li>Update error-location-module-3.8.5</li></ul><a class="anchor" id="3-29-2"></a><h3><a href="#3-29-2">3.29.2</a></h3><ul><li>Update xlsx-module-3.13.12</li><li>Update word-run-module-3.2.2</li><li>Update table-module-3.19.6</li><li>Update subtemplate-module-3.16.5</li><li>Update subsection-module-3.5.6</li><li>Update styling-module-3.7.10</li><li>Update slides-module-3.5.2</li><li>Update qrcode-module-3.4.3</li><li>Update pptx-sub-module-3.1.3</li><li>Update paragraph-placeholder-module-3.5.3</li><li>Update modules order</li><li>Update meta-module-3.7.4</li><li>Update image-module-3.23.7</li><li>Update html-xlsx-module-3.1.5</li><li>Update html-pptx-module-3.5.1</li><li>Update html-module-3.41.7</li><li>Update footnotes-module-3.4.4</li><li>Update error-location-module-3.8.4</li><li>Update chart-module-3.12.3</li></ul><a class="anchor" id="3-29-1"></a><h3><a href="#3-29-1">3.29.1</a></h3><ul><li>Update subtemplate-module-3.16.4</li><li>Update meta-module-3.7.3</li><li>Update error-location-module-3.8.3</li></ul><a class="anchor" id="3-29-0"></a><h3><a href="#3-29-0">3.29.0</a></h3><ul><li>Add TableModule.Merge, StyleModule and WordRunModule for pptx file types</li><li>Add expressionFilters for <code>size</code>, <code>slice</code>, <code>link</code>, <code>chunkBy</code>, <code>chunk</code>, <code>recur</code></li><li>Improve shown errors in the output of the API : always show err.propeties</li><li>Update node to 20.9.0</li><li>[sdk/nodejs] Return specific object when having template error</li><li>Update docxtemplater to 3.40.2</li><li>Update subtemplate-module-3.16.2</li><li>Update image-module-3.23.6</li><li>Update html-module-3.41.6</li><li>Update chart-module-3.12.1</li></ul><a class="anchor" id="3-28-0"></a><h3><a href="#3-28-0">3.28.0</a></h3><ul><li>Update chart-module-3.12.0</li><li>Update docxtemplater to 3.40.1</li><li>Update error-location-module-3.8.2</li><li>Update footnotes-module-3.4.3</li><li>Update html-module-3.41.2</li><li>Update html-pptx-module-3.5.0</li><li>Update html-xlsx-module-3.1.3</li><li>Update image-module-3.23.4</li><li>Update meta-module-3.7.2</li><li>Update paragraph-placeholder-module-3.5.2</li><li>Update pptx-sub-module-3.1.2</li><li>Update qrcode-module-3.4.2</li><li>Update slides-module-3.5.1</li><li>Update styling-module-3.7.8</li><li>Update subsection-module-3.5.5</li><li>Update subtemplate-module-3.16.1</li><li>Update table-module-3.19.4</li><li>Update word-run-module-3.2.1</li><li>Update xlsx-module-3.13.10</li></ul><a class="anchor" id="3-27-4"></a><h3><a href="#3-27-4">3.27.4</a></h3><ul><li>Update xlsx-module-3.13.7</li><li>Update subtemplate-module-3.15.0</li><li>Update slides-module-3.5.0</li><li>Update meta-module-3.6.0</li><li>Update image-module-3.22.1</li><li>Update html-xlsx-module-3.1.0</li><li>Update html-module-3.39.9</li><li>Update error-location-module-3.8.0</li><li>Update docxtemplater to 3.39.1</li><li>Add <code>ignore_unknown_tags</code> option</li></ul><a class="anchor" id="3-27-3"></a><h3><a href="#3-27-3">3.27.3</a></h3><ul><li>Update table-module-3.19.1</li><li>Update slides-module-3.4.11</li><li>Update docxtemplater to 3.37.13</li></ul><a class="anchor" id="3-27-2"></a><h3><a href="#3-27-2">3.27.2</a></h3><ul><li>Update xlsx-module-3.13.5</li><li>Update chart-module-3.11.2</li></ul><a class="anchor" id="3-27-1"></a><h3><a href="#3-27-1">3.27.1</a></h3><ul><li>Update subtemplate-module-3.14.3</li><li>Update styling-module-3.7.3</li><li>Update node to 18.17</li></ul><a class="anchor" id="3-27-0"></a><h3><a href="#3-27-0">3.27.0</a></h3><p>Add new sdks :</p><ul><li>sdk for ruby language</li><li>sdk for php language</li><li>sdk for go language</li></ul><p>Update modules :</p><ul><li>Update xlsx-module-3.13.4</li><li>Update subtemplate-module-3.14.2</li><li>Update qrcode-module-3.4.1</li><li>Update image-module-3.22.0</li><li>Update html-pptx-module-3.4.3</li><li>Update html-module-3.39.1</li><li>Update chart-module-3.11.1</li></ul><a class="anchor" id="3-26-3"></a><h3><a href="#3-26-3">3.26.3</a></h3><ul><li>Update xlsx-module-3.13.3</li><li>Update subtemplate-module-3.14.0</li><li>Update slides-module-3.4.9</li><li>Update meta-module-3.5.0</li><li>Update image-module-3.21.4</li><li>Update html-module-3.38.0</li><li>Update docxtemplater to 3.37.12</li></ul><a class="anchor" id="3-26-2"></a><h3><a href="#3-26-2">3.26.2</a></h3><ul><li>Add support for minWidth and minHeight filters with percentage value.</li></ul><p>For example :</p><div class="herodoc small word"><div class="toolbar"></div><div class="doccontainer"><div class="doccontent"><button onclick="copy_doc(event)" class="btn btn-xs btn-secondary">Copy</button><div>{%image | minWidth:"100%"}<br></div></div></div></div><p>will now create an image that spans the whole page (or the whole table cell if the tag is placed in a table).</p><a class="anchor" id="3-26-1"></a><h3><a href="#3-26-1">3.26.1</a></h3><ul><li>Add support for Subtemplate.SegmentModule</li></ul><a class="anchor" id="3-26-0"></a><h3><a href="#3-26-0">3.26.0</a></h3><ul><li>Add support for minWidth and minHeight filters</li><li>Update table-module-3.18.5</li><li>Update styling-module-3.7.2</li><li>Update paragraph-placeholder-module-3.5.0</li><li>Update image-module-3.21.3</li><li>Update html-module-3.37.5</li><li>Update docxtemplater to 3.37.11</li></ul><a class="anchor" id="3-25-0"></a><h3><a href="#3-25-0">3.25.0</a></h3><ul><li><p>Add POST /retrieve-tags route</p></li><li><p>Update subtemplate-module-3.13.0</p></li><li><p>Update paragraph-placeholder-module-3.4.0</p></li><li><p>Update meta-module-3.4.2</p></li><li><p>Update image-module-3.21.1</p></li><li><p>Update html-module-3.37.3</p></li><li><p>Update chart-module-3.11.0</p></li></ul><a class="anchor" id="3-24-0"></a><h3><a href="#3-24-0">3.24.0</a></h3><ul><li>Make it possible to disable logs with the env variables <code>STORE_TEMPLATES</code>, <code>LOG_REQUESTS</code> and <code>LOG_ERRORS</code>.</li><li>Update subtemplate-module-3.12.4</li><li>Update html-module-3.37.2</li><li>Update docxtemplater to 3.37.9</li><li>Add initial python sdk</li></ul><a class="anchor" id="3-23-0"></a><h3><a href="#3-23-0">3.23.0</a></h3><ul><li>Add html-xlsx module</li><li>Update node to 18.16.0</li><li>Update xlsx-module-3.13.2</li><li>Update subtemplate-module-3.12.3</li><li>Update meta-module-3.4.1</li><li>Update html-module-3.36.2</li><li>Update error-location-module-3.6.1</li><li>Update chart-module-3.10.3</li><li>Update docxtemplater to 3.37.7</li></ul><a class="anchor" id="3-22-1"></a><h3><a href="#3-22-1">3.22.1</a></h3><ul><li>Update slides-module-3.4.7</li><li>Update qrcode-module-3.4.0</li><li>Update docxtemplater to 3.37.0</li></ul><a class="anchor" id="3-22-0"></a><h3><a href="#3-22-0">3.22.0</a></h3><ul><li>Add typescript definitions to node sdk</li><li>Update xlsx-module-3.12.1</li><li>Update table-module-3.18.4</li><li>Update styling-module-3.7.1</li><li>Update node to 18.15.0</li><li>Update image-module-3.21.0</li><li>Update html-module-3.35.5</li><li>Update error-location-module-3.6.0</li><li>Update docxtemplater to 3.36.1</li><li>Update chart-module-3.10.2</li><li>Add sumBy filter to be able to write : { items|sumBy:"price"}</li></ul><a class="anchor" id="3-21-3"></a><h3><a href="#3-21-3">3.21.3</a></h3><ul><li>Update docxtemplater to 3.36.0</li><li>Update chart-module-3.10.0</li></ul><a class="anchor" id="3-21-2"></a><h3><a href="#3-21-2">3.21.2</a></h3><ul><li>Update xlsx-module-3.12.0</li><li>Update subtemplate-module-3.12.2</li><li>Update image-module-3.19.0</li><li>Update html-module-3.35.0</li><li>Update error-location-module-3.5.1</li><li>Update docxtemplater to 3.35.1</li></ul><a class="anchor" id="3-21-1"></a><h3><a href="#3-21-1">3.21.1</a></h3><ul><li>Update xlsx-module-3.11.7</li><li>Update table-module-3.18.0</li><li>Update subtemplate-module-3.12.1</li><li>Update subsection-module-3.5.4</li><li>Update styling-module-3.7.0</li><li>Update slides-module-3.4.6</li><li>Update meta-module-3.4.0</li><li>Update image-module-3.18.2</li><li>Update html-pptx-module-3.4.2</li><li>Update html-module-3.34.0</li><li>Update error-location-module-3.5.0</li><li>Update docxtemplater to 3.34.3</li><li>Add support to set the extension from the API</li></ul><a class="anchor" id="3-21-0"></a><h3><a href="#3-21-0">3.21.0</a></h3><p>Add support to change maxWidth/maxHeight of a given image.</p><p>You can now write :</p><p><code>{%image | maxWidth:"1cm"}</code> => max width of 1 centimeter</p><p><code>{%image | maxWidth:"2in"}</code> => max width of 2 inches</p><p><code>{%image | maxWidth:100}</code> => max width of 100px</p><a class="anchor" id="3-20-0"></a><h3><a href="#3-20-0">3.20.0</a></h3><ul><li>Update getSize behavior :<ul><li>previously, there was a default maxWidth of 100px. Now the maxWidth is the containerWidth (the current section, table cell).</li><li>when having a "replaced image", use the width/height of the existing image as the maxWidth/maxHeight.</li><li>Add the possibility to write <code>{%image | scale:2}</code> to create an image which width and height is multiplied by 2.</li></ul></li><li>Update xlsx-module-3.11.6</li><li>Update slides-module-3.4.5</li><li>Update node to 18.12.1</li><li>Update image-module-3.17.2</li><li>Update html-module-3.32.0</li><li>Update docxtemplater to 3.32.4</li></ul><a class="anchor" id="3-19-0"></a><h3><a href="#3-19-0">3.19.0</a></h3><ul><li>Bugfix performance : avoid using assign completely on data. This will avoid minmize memory usage of the rendering process. Internally, we are now using the parser defined by "docxtemplater/expressions"</li><li>Update node from 16.7.0 to 18.12.0</li><li>Update docxtemplater to 3.32.3</li><li>Update xlsx-module-3.11.5</li><li>Update table-module-3.17.2</li><li>Update subtemplate-module-3.11.10</li><li>Update styling-module-3.6.17</li><li>Update slides-module-3.4.4</li><li>Update meta-module-3.3.1</li><li>Update image-module-3.15.6</li><li>Update html-module-3.31.5</li><li>Update error-location-module-3.4.4</li><li>Update chart-module-3.9.4</li></ul><a class="anchor" id="3-18-3"></a><h3><a href="#3-18-3">3.18.3</a></h3><ul><li>Update xlsx-module-3.11.4</li><li>Update to work correctly with xlsx errors and pptx errors</li><li>Update styling-module-3.6.16</li><li>Update paragraph-placeholder-module-3.3.2</li><li>Update image-module-3.15.4</li><li>Update docxtemplater to 3.31.5</li></ul><a class="anchor" id="3-18-2"></a><h3><a href="#3-18-2">3.18.2</a></h3><ul><li>Update html-module-3.31.2</li><li>Update chart-module-3.9.0</li><li>Update paragraph-placeholder-3.3.1</li></ul><a class="anchor" id="3-18-1"></a><h3><a href="#3-18-1">3.18.1</a></h3><ul><li>Update xlsx-module-3.11.3</li><li>Update table-module-3.16.11</li><li>Update subtemplate-module-3.11.7</li><li>Update slides-module-3.4.3</li><li>Update node to 16.17.0</li><li>Update image-module-3.15.3</li><li>Update html-pptx-module-3.4.1</li><li>Update html-module-3.31.1</li><li>Update footnotes-module-3.4.1</li><li>Update chart-module-3.8.0</li></ul><a class="anchor" id="3-18-0"></a><h3><a href="#3-18-0">3.18.0</a></h3><ul><li>Add support for https/http images with default configuration</li></ul><a class="anchor" id="3-17-11"></a><h3><a href="#3-17-11">3.17.11</a></h3><ul><li>Add node-js sdk (in sdk/nodejs/client.js)</li><li>Update xlsx-module-3.11.1</li><li>Update table-module-3.16.9</li><li>Update node to 16.16.0</li><li>Update meta-module-3.3.0</li><li>Update image-module-3.14.6</li><li>Update html-module-3.31.0</li><li>Update docxtemplater to 3.31.2</li><li>Add MAX_FIELD_SIZE option</li></ul><a class="anchor" id="3-17-10"></a><h3><a href="#3-17-10">3.17.10</a></h3><ul><li>Update xlsx-module-3.11.0</li><li>Update subtemplate-module-3.11.3</li><li>Update image-module-3.14.5</li></ul><a class="anchor" id="3-17-9"></a><h3><a href="#3-17-9">3.17.9</a></h3><ul><li>Update to docxtemplater 3.31.0</li></ul><a class="anchor" id="3-17-8"></a><h3><a href="#3-17-8">3.17.8</a></h3><ul><li>Update xlsx-module-3.10.3</li><li>Update subtemplate-module-3.11.2</li><li>Update subsection-module-3.5.2</li><li>Update styling-module-3.6.15</li><li>Update image-module-3.14.3</li><li>Update html-module-3.30.5</li><li>Update docxtemplater to 3.30.3</li><li>Update chart-module-3.7.1</li></ul><a class="anchor" id="3-17-7"></a><h3><a href="#3-17-7">3.17.7</a></h3><ul><li>Update xlsx-module-3.10.1</li><li>Update table-module-3.16.7</li><li>Update subtemplate-module-3.11.0</li><li>Update html-pptx-module-3.4.0</li><li>Update html-module-3.30.1</li><li>Update footnotes-module-3.4.0</li><li>Update docxtemplater to 3.29.4</li><li>Update chart-module-3.6.5</li></ul><a class="anchor" id="3-17-6"></a><h3><a href="#3-17-6">3.17.6</a></h3><ul><li>Add configurator.configureOptions to configure options</li><li>Update xlsx-module-3.9.3</li><li>Update table-module-3.16.2</li><li>Update subtemplate-module-3.10.2</li><li>Update styling-module-3.6.13</li><li>Update node to 16.14.2</li><li>Update image-module-3.13.5</li><li>Update html-module-3.29.7</li><li>Update error-location-module-3.4.3</li><li>Update chart-module-3.6.3</li></ul><a class="anchor" id="3-17-5"></a><h3><a href="#3-17-5">3.17.5</a></h3><ul><li>Bugfix issue with grid pptx module (part of the table module)</li><li>Update table-module-3.15.2</li><li>Update subtemplate-module-3.10.1</li><li>Update styling-module-3.6.12</li><li>Update slides-module-3.4.2</li><li>Update node to 16.14.0</li><li>Update image-module-3.13.2</li></ul><a class="anchor" id="3-17-4"></a><h3><a href="#3-17-4">3.17.4</a></h3><ul><li>Update xlsx-module-3.9.0</li><li>Update styling-module-3.6.11</li><li>Update meta-module-3.2.9</li><li>Update image-module-3.13.1</li><li>Update html-pptx-module-3.3.1</li><li>Make docker files way smaller (from 50MB to 1MB)</li></ul><a class="anchor" id="3-17-3"></a><h3><a href="#3-17-3">3.17.3</a></h3><ul><li>Make internal "parser" configuration faster, in particular when using big JSON data and loops.</li><li>Update xlsx-module-3.8.4</li><li>Update meta-module-3.2.8</li></ul><a class="anchor" id="3-17-2"></a><h3><a href="#3-17-2">3.17.2</a></h3><ul><li>Update xlsx-module-3.8.3</li><li>Update node to 16.13.2</li><li>Update table-module-3.15.1</li><li>Update subtemplate-module-3.10.0</li><li>Update styling-module-3.6.10</li><li>Update slides-module-3.4.1</li><li>Update pptx-sub-module-3.1.1</li><li>Update meta-module-3.2.7</li><li>Update image-module-3.12.4</li><li>Update html-module-3.29.3</li><li>Update footnotes-module-3.3.1</li><li>Update error-location-module-3.4.2</li><li>Update docxtemplater to 3.28.6</li></ul><a class="anchor" id="3-17-1"></a><h3><a href="#3-17-1">3.17.1</a></h3><p>Bugfix to allow to replace images using title field</p><a class="anchor" id="3-17-0"></a><h3><a href="#3-17-0">3.17.0</a></h3><ul><li>Update docxtemplater to 3.28.0</li><li>Update xlsx-module-3.8.0</li><li>Update word-run-module-3.2.0</li><li>Update table-module-3.15.0</li><li>Update subsection-module-3.5.0</li><li>Update slides-module-3.4.0</li><li>Update pptx-sub-module-3.1.0</li><li>Update paragraph-placeholder-module-3.3.0</li><li>Update image-module-3.12.0</li><li>Update html-pptx-module-3.3.0</li><li>Update html-module-3.29.0</li><li>Update footnotes-module-3.3.0</li><li>Update docxtemplater to 3.28.0</li><li>Update chart-module-3.4.0</li></ul><a class="anchor" id="3-16-1"></a><h3><a href="#3-16-1">3.16.1</a></h3><ul><li>Update styling-module-3.4.1</li><li>Update slides-module-3.3.7</li></ul><a class="anchor" id="3-16-0"></a><h3><a href="#3-16-0">3.16.0</a></h3><ul><li>Update docxtemplater to 3.27.1 => this should make it possible to have output documents as big as 500MB.</li><li>Update table-module-3.14.0</li><li>Update subtemplate-module-3.8.0</li><li>Update subsection-module-3.4.0</li><li>Update styling-module-3.4.0</li><li>Update image-module-3.11.0</li><li>Update html-pptx-module-3.2.5</li><li>Update html-module-3.28.0</li><li>Update error-location-module-3.4.0</li><li>Update chart-module-3.3.0</li><li>Add fix for document corruption when looping over multiple images</li></ul><a class="anchor" id="3-15-1"></a><h3><a href="#3-15-1">3.15.1</a></h3><ul><li>Make run.bash work on bash version 3</li><li>Add req argument to configurator functions</li></ul><a class="anchor" id="3-15-0"></a><h3><a href="#3-15-0">3.15.0</a></h3><ul><li>Update to node 16.13 (LTS version)</li><li>Update xlsx-module-3.7.2</li><li>Update table-module-3.13.9</li><li>Update styling-module-3.3.9</li><li>Update slides-module-3.3.6</li><li>Update image-module-3.9.2</li><li>Update error-location-module-3.3.1</li><li>Update docxtemplater to 3.26.0</li><li>Update chart-module-3.2.1</li></ul><a class="anchor" id="3-14-1"></a><h3><a href="#3-14-1">3.14.1</a></h3><ul><li>Update xlsx-module-3.7.1</li><li>Add response for / route instead of default 404 route</li><li>Add ENTRYPOINT and WORKDIR to Dockerfile</li></ul><a class="anchor" id="3-14-0"></a><h3><a href="#3-14-0">3.14.0</a></h3><ul><li>Remove Docker volumes used for code, use ADD to add the code to docker image instead</li><li>Update subtemplate-module-3.7.1</li></ul><a class="anchor" id="3-13-2"></a><h3><a href="#3-13-2">3.13.2</a></h3><ul><li>Update docxtemplater to 3.25.4</li><li>Update xlsx-module-3.7.0</li><li>Update image-module-3.8.14</li><li>Update error-location-module-3.3.0</li></ul><a class="anchor" id="3-13-1"></a><h3><a href="#3-13-1">3.13.1</a></h3><ul><li>Update docxtemplater to 3.25.2</li><li>Update chart-module-3.1.1</li><li>Make image size preserve aspect ratio, and use max size of 100x100 by default.</li></ul><a class="anchor" id="3-13-0"></a><h3><a href="#3-13-0">3.13.0</a></h3><ul><li>Use async data generation and make it possible to configure a single module (for example the image module)</li><li>Update table-module-3.13.7</li><li>Update slides-module-3.3.5</li><li>Update image-module-3.8.13</li><li>Update html-module-3.26.9</li><li>Update error-location-module-3.2.5</li><li>Update docxtemplater to 3.25.0</li><li>Update chart-module-3.1.0</li></ul><a class="anchor" id="3-12-1"></a><h3><a href="#3-12-1">3.12.1</a></h3><ul><li>Allow up to 25MB json data when using form field</li><li>Update xlsx-module-3.6.3</li><li>Update word-run-module-3.1.4</li><li>Update table-module-3.13.6</li><li>Update subtemplate-module-3.7.0</li><li>Update subsection-module-3.3.12</li><li>Update styling-module-3.3.6</li><li>Update slides-module-3.3.4</li><li>Update qrcode-module-3.2.6</li><li>Update pptx-sub-module-3.0.17</li><li>Update paragraph-placeholder-module-3.2.5</li><li>Update meta-module-3.2.6</li><li>Update image-module-3.8.12</li><li>Update html-pptx-module-3.2.4</li><li>Update html-module-3.26.6</li><li>Update footnotes-module-3.2.6</li><li>Update error-location-module-3.2.4</li><li>Update docxtemplater to 3.23.1</li><li>Update chart-module-3.0.2</li></ul><a class="anchor" id="3-12-0"></a><h3><a href="#3-12-0">3.12.0</a></h3><ul><li>Add chart module</li><li>Update xlsx-module-3.6.1</li><li>Update word-run-module-3.1.2</li><li>Update table-module-3.13.4</li><li>Update subtemplate-module-3.6.4</li><li>Update subsection-module-3.3.10</li><li>Update styling-module-3.3.4</li><li>Update slides-module-3.3.2</li><li>Update pptx-sub-module-3.0.10</li><li>Update paragraph-placeholder-module-3.2.3</li><li>Update node to 14.17</li><li>Update meta-module-3.2.4</li><li>Update image-module-3.8.8</li><li>Update html-pptx-module-3.2.2</li><li>Update html-module-3.26.3</li><li>Update footnotes-module-3.2.3</li><li>Update error-location-module-3.2.2</li><li>Update docxtemplater to 3.22.3</li></ul><a class="anchor" id="3-11-9"></a><h3><a href="#3-11-9">3.11.9</a></h3><ul><li>Update to node 14.16.0</li><li>Update table-module-3.12.0</li><li>Update image-module-3.8.4</li><li>Update html-module-3.25.5</li><li>Add linebreak option</li></ul><a class="anchor" id="3-11-8"></a><h3><a href="#3-11-8">3.11.8</a></h3><ul><li>Update xlsx-module-3.4.3</li><li>Update to docxtemplater 3.21.1</li><li>Update table-module-3.11.4</li><li>Update html-module-3.25.3</li><li>Update footnotes-module-3.2.0</li><li>Update angular-expressions</li></ul><a class="anchor" id="3-11-7"></a><h3><a href="#3-11-7">3.11.7</a></h3><ul><li>Upgrade angular-expressions to 1.1.2</li><li>Update xlsx-module-3.4.1</li><li>Update table-module-3.11.3</li><li>Update subtemplate-module-3.6.1</li><li>Update subsection-module-3.3.7</li><li>Update node to 12.20.0</li><li>Update meta-module-3.2.3</li><li>Update image-module-3.8.3</li><li>Update html-pptx-module-3.2.0</li><li>Update html-module-3.25.0</li></ul><a class="anchor" id="3-11-6"></a><h3><a href="#3-11-6">3.11.6</a></h3><ul><li>Update xlsx-module-3.3.6</li><li>Update word-run-module-3.1.1</li><li>Update table-module-3.10.0</li><li>Update image-module-3.7.9</li><li>Update html-module-3.24.2</li><li>Update error-location-module-3.2.0</li><li>Update docxtemplater to 3.19.6</li><li>Add Table Merge module</li><li>Add support for ErrorLocationModule with pptx</li></ul><a class="anchor" id="3-11-5"></a><h3><a href="#3-11-5">3.11.5</a></h3><ul><li>Update html-module-3.24.0</li></ul><a class="anchor" id="3-11-4"></a><h3><a href="#3-11-4">3.11.4</a></h3><ul><li>Update xlsx-module-3.3.3</li></ul><a class="anchor" id="3-11-3"></a><h3><a href="#3-11-3">3.11.3</a></h3><ul><li>Update table-module-3.9.6</li><li>Update subtemplate-module-3.6.0</li><li>Update footnotes-module-3.1.4</li><li>Return 400 instead of 500 if doc is not a zipfile</li><li>Add support for subtemplateSubsections option</li></ul><a class="anchor" id="3-11-2"></a><h3><a href="#3-11-2">3.11.2</a></h3><ul><li>Update html-module-3.23.7</li><li>Update html-pptx-module-3.1.4</li><li>Update table-module-3.9.5</li><li>Update xlsx-module-3.3.2</li></ul><a class="anchor" id="3-11-1"></a><h3><a href="#3-11-1">3.11.1</a></h3><ul><li>Update dependencies</li><li>Update docxtemplater to 3.17.9</li><li>Update html-module-3.23.0</li><li>Update image-module-3.7.8</li><li>Update node to 12.18.1</li><li>Update styling-module-3.3.1</li><li>Update subtemplate-module-3.5.6</li><li>Update xlsx-module-3.3.0</li></ul><a class="anchor" id="3-11-0"></a><h3><a href="#3-11-0">3.11.0</a></h3><ul><li>Add pptx-sub module</li><li>Update angular-expressions to 1.1.1</li><li>Update docxtemplater to 3.17.5</li><li>Update error-location-module-3.1.6</li><li>Update footnotes-module-3.1.3</li><li>Update html-module-3.22.7</li><li>Update html-pptx-module-3.1.1</li><li>Update image-module-3.7.6</li><li>Update meta-module-3.2.2</li><li>Update paragraph-placeholder-module-3.2.2</li><li>Update pptx-sub-module-3.0.3</li><li>Update qrcode-module-3.2.3</li><li>Update slides-module-3.2.9</li><li>Update styling-module-3.2.1</li><li>Update subsection-module-3.3.6</li><li>Update subtemplate-module-3.5.4</li><li>Update table-module-3.9.4</li><li>Update to node 12.16.2</li><li>Update word-run-module-3.1.0</li><li>Update xlsx-module-3.2.8</li></ul><a class="anchor" id="3-10-2"></a><h3><a href="#3-10-2">3.10.2</a></h3><ul><li>Add html-pptx-module 3.0.1</li><li>Update meta-module to 3.2.0</li><li>Update xlsx-module to 3.1.6</li><li>Add support for data:image/svg</li></ul><a class="anchor" id="3-10-1"></a><h3><a href="#3-10-1">3.10.1</a></h3><p>Fix vulnerability CVE-2020-5219, see <a href="https://github.com/peerigon/angular-expressions/security/advisories/GHSA-hxhm-96pp-2m43">advisory</a> and <a href="https://github.com/open-xml-templating/docxtemplater/issues/488">github issue</a> for more detail.</p><a class="anchor" id="3-10-0"></a><h3><a href="#3-10-0">3.10.0</a></h3><ul><li>Update docxtemplater to 3.16.5</li><li>Update paragraph-placeholder to 3.2.0</li><li>Update paragraph-placeholder to 3.7.1</li><li>Update xlsx-module to 3.1.3</li></ul><a class="anchor" id="3-9-9"></a><h3><a href="#3-9-9">3.9.9</a></h3><ul><li>Update docxtemplater to 3.16.1</li><li>Update html-module-3.21.6</li><li>Update image-module-3.7.0</li><li>Update xlsx-module-3.1.2</li><li>Update table-module-3.9.2</li></ul><a class="anchor" id="3-9-8"></a><h3><a href="#3-9-8">3.9.8</a></h3><ul><li>Update docxtemplater to 3.15.4</li><li>Add optional subrendering of included documents</li><li>Update footnotes-module-3.1.1</li><li>Update html-module-3.21.5</li><li>Update image-module-3.6.1</li><li>Update meta-module-3.1.0</li><li>Update xlsx-module-3.1.1</li></ul><a class="anchor" id="3-9-7"></a><h3><a href="#3-9-7">3.9.7</a></h3><ul><li>Update to docxtemplater 3.14.10</li><li>Update html-module to 3.21.1</li><li>Update image-module to 3.6.0</li><li>Use updated angular-parser</li><li>Update paragraph-placeholder-module to 3.1.0</li></ul><a class="anchor" id="3-9-6"></a><h3><a href="#3-9-6">3.9.6</a></h3><ul><li>Add configuration.js</li><li>Update node to 12.13</li><li>Update table-module to 3.9.1</li><li>Update image-module to 3.5.4</li><li>Use pizzip</li></ul><a class="anchor" id="3-9-5"></a><h3><a href="#3-9-5">3.9.5</a></h3><ul><li>Do not crash if nullValues contain special characters</li><li>Update subtemplate-module 3.5.1</li><li>Update subsection-module 3.3.5</li></ul><a class="anchor" id="3-9-4"></a><h3><a href="#3-9-4">3.9.4</a></h3><ul><li>Add <code>subloop</code> filter (for xlsx module)</li></ul><a class="anchor" id="3-9-3"></a><h3><a href="#3-9-3">3.9.3</a></h3><ul><li>Update xlsx-module to 3.1.0</li><li>Update html-module to 3.20.3</li></ul><a class="anchor" id="3-9-2"></a><h3><a href="#3-9-2">3.9.2</a></h3><ul><li>Update word-run-module to 3.0.6</li><li>Update docxtemplater to 3.14.1</li><li>Update xlsx-module to 3.0.2</li><li>Update to node 12</li></ul><a class="anchor" id="3-9-1"></a><h3><a href="#3-9-1">3.9.1</a></h3><ul><li>Add paragraph-placeholder module v3.0.0</li><li>Update html-module-3.20.1</li><li>Update docxtemplater to 3.14.0</li><li>Update table-module-3.7.4</li></ul><a class="anchor" id="3-9-0"></a><h3><a href="#3-9-0">3.9.0</a></h3><ul><li>Update node to 10</li><li>Update html-module-3.18.4</li></ul><a class="anchor" id="3-8-0"></a><h3><a href="#3-8-0">3.8.0</a></h3><ul><li>Add xlsx-module-3.0.1</li><li>Update docxtemplater</li><li>Update html-module-3.18.2</li></ul><a class="anchor" id="3-7-10"></a><h3><a href="#3-7-10">3.7.10</a></h3><ul><li>Update html-module-3.18.0</li><li>Update table-module-3.7.3</li></ul><a class="anchor" id="3-7-9"></a><h3><a href="#3-7-9">3.7.9</a></h3><ul><li>Update subtemplate-module-3.5.0</li><li>Update slides-module-3.2.1</li><li>Update error-location-module-3.1.4</li><li>Update html-module-3.17.2</li></ul><a class="anchor" id="3-7-8"></a><h3><a href="#3-7-8">3.7.8</a></h3><ul><li>Update dependencies and docxtemplater to 3.11.3</li><li>Update html-module-3.16.9</li><li>Update table-module-3.7.2</li></ul><a class="anchor" id="3-7-7"></a><h3><a href="#3-7-7">3.7.7</a></h3><ul><li>Update html-module-3.16.8</li><li>Update docxtemplater to 3.11.1</li><li>Update node to 10.15.3</li><li>Update table-module-3.7.1</li></ul><a class="anchor" id="3-7-6"></a><h3><a href="#3-7-6">3.7.6</a></h3><ul><li>Add support for specifiying default image size</li></ul><a class="anchor" id="3-7-5"></a><h3><a href="#3-7-5">3.7.5</a></h3><ul><li>Add support for grid pptx module</li><li>Update image-module-3.5.3</li><li>Update table-module-3.6.1</li><li>Update styling-module-3.2.0</li></ul><a class="anchor" id="3-7-4"></a><h3><a href="#3-7-4">3.7.4</a></h3><ul><li>Update subsection-module-3.3.4</li><li>Update html-module-3.16.5</li></ul><a class="anchor" id="3-7-3"></a><h3><a href="#3-7-3">3.7.3</a></h3><ul><li>Update html-module-3.16.3</li></ul><a class="anchor" id="3-7-2"></a><h3><a href="#3-7-2">3.7.2</a></h3><ul><li>Add support for stylesheet in HTML module</li><li>Update html-module-3.16.1</li></ul><a class="anchor" id="3-7-1"></a><h3><a href="#3-7-1">3.7.1</a></h3><ul><li>Add support for setting delimiters</li><li>Output nullValues in headers</li><li>Update html-module-3.15.0</li><li>Update footnotes-module-3.1.0</li></ul><a class="anchor" id="3-7-0"></a><h3><a href="#3-7-0">3.7.0</a></h3><ul><li>Update Dockerfile to use multi-layered build/run</li><li>Update html-module-3.14.1</li><li>Update image-module-3.5.2</li><li>Update slides-module-3.2.0</li><li>Update subsection-module-3.3.1</li><li>Update table-module-3.6.0</li><li>Upgrade node to version 10.15.2</li></ul><a class="anchor" id="3-6-7"></a><h3><a href="#3-6-7">3.6.7</a></h3><ul><li>Update html-module-3.13.6</li></ul><a class="anchor" id="3-6-6"></a><h3><a href="#3-6-6">3.6.6</a></h3><ul><li>Update image-module-3.5.1</li><li>Update node to 8.15.0</li><li>Update subdependencies</li><li>Update subtemplate-module-3.4.8</li><li>Update table-module-3.5.4</li></ul><a class="anchor" id="3-6-5"></a><h3><a href="#3-6-5">3.6.5</a></h3><ul><li>Update image-module-3.4.2</li><li>Update html-module-3.13.4</li><li>Update docxtemplater to 3.9.2</li></ul><a class="anchor" id="3-6-4"></a><h3><a href="#3-6-4">3.6.4</a></h3><ul><li>Update table-module-3.5.3</li><li>Update html-module-3.13.3</li></ul><a class="anchor" id="3-6-3"></a><h3><a href="#3-6-3">3.6.3</a></h3><ul><li>Update html-module-3.13.0</li></ul><a class="anchor" id="3-6-2"></a><h3><a href="#3-6-2">3.6.2</a></h3><ul><li>Update html-module-3.11.10</li><li>Update subtemplate-module-3.4.7</li></ul><a class="anchor" id="3-6-1"></a><h3><a href="#3-6-1">3.6.1</a></h3><ul><li>Update html-module-3.11.5</li></ul><a class="anchor" id="3-6-0"></a><h3><a href="#3-6-0">3.6.0</a></h3><ul><li>Update node to 8.11.3</li><li>Update error-location-module-3.1.3</li><li>Update footnotes-module-3.0.7</li><li>Update html-module-3.10.5</li><li>Update image-module-3.3.4</li><li>Update meta-module-3.0.2</li><li>Update qrcode-module-3.2.1</li><li>Update slides-module-3.1.9</li><li>Update styling-module-3.1.4</li><li>Update subsection-module-3.2.4</li><li>Update subtemplate-module-3.4.5</li><li>Update table-module-3.5.1</li><li>Update table-module-3.5.2</li><li>Update word-run-module-3.0.5</li></ul><a class="anchor" id="3-5-12"></a><h3><a href="#3-5-12">3.5.12</a></h3><ul><li>Update html-module-3.10.1</li></ul><a class="anchor" id="3-5-11"></a><h3><a href="#3-5-11">3.5.11</a></h3><ul><li>Update html-module-3.10.0</li></ul><a class="anchor" id="3-5-10"></a><h3><a href="#3-5-10">3.5.10</a></h3><ul><li>Add grid module</li><li>Update table-module-3.5.0</li><li>Update error-location-module-3.1.1</li><li>Update footnotes-module-3.0.6</li><li>Update html-module-3.9.2</li><li>Update image-module-3.3.2</li><li>Update meta-module-3.0.1</li><li>Update qrcode-module-3.1.6</li><li>Update slides-module-3.1.8</li><li>Update styling-module-3.1.3</li><li>Update subsection-module-3.2.3</li><li>Update subtemplate-module-3.4.3</li><li>Update subtemplate-module-3.4.4</li><li>Update table-module-3.4.4</li><li>Update word-run-module-3.0.4</li></ul><a class="anchor" id="3-5-9"></a><h3><a href="#3-5-9">3.5.9</a></h3><ul><li>Update footnotes-module-3.0.5</li><li>Update html-module-3.8.4</li><li>Update image-module-3.3.1</li><li>Update qrcode-module-3.1.5</li><li>Update styling-module-3.1.2</li><li>Update subsection-module-3.2.2</li><li>Update subtemplate-module-3.4.2</li><li>Update table-module-3.4.3</li><li>Update word-run-module-3.0.3</li></ul><a class="anchor" id="3-5-8"></a><h3><a href="#3-5-8">3.5.8</a></h3><ul><li>Update docxtemplater to 3.6.6</li><li>Update error-location-module-3.1.0</li><li>Update footnotes-module-3.0.4</li><li>Update html-module-3.8.1</li><li>Update image-module-3.2.8</li><li>Update qrcode-module-3.1.4</li><li>Update styling-module-3.1.1</li><li>Update subsection-module-3.2.1</li><li>Update subtemplate-module-3.4.1</li><li>Update table-module-3.4.1</li><li>Update word-run-module-3.0.2</li></ul><a class="anchor" id="3-5-7"></a><h3><a href="#3-5-7">3.5.7</a></h3><ul><li>Update html-module 3.1.8</li></ul><a class="anchor" id="3-5-6"></a><h3><a href="#3-5-6">3.5.6</a></h3><ul><li>Update slides-module 3.1.7</li></ul><a class="anchor" id="3-5-5"></a><h3><a href="#3-5-5">3.5.5</a></h3><ul><li>Allow ’ and “ and ” as quotes in angularexpressions</li></ul><a class="anchor" id="3-5-4"></a><h3><a href="#3-5-4">3.5.4</a></h3><ul><li>Update style-module 3.1.0</li></ul><a class="anchor" id="3-5-3"></a><h3><a href="#3-5-3">3.5.3</a></h3><ul><li>Add support for base64 image/jpeg</li></ul><a class="anchor" id="3-5-2"></a><h3><a href="#3-5-2">3.5.2</a></h3><ul><li>Update html-module 3.7.1</li></ul><a class="anchor" id="3-5-1"></a><h3><a href="#3-5-1">3.5.1</a></h3><ul><li>Update html-module 3.7.0</li><li>Update image-module 3.2.7</li><li>Update slides-module 3.1.5</li></ul><a class="anchor" id="3-5-0"></a><h3><a href="#3-5-0">3.5.0</a></h3><ul><li>Add Footnotes module</li><li>Add Style module</li><li>Add meta module</li><li>Add word-run module</li></ul><a class="anchor" id="3-4-1"></a><h3><a href="#3-4-1">3.4.1</a></h3><ul><li>Update image-module-3.2.5</li><li>Update table-module-3.4.0</li><li>Update html-module-3.6.6</li></ul><a class="anchor" id="3-4-0"></a><h3><a href="#3-4-0">3.4.0</a></h3><ul><li>Update node version</li><li>Update HTMLModule to include ImageModule</li><li>Update html-module-3.6.4</li><li>Update table-module-3.3.1</li><li>Update [email protected]</li><li>Update qrcode-module-3.1.3</li><li>Update image-module-3.2.4</li></ul><a class="anchor" id="3-3-5"></a><h3><a href="#3-3-5">3.3.5</a></h3><ul><li>Update html-module-3.6.1</li><li>Update image-module-3.2.2</li><li>Update slides-module-3.1.4</li><li>Update html-module-3.6.0</li><li>Update styling-module-3.0.0</li></ul><a class="anchor" id="3-3-4"></a><h3><a href="#3-3-4">3.3.4</a></h3><ul><li>Update subsection-module-3.1.0</li><li>Update slides-module-3.1.3</li><li>Update subtemplate-module-3.2.4</li><li>Update subtemplate-module-3.2.3</li></ul><a class="anchor" id="3-3-3"></a><h3><a href="#3-3-3">3.3.3</a></h3><ul><li>Update subsection-module-3.0.3</li><li>Update html-module-3.5.10</li><li>Update footnotes-module-3.0.3</li><li>Update image-module-3.2.1</li><li>Update qrcode-module-3.1.2</li><li>Update subtemplate-module-3.2.2</li></ul><a class="anchor" id="3-3-2"></a><h3><a href="#3-3-2">3.3.2</a></h3><ul><li>Add subsection-module-3.0.2</li><li>Update image-module-3.2.0</li><li>Update subsection-module-3.0.1</li><li>Update qrcode-module-3.1.1</li><li>Update subsection-module-3.0.0</li><li>Update subtemplate-module-3.2.1</li><li>Update table-module-3.3.0</li><li>Update table-module-3.2.3</li></ul><a class="anchor" id="3-3-1"></a><h3><a href="#3-3-1">3.3.1</a></h3><ul><li>Add paragraphLoop option</li></ul><a class="anchor" id="3-3-0"></a><h3><a href="#3-3-0">3.3.0</a></h3><ul><li>Update error-location-module-3.0.3</li><li>First iteration of error-location module</li><li>Update word-run-module-3.0.1</li><li>Update image-module-3.1.6</li><li>Update footnotes-module-3.0.2</li><li>Update html-module-3.5.9</li></ul><a class="anchor" id="3-2-8"></a><h3><a href="#3-2-8">3.2.8</a></h3><ul><li>Use logRequests for all routes</li></ul><a class="anchor" id="3-2-7"></a><h3><a href="#3-2-7">3.2.7</a></h3><ul><li>Update qrcode-module-3.1.0</li><li>Update image-module-3.1.5</li><li>Update html-module-3.5.8</li><li>Update html-module-3.5.7</li><li>Update subtemplate-module-3.2.0</li><li>Update subtemplate-module-3.1.9</li><li>Update subtemplate-module-3.1.8</li><li>Update html-module-3.5.6</li><li>Update subtemplate-module-3.1.7</li></ul><a class="anchor" id="3-2-6"></a><h3><a href="#3-2-6">3.2.6</a></h3><p>First publicly released version</p></div></div><div class="sticky-navbar-container"><div class="sticky-navbar additional-info"><p><a href="/shop/entreprise" class="btn btn-primary">Buy ENTREPRISE Plan</a><br></p><p>The dockerized docxtemplater version with all active modules is available as part of the docxtemplater ENTREPRISE plan.</p></div></div></div></div><a class="btn btn-primary demo-schedule-btn-announce" href="https://cal.com/coding-puffin/docxtemplater">Talk with sales </a><a href="" onclick="return showEmailAddress(this,!1)" class="btn btn-primary demo-schedule-btn-announce">Contact us</a><footer><div class="footer-container"><div class="aboutme"><h4>About</h4><div><p><img class="img-inline" width="32" src="/puffin-small.png" alt="coding puffin logo" loading="lazy">Docxtemplater is a product made by <a href="https://codingpuffin.com/" target="_blank">Coding Puffin</a></p></div><p>Hi, I'm Edgar, the creator of docxtemplater. I've been doing software development for almost two decades. Docxtemplater is my full-time job since 2019. For the past 10 years I've helped thousands of companies improve their document generation system.</p><div><img class="img-inline contoured" width="48" src="/logos/edgar.png" alt="Edgar Hipp" loading="lazy"><div class="inline-block va-middle">Edgar Hipp<br>Founder at Coding Puffin</div></div></div><div class="anyquestions"><h4 class="mb1">Any questions ?</h4><noscript>Email address protected, please enable Javascript to view it</noscript><div><a href="/faq/">Find your answer in the FAQ</a></div><div class="mt1"><a class="btn btn-primary" href="" onclick="return showEmailAddress(this,!0)">Contact us</a></div></div></div><p class="text-center">Icons made by <a title="Freepik" href="https://www.freepik.com/">Freepik</a> from <a title="Flaticon" href="https://www.flaticon.com/">www.flaticon.com</a></p></footer><style>html{display:block}</style><link rel="stylesheet" href="/docs-searchbar.min.css"><style>.meilisearch-autocomplete .dsb-dataset-1{min-height:150px}.dsb-dropdown-menu.dsb-with-1{position:unset!important;top:unset!important}#meili{padding-left:2.5rem;background:#fff url(/search.svg) .9rem .6rem no-repeat;border-radius:2rem;border:1px solid #c0c1c1;vertical-align:top;height:2rem;width:100%}.meilisearch-autocomplete{margin-right:2rem;margin-top:7px;vertical-align:top;width:100%}.docs-searchbar-js{display:inline-block;vertical-align:middle;flex:2 1 300px;padding-left:24px}@media (max-width:900px){.meilisearch-autocomplete{margin-right:0}}.meilisearch-autocomplete .docs-searchbar-footer{width:auto;float:right}.docs-searchbar-footer a{vertical-align:top}</style><script type="text/javascript" async="" defer="" src="//analytics.docxtemplater.com/matomo.js"></script><script src="/docs-searchbar.min.js"></script><script>var currentSearch="";function debounce(c,a,n){var o;return function(){var e=this,r=arguments,t=n&&!o;clearTimeout(o),o=setTimeout(function(){o=null,n||c.apply(e,r)},a),t&&c.apply(e,r)}}var trackSearch=debounce(function(e){window._paq&&_paq.push(["trackEvent","Search","Search",currentSearch,e.length])},250);let hostUrl="https://search.docxtemplater.com",meiliApiKey="3e8187a63877993aea2796d13059cac71811dc1709e5b21d93a2c7191c66a95e";docsSearchBar({queryHook:function(e){return(currentSearch=e).split(" ").map(function(e){return"loop"===e?"loops":e}).join(" ")},transformData:function(e){return trackSearch(e),e},hostUrl:hostUrl,apiKey:meiliApiKey,indexUid:"docs",inputSelector:"#meili"}),document.getElementById("meili").style.display=""</script><!-- Matomo --><script type="text/javascript">var _paq=window._paq||[];_paq.push(["trackPageView"]),_paq.push(["enableLinkTracking"]),_paq.push(["enableHeartBeatTimer",10]),window._paq=_paq,(()=>{var e="//analytics.docxtemplater.com/";_paq.push(["setTrackerUrl",e+"matomo.php"]),_paq.push(["setSiteId","1"]);var a=(t=document).createElement("script"),t=t.getElementsByTagName("script")[0];a.type="text/javascript",a.async=!0,a.defer=!0,a.src=e+"matomo.js",t.parentNode.insertBefore(a,t)})()</script><script>function waitUntilInstalled(e){return new Promise(function(t,n){e.installing?e.installing.addEventListener("statechange",function(e){"installed"==e.target.state?t():"redundant"==e.target.state&&n()}):t()})}function changeCss(){var e=document.querySelector("body");document.querySelector("nav");50<this.scrollY?e.classList.add("scrolled"):e.classList.remove("scrolled")}function reverseString(t){var n="";for(let e=t.length-1;0<=e;e--)n+=t[e];return n}"serviceWorker"in navigator&&(navigator.serviceWorker.register("/service-worker.js",{scope:"/"}).then(waitUntilInstalled).then(function(){console.log("service worker installed succesfully")}).catch(function(e){console.log(e)}),window.addEventListener("load",function(){function e(e){navigator.onLine||(window.document.getElementById("offline_status").className="alert alert-warning")}e(),window.addEventListener("online",e),window.addEventListener("offline",e)})),window.addEventListener("scroll",debounce(changeCss,100),!0),window.showEmailAddress=function(e,t){let n=reverseString(reverseString("edg"))+reverseString(reverseString("ar"))+reverseString(reverseString("@docxtemplater"))+".com",r=document.createTextNode("Contact us at : "+n);return window.navigator&&navigator.clipboard&&window.navigator.clipboard.writeText&&navigator.clipboard.writeText(n).then(function(){t&&(r.textContent+=" (email address was copied to clipboard)")},function(e){}),e.setAttribute("href","mailto:"+n),e.childNodes[0].remove(),e.appendChild(r),window._paq&&_paq.push(["trackEvent","Contact","Clicked Contact Us","Clicked Contact Us"]),!1}</script><script charset="utf-8">for(var toggles=document.querySelectorAll(".btn-group-toggle"),i=0;i<toggles.length;i++)for(var inputs=toggles[i].querySelectorAll("input"),j=0;j<inputs.length;j++){var input=inputs[j];input.onchange=function(){if(this.checked)for(var e=this.parentNode.parentNode.querySelectorAll(".btn"),t=0;t<e.length;t++){var n=e[t];n===this.parentNode?n.classList.add("active"):n.classList.remove("active")}}}function selectPlanPricing(e){document.querySelector(".pricing-plans").classList.add("active"),document.querySelector(".pricing-modules").classList.remove("active")}function selectProductPricing(e){document.querySelector(".pricing-plans").classList.remove("active"),document.querySelector(".pricing-modules").classList.add("active")}document.querySelectorAll(".term").forEach(t=>{let n,o;function l(){n=n||setTimeout(()=>{t.removeChild(o),o=null,n=null},600)}t.addEventListener("mouseenter",function e(){n&&(clearTimeout(n),n=null),o||((o=t.ownerDocument.createElement("span")).classList.add("tooltip"),o.innerHTML=atob(t.getAttribute("definition")),o.style.opacity="1",o.style.visibility="visible",o.addEventListener("mouseenter",e),o.addEventListener("mouseleave",l),t.appendChild(o))}),t.addEventListener("mouseleave",l)}),window.copy_code=function(e){let t=e.target;e=t.parentNode.querySelector("pre").innerText;navigator.clipboard.writeText(e),t.innerText="Copied!",setTimeout(function(){t.innerText="Copy"},3e3)},window.copy_doc=function(e){let t=e.target;var e=t.parentNode.querySelector("div"),n=document.createRange();n.selectNode(e),window.getSelection().removeAllRanges(),window.getSelection().addRange(n);try{document.execCommand("copy"),t.innerText="Copied!",setTimeout(function(){t.innerText="Copy"},3e3)}catch(e){alert("Failed to copy docx. Please try again.")}finally{window.getSelection().removeAllRanges()}},window.addEventListener("load",function(){var n=document.querySelector(".sticky-navbar");if(n){document.getElementById("menu-list");let e=document.querySelectorAll(".readme h1, .readme h2,.readme h3, .readme h4, .readme h5, .readme h6, .changelog h1, .changelog h2,.changelog h3, .changelog h4, .changelog h5, .changelog h6"),t=".level-2, .level-3, .level-4, .level-5, .level-6";var o=window.location.toString();t=-1===o.indexOf("/docs/")?".level-1, "+t:".level-1.heading-active, "+t;let l=document.querySelectorAll(t),i=document.createElement("div");function c(){let n=null,o=(e.forEach((e,t)=>{null==n&&(e=e.offsetTop,window.pageYOffset<e-90)&&(n=t-1)}),null);(o=-1===n?(o=document.querySelector(".level-1.heading-active"))||document.querySelector(".level-1"):(l.forEach(function(e,t){n===t&&(o=e)}),o||l[l.length-1]))&&(i.style.top=o.offsetTop+6+"px",i.style.left=o.offsetLeft-12+"px")}i.classList.add("highlight-menu"),n.appendChild(i),window.addEventListener("scroll",c),window.addEventListener("resize",c),c()}})</script></body></html>