ホームページおよび管理コンソール画面のデザインを刷新しました。
機能面でもビジネス面でもステージが切り替わりつつあり、 「次の3年」を戦うために相応しい方向性へと揃えたつもりです。
ホームページおよび管理コンソール画面のデザインを刷新しました。
機能面でもビジネス面でもステージが切り替わりつつあり、 「次の3年」を戦うために相応しい方向性へと揃えたつもりです。
以前、Docurainが「外字」または異体字セレクタ(IVS)に対応済みであることお知らせしましたが、 Unicode絵文字の出力と絵文字に対しての文字列操作も対応しています。
テンプレート・JSONは以下のように作成しています。
{ "農家": "👩🌾", "家族": "👨👩👧", "One": "1️⃣", "自転車": "🚵♀️", "国旗": "🇯🇵🇯🇵🇯🇵", "農家_es": "\ud83d\udc69\u200d\ud83c\udf3e", "家族_es": "\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67", "One_es": "1\ufe0f\u20e3", "自転車_es": "\ud83d\udeb5\u200d\u2640\ufe0f", "国旗_es": "\ud83c\uddef\ud83c\uddf5\ud83c\uddef\ud83c\uddf5\ud83c\uddef\ud83c\uddf5", "農家_ucd": "\\U+D83D\\U+DC69\\U+200D\\U+D83C\\U+DF3E", "家族_ucd": "\\U+D83D\\U+DC68\\U+200D\\U+D83D\\U+DC69\\U+200D\\U+D83D\\U+DC67", "One_ucd": "\\U+0031\\U+FE0F\\U+20E3", "自転車_ucd": "\\U+D83D\\U+DEB5\\U+200D\\U+2640\\U+FE0F", "国旗_ucd": "\\U+D83C\\U+DDEF\\U+D83C\\U+DDF5\\U+D83C\\U+DDEF\\U+D83C\\U+DDF5\\U+D83C\\U+DDEF\\U+D83C\\U+DDF5" }
JSONはこのようになります。 以下のそれぞれで設定が可能です。
上記テンプレート・JSONで出力してみましょう。
問題なく絵文字が出力されています。(macOS上のExcel)
ただし、Windows版のExcelやPDFでは以下のように表示されます。
Windows Excel | |
---|---|
![]() |
![]() |
このように、Docurainとしては絵文字の出力に対応していますが、 表示する側がまだ対応できていないことがあります。
次にこの絵文字に対しての文字列操作です。
例えば
"🍣と🍺".length
とJavascriptで実行すると、3
ではなく5
が返ってきます。
これは↓の以前のブログでもご紹介している通り、🍣や🍺はサロゲートペアであるためです。 blog.docurain.jp
また、"👨👩👧と🏖".length
や "👩❤️👨で🎡".length
は どちらも11
となります。
これは 👨👩👧 や 👩❤️👨 は
👨👨👦 = 👨 + 👧 + 👩
👩❤️👩 = 👩 + ❤️ + 👩
のようにできている絵文字だからです。
"🍣と🍺".length
"👨👨👦と🏖".length
"👩❤️👨で🎡".length
いずれも3
が欲しいですよね...
対応してます!
Docurain独自の関数u_length
を使えばOKです。
実際に確認してみましょう。
{ "arg1": "🍣と🍺", "arg2": "👨👩👧と🏖", "arg3": "👩❤️👨で🎡" }
それぞれ3
となりましたね!見た目上の文字数でカウントすることができました。
Docurainでは、以下のようなユニコード専用の文字列操作を用意しています。 JSONで送ったデータの文字列オブジェクトのメソッドとして呼び出すことができます。
関数名 | 説明 |
---|---|
u_length | ユニコードを考慮した文字列長を返す。サロゲートペアや異体字セレクタなどの 書記素クラスタ(grapheme cluster) の文字を全て1文字とカウントする。例えば"🍣と🍺と䄂\uDB40\uDD01" の長さは5 とカウントする。 |
u_charAt(int index) | ユニコードを考慮した文字取得メソッド。オリジナルのString#charAtとは異なり、このメソッドの戻り値は「1文字」を表す文字列になる。書記素クラスタの文字は1文字とカウントする |
u_toCharArray() | ユニコードを考慮して文字列を文字に分解する。オリジナルのString#toCharArrayとは異なり、このメソッドの戻り値は「1文字」を表す文字列の配列になる。書記素クラスタの文字は1文字とカウントする。 例えば `'🍣と䄂\uDB40\uDD01'`.u_toCharArray() の結果は["🍣","と","䄂\uDB40\uDD01"] になる |
u_substring(int from), u_substring(int from, int to) | ユニコードを考慮した部分文字列取得メソッド。書記素クラスタの文字は1文字とカウントする |
u_hasIVS() | 異体字セレクタを含む文字列か判定する |
u_removeIVS() | 異体字セレクタを除去して通常の字体のみにする |
最低限必要なものは用意しましたが、不足がありましたら随時追加していきます。
絵文字やを扱う帳票作成が必要な際はぜひ試してみてください!
他にも様々な機能がありますので、ぜひアカウント無料登録してマニュアルを参照しお試しください。
Docurainは、純粋な意味の外字も使用可能です。検証結果を以下に記載します。
「外字」とは、本来システムに登録されていない文字のことを指します。よくある例としては、漢字の異体字などです。これをシステムから利用できるようにするための機能が各種OSには備わっていたりします。これが本来の意味ですが、私の経験上では単に「マイナーな異体字」を「外字」と表現する人も多々見かけてきました。
異体字の多くはUnicodeでもすでに定義されていますので、「外字でなくてUnicodeを使いましょう」という運動が昨今進んでいます。以下はMicrosoft ブログから引用です:
Windows と日本語のテキストについて - Windows Blog for Japan
Unicode を使用することにより、人名地名に使用される漢字等を正確に表現するニーズにも対応することができます。従来、このような用途では外字を使用するケースが多くありましたが、現在「外字でなければ表示できない文字」をお使いのお客様は限定的です。Unicode に定義されており、Windows に同梱のフォントを使用して標準の状態でも表示可能な文字を、外字にいわば「再定義」してお使いのお客様が非常に多くいらっしゃいます。
(中略) 現在外字を使用している国としては日本が突出しており、外字が既にレガシーな機能であることもお伝えしなければなりません。
(中略) 外字を使用していることや、テキストを Shift-JIS で保存していることがクラウド移行の大きな障壁となるケースが急増しています。
ということです。つまり、
ということが言えると思います。
今日、システム上で異体字を扱わなければならないケースが生じた際には、
という対応をすることが正攻法になるでしょう。なぜなら、これが将来的な技術的負債となる可能性が大きいからです。「外字」として独自の文字を定義するのは最後の手段と考えたほうが良さそうです。
なお、Docurainは既にIPAmj明朝には完全対応しています。
今回の検証は、何らかの理由によりIPAmj明朝が使えないケースのための予備調査となります。
Windowsにおける外字機能としては、古くから「外字エディタ」が提供されてきました。この機能は現在のWindows10からも利用可能です。試しに使ってみましょう。
使う場合は、Windowsメニューから「外字」で検索するか、Winキー+Rを押してから「eudcedit」と入力してEnterを押します。
すると、こういった画面が表示されます。
一度も使ったことがなければ、ここには灰色の空のマスが並んでいます。このE000というのはUnicodeです。E000〜F8FFまでは「私用領域」として定められており、通常ここに文字(グリフ)が割り当てられることはありません。名前の通り、グローバルに何かを定めるためのものではなく、ユーザーが定義して使うために領域を残しているわけです。
つまり、これは「外字」そのものですね。
特定のUnicode コードを選択すると文字のエディタが立ち上がります。ここで任意の文字を作成して定義できます。ここでは、ShiftJISでF042、UnicodeでE002の場所におにぎりを表す漢字を独自に定義しました。これ一文字で「おにぎり」と読みます。私が勝手に定義して私的に利用する漢字です。
続いて今回は「ドラえもん」「うずまき」という漢字を作ってみました。
では定義した文字はどのようにして利用すれば良いのでしょうか?この文字が「おにぎり」と読むことをシステムは知りません。なので、IMEから「おにぎり」と入力して変換してもこのおにぎり漢字が出てくることはありません。
Microsoft IMEの「IMEパッド」は任意の文字を入力できるのでこれを利用すると入力することが出来ます。
「Unicode(基本多言語面)」→「私用領域」とたどると今回定義した文字が出てくるので、ここをクリックするとその文字が入力できます。
「おにぎり」と入力したらこの文字が表示されるようにしたい場合は、IMEから単語登録すればよいでしょう。外字エディタではその文字の「読み」は気にしません。私用領域の特定のコードに編集した文字を割り当てる、それだけを外字エディタは行います。
では、Windowsではどのようにしてこの機能を実現できているのでしょうか。
実は、外字エディタで編集した文字は c:\windows\fonts\EUDC.TTE
というファイルとして保存されます。これは拡張子がTTEとなっていますが、実態はTrueTypeフォントのようです。
Windowsでは、表示中のフォントで定義されていないおにぎりグリフ(E002)があった場合にEUDC.TTEで定義されている文字にフォールバックするように設定されているようです。
ここまでの話をまとめると、外字エディタとは
ような機能であると言えます。
もちろん、ここで定義した文字はいわゆる機種依存文字になりますから、他のコンピュータでは表示できません。機種依存どころか特定のマシン依存です。他のコンピュータで表示するためにはEUDC.TTEを表示するコンピュータにインストールする必要があります。
逆に言えば、EUDC.TTEを表示するコンピュータにインストールすればおにぎり漢字も表示できるはずですね。
ではこのフォントを調査してみましょう。このフォントをファイルとして抽出するためにはコマンドプロンプトでコピーする必要があります。
エクスプローラで c:\windows\fonts\
を開くとフォントのリストを表示する特殊な表示となってしまい、EUDC.TTEが見つかりませんでした。
ここからはLinux(Ubuntu)で作業をします。まずはFontforge(フォント編集ソフト)でフォント情報を見てみましょう。
フォントファミリーは「EUDC」、スタイルは「Regular」であることが分かります。ベンダIDには「RICO」(ママ)の文字が入っていました。この機能はリコー(RICOH)が開発に携わっているのでしょうか?
定義されているグリフを見ると、確かに私的領域に今回作成した3文字が入っています。その他は全部空欄でした。
ちなみに、ここまでのスクリーンショットをご覧になったところでお気づきの方も多いと思われますが、編集はドットで行った(つまりラスタ画像)のに、フォントはそれを平滑にしたようなベクタ画像になっています。もともと外字エディタってこの仕様だったのでしょうか?中々すごい機能が備わっていますね。
ここまででWindowsの外字とは何か?ということを説明しました。
冒頭に説明したとおり、外字はレガシーな機能で使うのを避けてUnicodeと対応フォントに移行すべきではありますが、「ではそうしましょう!」で何も問題なくプロジェクトは実際少ないだろうことは皆さんお察しのとおりです。
というわけで今回、Docurainでも外字対応が可能かどうかを検証しました。と、言えどもここまでに調べた仕様から察するに特に問題なく表示できるでしょう。
どのような設定を行ったかはDocurain内部システムの構成の話になるので省きます。
今回は以下のようなテンプレートを作成しました。
text1〜3に任意の文字を入力して表示するだけです。ただ、任意のフォントからフォールバック可能であることを検証するためにそれぞれ違うフォントを設定しています。
使用するエンティティデータは以下のようになります。
外字は対応するコードのUnicodeエスケープで記述します。必ずUnicodeエスケープで記述しなければならないというわけではありませんが、開発ツールやIDEなどの親和性を考えると楽なのはUnicodeエスケープで記述する方法です。
出力したPDFファイルです。フォント埋め込みなので、ここで出力したファイルはあらゆるデバイスで同じように表示できます。
こちらからダウンロードして皆さんの環境でも同様に表示できることを確かめてみて下さい。
今回はWindowsの外字機能の概要をまとめた上で、DocurainからもWindows外字エディタで作成した文字が利用可能であることを確かめました。
もし、帳票開発をもっとモダンなものに置き換えたいが外字対応がネックになっている…という方はぜひご相談下さい。
Docurainではこれまで一つのセル内で複数のフォントスタイルを設定できない制限事項がありましたが、それが可能になりました!
例えば以下のように文字の部分は明朝体、数字部分はゴシック体にしたい場合にこれまではセルを分ける必要がありました。
はい、面倒ですね!
これが今回の対応により、一つセル内でそれぞれフォント設定を行えば良いことになります。
これまでは一つのセル内では先頭行のスタイルがセル内のすべてのテキストに適用される仕様でしたが、上記の通りテンプレートで設定したように出力されますので、いくつかのフォントスタイルで確認してみます。
{ "font1": "IPA ゴシックフォント", "font2": "IPA P ゴシック フォント", "font3": "IPAex 明朝 フォント", "font4": "IPAmj明朝 フォント", "font5": "Rounded M+ フォント", "font6": "Noto Sans CJK JP フォント", "font7": "刻明朝 フォント" }
旧 | 新 |
---|---|
![]() |
![]() |
このようにテンプレートの設定のまま出力されるようになりました。
他にも様々な機能がありますので、ぜひアカウント無料登録してマニュアルを参照のうえ、お試しください。
[忙しい方向け]
MSのRPAであっても依然として苦手*1な「帳票」はDocurainと連携することで簡単に解決できます!
本日(日本時間2021年3月3日)より、Windows 10 を利用しているユーザーは追加費用なく個人レベルでのデスクトップ操作を自動化させるためにPower Automate Desktop が利用可能となりました。
このPower Automate Desktopから、Docurain APIを利用して帳票を作成できることを確認しました!
以降の手順は、Power Platform(Power Apps、Power Automate)を利用できることが前提です。 Power Platform の利用開始についてはこちらのOffice 365 E3へサインアップを参考にしてください。 (引用: Windows 10 さえあれば追加費用なくPower Automate Desktop を使ってタスクや業務の自動化が可能に - 吉田の備忘録)))
*windows10上での手順です
Power Automate Desktop をダウンロードし、インストーラを起動します。
インストール
指示に従ってインストールを進めます。
Power Automate Desktop 起動
起動後にログインを求められるのでMicrosoftアカウントでログイン
以上でセットアップ完了です。
Power Automate Desktopではデスクトップフローと呼ばれるローカル端末のあらゆる操作を自動化できます。
今回はこのデスクトップフローで端末上にある2つのデータ(Excel)を1つのデータにまとめ、そのデータとテンプレートファイルを元にDocurainのAPIにリクエストして帳票を作成します。
新しくフローを作成
取引先情報、注文情報の2つのファイルを1つにまとめます。
デスクトップフローを作成し、取引先情報と注文情報をまとめたデータを保存します。
*今回はデスクトップフローでDocurain連携についてのご紹介のため、データをまとめるフローについては詳細は省略します
デスクトップフローを実行し、データを作成します
システムタブ内にあるPowerShellスクリプトの実行をフローに追加して、curlでDocurainのレンダリングAPIへのリクエストを行いレスポンスをファイルに保存します。
以下のようなコードを記述しています。 *こちらはサンプルです
curl.exe -X POST https://api.docurain.jp/api/instant/pdf -H 'Authorization:token [トークン]' -H 'Content-Type:multipart/form-data' -F 'template=@template.xlsx;type= application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' -F 'entity=@data.xlsx;type= application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' -o output.pdf
デスクトップフローでは、端末のあらゆる操作が可能ですので、もっと複雑なデータを結合させたりすることも可能です。
また、Docurain連携を行い帳票を出力した後、任意のオンラインストレージにアップしたりメールに添付することも可能です。
単純だけど面倒な作業はどんどん自動化して、重要な業務に集中しましょう!
他にも様々な機能がありますので、ぜひアカウント無料登録してマニュアルを参照しお試しください。
*1: 細かいレイアウト指定や大量出力を想定しています
以前、Docurainが「外字」に対応済みであることをお知らせしましたが、Docurainは異体字セレクタ(IVS)にも対応*1しました。
Ideographic Variation Sequence(異体字シーケンス)の略称で、異体字の関係に ある文字に「異体字セレクタ」(VS / Variation Selector)というコード(枝番号) を振ることで、より確実な文字情報の交換を可能にする技術のこと
例えば、「尊」の異体字である
は対応するセルのフォントをIPAmj明朝にした上で、以下のようなJSONで表示できます。
:
{ "str": "尊\uDB40\uDD04" }
または { "str": "尊\\U+E0104" }
:
{ "str": "尊\uDB40\uDD05" }
または { "str": "尊\\U+E0105" }
{ "str": "尊\U+E0104" }
と\
(バックスラッシュ)は一つになるべきですが(実際これでもDocurainでは動きますが)、これはJSONエディタではエラーに判別され開発時に扱いづらいため、独自に { "str": "尊\\U+E0103" }
でも受付可能にしました。
テンプレート・JSONは以下のように作成しています。
サンプルはこちらからダウンロードできます。
{ "str1": "尊\\U+E0103", "str2": "尊\\U+E0104", "str3": "尊\\U+E0105", "str4": "㐄\\U+E0101", "str5": "㐄\\U+E0100", "str6": "㐪\\U+E0103", "str7": "㐪\\U+E0101", ...省略... }
出力結果は以下のようになります。
問題なく出力されていますね。
IPAmj明朝の文字一覧に存在するIVSの1万1,382文字は全て検証済みで出力可能です!
サロゲートペアを扱ったことがある方でしたらご存じの通り、 サロゲートペアが含まれた文字列は、もはや通常の「文字列」として扱うことができません。 なぜなら、サロゲートペアは「2文字で『1文字』を表す」という特殊な文字だからです。
例えば🍣や🍺はサロゲートペアです。なので、
"🍣と🍺".length
とJavascriptで実行すると、3
ではなく5
が返ってくるあたりで辛さがわかると思います。
先頭の1文字を切り取ろうとして、
"🍣と🍺".substring(0, 1)
とやると、"�"
という壊れた文字が返ってくる*2わけです。ましてや、IVS文字は「3文字で『1文字』を表す」という世界なので、例えば
"🍣と🍺と䄂\uDB40\uDD01".length
は9
になるわけです。表示結果は5文字*3なのに。辛い。
そこでDocurainでは、ユニコード専用の文字列操作を用意しています。 JSONで送ったデータの文字列オブジェクトのメソッドとして呼び出すことができます。
関数名 | 説明 |
---|---|
u_length | ユニコードを考慮した文字列長を返す。サロゲートペアおよび異体字セレクタの文字は1文字とカウントする。例えば"🍣と🍺と䄂\uDB40\uDD01" の長さは5 とカウントする。 |
u_charAt(int index) | ユニコードを考慮した文字取得メソッド。オリジナルのString#charAtとは異なり、このメソッドの戻り値は「1文字」を表す文字列になる。サロゲートペアおよび異体字セレクタの文字は1文字とカウントする |
u_toCharArray() | ユニコードを考慮して文字列を文字に分解する。オリジナルのString#toCharArrayとは異なり、このメソッドの戻り値は「1文字」を表す文字列の配列になる。サロゲートペアおよび異体字セレクタの文字は1文字とカウントする。 例えば `'🍣と䄂\uDB40\uDD01'`.u_toCharArray() の結果は["🍣","と","䄂\uDB40\uDD01"] になる |
u_substring(int from), u_substring(int from, int to) | ユニコードを考慮した部分文字列取得メソッド。サロゲートペアおよび異体字セレクタの文字は1文字とカウントする |
u_hasIVS() | 異体字セレクタを含む文字列か判定する |
u_removeIVS() | 異体字セレクタを除去して通常の字体のみにする |
最低限必要なものは用意しましたが、不足がありましたら随時追加していきます。
今回作成したサンプルは、無料トライアルページからも登録不要で試してみることが出来ます。 外字・異体字を扱う帳票の作成・出力が必要な際はぜひ試してみてください!
他にも様々な機能がありますので、ぜひアカウント無料登録してマニュアルを参照しお試しください。