Files
pdfme/website/i18n/ja/docusaurus-plugin-content-docs/current/expression.md

116 lines
4.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 式Expression
式は`{}`で囲まれた表現を評価する機能です。
最も単純な例は`{1+1}`で、これは`2`と評価されます。
pdfmeでは、式は単純な計算だけでなく、ユーザー入力を活用することもできます。
例えば、以下のようなテンプレートを考えてみましょう:
```
{
"schemas": [
[
{
"name": "field1",
"type": "text",
"content": "Hello world",
...
"readOnly": false,
},
{
"name": "field2",
"type": "text",
"content": "{field1} !", // 式!
...
"readOnly": true,
}
]
],
"basePdf": { "width": 210, "height": 297, "padding": [20, 10, 20, 10] },
"pdfmeVersion": "5.0.0"
}
```
`field2`の値は`Hello world !`になります。式`{field1} !`は以下のように評価されます:
![expression](/img/expression.png)
これは、`{field1}``field1`の値に置き換えられ、その後に`!`が追加されることを意味します。
## ユースケース
以下のようなユースケースが考えられます:
### フッターとヘッダーに日付やページ番号を表示する
例えば、PDFの作成日をヘッダーに表示したり、フッターにページ番号を表示したりすることができます。ヘッダーとフッターについては[こちら](/docs/headers-and-footers)で詳しく説明されていますが、ヘッダーとフッターに使用される`staticSchema`でも式を使用できます。
### ユーザー入力を表示用に再利用する
ユーザーが入力した値を表示用に再利用できます。例えば、ユーザーが入力した`firstName``lastName`というフィールドがある場合、それらを連結して`{firstName + " " + lastName}`として表示できます。
これにより、ユーザーが類似の情報を複数回入力する必要がなくなり、使いやすさが向上します。
### 値を一箇所で管理する
式を使用することで、値を一箇所で管理できます。例えば、`taxRate`という値がある場合、`taxRate`を変更するだけで、それが使用されているすべての場所に反映され、変更が容易になります。
## 使用方法、仕様
概要とユースケースを理解した後、具体的な使用方法と仕様について説明します。
### 式の使用方法 {#variables-that-can-be-used-within-expressions}
式は、`readOnly`プロパティが`true`に設定されている場合に`schema`プロパティで使用できます。デザイナーから、`Editable`チェックボックスをオフにすることで`readOnly`を設定できます。
以下のGIFに示すように、`Editable`チェックボックスをオフにすることで式の使用を開始できます。
![Change ReadOnly](/img/expression-change-readOnly.gif)
つまり、式が使用されているフィールドはユーザーが編集できません。
### 式の制限とセキュリティ
- アロー関数のみがサポートされています。
- `eval`関数は使用できません。
- `prototype`は使用できません。
- 以下のグローバルオブジェクトとそのメソッドのみが使用できます:
- Math
- String
- Number
- Boolean
- Array
- Object
- Date
- JSON
- isNaN
- parseFloat
- parseInt
- decodeURI
- decodeURIComponent
- encodeURI
- encodeURIComponent
詳細な仕様については、[この実装](https://github.com/pdfme/pdfme/blob/main/packages/common/src/expression.ts)を参照してください。
### 式内で使用できる変数
- **ユーザー入力値**
- [複数変数テキスト](/docs/supported-features#multivariable-text)や[テーブル](/docs/supported-features#table)に入力された値で、JSONとして解析できるものは解析後に使用できます。
- **他の`readOnly`フィールドの値**
- 別の`readOnly`フィールドの値に式が使用されている場合、式が評価された後の値が使用されます。
- **組み込み変数**
- `currentPage`
- `totalPages`
- `date (YYYY/MM/DD)`
- `dateTime (YYYY/MM/DD HH:mm)`
### 式の例
以下は使用できる式の例です:
- **小計:** `'{orders.reduce((sum, item) => sum + parseFloat(item[1] || 0) * parseFloat(item[2] || 0), 0)}'`
- **税額:** `'{Number(subtotalInput) * Number(tax.rate) / 100}'`
- **合計:** `'${Number(subtotal) + Number(tax)}'`