Repository navigation
Best Practices ja
Hammad Maqbool edited this page Oct 29, 2026
·
1 revision
English · 简体中文 · 繁體中文 · Español · العربية · Français · Português (Brasil) · Deutsch · हिन्दी · 日本語 · 한국어 · Русский · Bahasa Indonesia · Türkçe · Italiano · Tiếng Việt
ここで紹介する習慣は docxi の仕組みから直接導かれるもので、ほとんどがトラブルシューティングに載っている問題を防ぎます。トピックごとにまとめています。ページ設定の助言はすべての人に、セキュリティとパフォーマンスの助言は特に本番環境のアプリケーションに役立ちます。
-
4 つの余白をまとめて渡す。
Docxi::Document.newに渡したハッシュはデフォルト値を置き換え、top、right、bottom、leftのうち省略したものは空で書き出されます。 -
1 ページ目のヘッダーとフッターを設定する。docxi は常に 1 ページ目を別扱いにします。1 ページ目にヘッダーやフッターが必要なら、
add_first_headerとadd_first_footerも呼び出してください。
-
先頭や末尾の空白には
space: trueを使う。そうしないと Word が空白を削除し、2 つのランの単語がくっついてしまいます。 -
共通の書式は段落に設定する。
size:やfont:などpに渡したオプションは段落内のすべてのランに適用されるので、繰り返し書く量が減ります。 -
改行には
p.br、改ページにはdocument.br(page: true)を使う。page: trueなしのdocument.brは無効な XML を生成します。
-
罫線は表ではなく行かセルに設定する。0.1.0 では、表単位の
borders:は表の外枠ではなく各セルに適用されます。 -
すべての列に
columns_widthを指定する。セルの幅はここから決まるので、表のレイアウトが期待どおりに保たれます。
- PNG ファイルを使う。すべての画像は PNG パーツとして保存されます。
-
インライン画像のサイズは
style:で指定する。たとえばstyle: { width: "120pt", height: "60pt" }のようにします。0.1.0 で期待どおりに動く画像サイズの指定方法はこれだけです。 -
ドキュメントを複数回レンダリングする可能性があるなら、開いた
Fileではなくパスを渡す。IO の画像はrenderの中で読み込まれるため、2 回目のレンダリングでは空の画像になります。 -
0.2.0 までのヘッダー、表のセル、配置を指定した画像について。幅と高さがどちらも
width * height * 14.92EMU として計算されるため、正方形になります。一辺Sインチの正方形の画像にするには、widthとheightの両方をMath.sqrt(S * 914400 / 14.92).roundにします。1 インチならおよそ 248 です。
-
信頼できない文字列を
add_mediaに渡さない。パスを渡すと docxi はサーバー上のそのファイルを読み、URL を渡すとサーバーがそれをダウンロードします。自分で開いた IO を渡すか、先に値を確認してください。セキュリティを参照してください。 -
テキストは自動でエスケープされる。
textに渡した文字列は XML のテキストとして書き出されるため、ユーザーの入力でドキュメントの構造が変わることはありません。
-
大きなドキュメントはバックグラウンドジョブで作る。
renderを呼び出すと、ドキュメント全体がメモリ上で組み立てられます。連携を参照してください。 -
レンダリングは 1 回にして、バイト列を再利用する。ドキュメントを何度も送信または保存する必要があるなら、
word.render.stringを保持しておいてください。 -
gem "docxi", "~> 0.1"で互換性のあるバージョンに固定する。 -
生成したものをテストする。
.docxは XML ファイルの zip なので、テストで展開して XML を確認できます。docxi 自身のテストもこの方法です。アーキテクチャを参照してください。
docxi wiki · README · Installation · Troubleshooting · Report an issue · MIT License
Start
Build documents
Help
Project
Links
Languages