動的な 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 や専用デザインツールと格闘せずに高忠実度のレポートを作成したい開発者にとって理想的なソリューションとなります。

Previous Next

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 を提供することで、テンプレートにカスタムヘルパー関数を公開できます。これにより、テンプレートはメインアプリケーションロジックでデータを事前処理することなく、内部で計算や日付のフォーマット、文字列の操作などを行うことができます。

 日本