動的な Word ドキュメントを生成する JavaScript API
Node.js とブラウザベースのアプリケーションで動的な Word ドキュメントを作成するためのオープンソース JavaScript ライブラリ。
Docx-templates とは何ですか?
Docx-Templates は、事前に定義されたテンプレートを使用して動的な Microsoft Word(.docx)ドキュメントを生成できるオープンソースの JavaScript ライブラリです。Word ドキュメントを手動でプログラム的に構築する代わりに、開発者は Microsoft Word でテンプレートを作成し、埋め込みコマンドを使用して動的データを注入できます。このライブラリは Node.js とブラウザ環境の両方で動作し、最新のウェブおよびサーバーサイドアプリケーションに高い汎用性を提供します。DOCX ファイルは内部の XML 構造を解析し、実行時にテンプレートコマンドを実際のデータに置き換えることで処理されます。
Docx-Templates ライブラリは、Node.js とブラウザ環境の両方で使用できる強力なオープンソースツールです。このライブラリの主な利点は、デザインとロジックを分離できることです。非技術的なユーザーは Word でレイアウトやスタイルをデザインでき、開発者はデータの注入に集中できます。ループや条件付き書式、さらにはドキュメント内で直接 JavaScript スニペットを実行するなど、複雑なロジックもサポートします。これにより、XML や専用デザインツールと格闘せずに高忠実度のレポートを作成したい開発者にとって理想的なソリューションとなります。
Docx-templates の開始方法
Docx-templates ライブラリの推奨インストール方法は npm を使用することです。スムーズなインストールのために、以下のコマンドをご利用ください。
NPM を使用して Docx-Templates をインストールする
$ npm install docx-templates Yarn を使用して Docx-Templates をインストールする
$ yarn add docx-templates JS API を使用したテンプレートベースのドキュメント生成
オープンソースの Docx-Templates ライブラリは、ソフトウェア開発者が Word で文書を設計し、シンプルなコマンドでデータを動的に注入できるようにします。このアプローチはプレゼンテーションとロジックを分離し、コードを変更せずにテンプレートを簡単に管理・更新できるようにします。データオブジェクトのプロパティに直接アクセスしたり、簡単な式を実行したりできます。例えば、フルネームを挿入する場合、テンプレートは次のようになります: {firstName} {surname}。ライブラリはコードを評価し、シームレスに置き換えます。
JavaScript アプリ内で Word ドキュメントを動的に作成する方法は?
import createReport from 'docx-templates';
import fs from 'fs';
const template = fs.readFileSync('template.docx');
const report = await createReport({
template,
data: { name: 'John', surname: 'Doe' },
});
fs.writeFileSync('output.docx', report);
JavaScript による動的画像挿入
テキストだけでなく、オープンソースの Docx-Templates ライブラリは画像をリアルタイムで注入できます。ローカルファイル、URL からの画像、さらにはプログラムで生成した QR コードも対象です。画像のサイズや配置を制御できます。この機能は、身分証バッジ、製品カタログ、動的なチャートやビジュアル証拠が必要なレポートの作成に革命をもたらします。以下は、JavaScript API を使用して画像を Word 文書に挿入する方法を示すシンプルな例です。
JavaScript API を使用して Word ドキュメントに画像を動的に挿入する方法は?
const buffer = await createReport({
template,
data: {
userAvatar: async () => {
const resp = await fetch('https://example.com/photo.png');
return { width: 3, height: 3, data: await resp.arrayBuffer(), extension: '.png' };
}
},
});
// In Word: {IMAGE userAvatar()}
強力なループ (FOR/END-FOR)
FOR コマンドを使用すれば、データのリスト処理はシームレスです。この機能により、配列を反復してテーブル行やリスト、さらには文書全体のセクションを生成できます。Docx-Templates ライブラリはネストされたループのサポートも含んでおり、部門ごとの従業員リストのような複雑な階層データ構造を、元の Word スタイルを保持したまま表現できます。以下のコード例は、その実装方法を示しています。
JavaScript アプリで高度なループを適用する方法は?
const buffer = await createReport({
template,
data: {
projects: [
{ name: 'SEO Optimization', status: 'Completed' },
{ name: 'API Integration', status: 'In Progress' }
]
},
});
/* In Word:
{FOR project IN projects}
Project: {project.name} - Status: {project.status}
{END-FOR}
*/
カスタム JavaScript コンテキスト (EXEC)
Docx-Templates ライブラリの最も高度な機能の一つは、EXEC(または !)コマンドを使用して任意の JavaScript スニペットを実行できることです。additionalJsContext を提供することで、テンプレートにカスタムヘルパー関数を公開できます。これにより、テンプレートはメインアプリケーションロジックでデータを事前処理することなく、内部で計算や日付のフォーマット、文字列の操作などを行うことができます。