All About ACS: IBM i Access Client Solutions 1.1.8.4 で PDTモード印刷で外字を印刷する

#  IBM i Access Client Solutions 1.1.8.4 PDTモードで外字を印刷する
「[IBM i Access Client Solutions 1.1.8.4 利用可能](https://qiita.com/6onoda/items/da7ebe142204142b55a7)」で触れたように、、ACS 1.1.8.4 では PDTモード印刷で外字を印刷できるようになりました・

>   - Utility to generate the font-image file for User Defined Characters with
     PDT printing on a Windows workstation.                 (RFE 130267)

ただ、これまでの PCOMM や Access for Windows のように勝手にWindowsに登録した外字を使ってくれるわけではありません。
今回は、その方法を説明します。

# 2020/05/05 以降に専用ダウンロートサイトから ACS 1.1.8.4 を入手する

ACS 1.1.8.4 の初期利用可能版にはバグがあり、PDTモードでの外字を印刷はできません。
修正版は、日本時間の 2020/05/05 に専用ダウンロートサイトにアップロードされました。
下記からダウンロード可能です。
修正は、されているのは、Start_Programs\Windows.... の exe や dll です。acsbundle.jar は以前のままです。

https://www.ibm.com/services/forms/preLogin.do?source=swg-ia

参考：[IBM i Access Client Solutions - Base Package の専用ページからのダウンロード(Base, EHLLAPI)](http://qiita.com/6onoda/items/a66c3af5f4ac065fe768)

なお、1.1.8.4 の提供中は ESS での修正は提供されません。1.1.8.4 の提供中は ESS からではなく専用ダウンロートサイトから入手してください。

## 修正版と以前の 1.1.8.4 を区別する
エクスプローラーの「すべての展開」ではファイルの更新日時を、展開実行日時で置き換えてしまいます。ファイルの更新日時は信用できません。
acsbundle.jar は変わっていないので、acslaunch_win-XX.exe を起動して [ヘルプ] - [製品情報] の表示で区別することもできません。
修正版がどうか確認するには、acslaunch_win-XX.exe のプロパティの「デジタル署名」の「タイムスタンプ」で確認してください。2020年5月4日以降であれば、修正版です。
なお、別の問題の修正で EXE や DLL がさらに更新されることも考えられます。下記より新しければ、よいでしょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/4d60bf39-dab3-3e2b-7a05-9d3124fd94ec.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/bbf20516-8bc0-9732-f77e-554373a4f592.png)


# Windows外字から外字イメージファイルを生成し、所定の場所に配置する

これまでの PCOMM や Access for Windows のように勝手にWindowsに登録した外字を使ってくれるわけではありません。
ACS の PDT モードで外字印刷するには、下記の 2 ステップが必要です。

1. Windows外字からイメージファイルを生成
2. 外字イメージファイルを所定の場所に置く

なぜ、こんなことが必要かというと、ACS の ベースになっている Host On-Demand(HOD) の PDT モードでの外字印刷機能を利用しているからです。
HOD の 3270 PDT プリンターセッションでは、もともと外字印刷が可能です (5250 のプリンターセッションは HPT モードで実装されていて PDT 印刷機能はありません)。
HOD は Java Applet や Java Web Start で実装されていて、セキュリティ上、ローカルリソースへのアクセスが制限されています。
そのため、HOD では、下記の手順で外字イメージへのアクセスを可能にしています。

1. 専用のユーティリティで、Windows 外字から外字イメージファイルを生成
2. イメージファイルを HOD サーバーにデプロイ

今回の ACS の実装は、サーバーではなく、サーバーの代わりに所定のフォルダーから外字イメージファイルを読み込むように変更したものになります。

# Windows 外字から外字イメージファイルを生成し、所定の場所に配置する

PDT 印刷で外字を利用する方法の最新の GettingStarted の記述は下記になります。
(製品に付属のものより更新されています)

> 9.1.40 UDC Font Conversion

>/udcnv  [/wide]

>   /wide         This option is only valid with code page 932.
                 When specified, the font-image file produced will contain >unicode characters.

>Example invocation: 
>      Start_Programs\Windows_x86-64\acslaunch_win-64.exe /udcnv

>This command-line option is for generating a font-image file that contains User Defined Characters (UDC) that are currently configured on a Windows workstation. The generated font-image file will be an ANSI code page based on the workstation locale. The following ANSI code pages are supported: 
  Code Page     Platform                        Font-image filename
    932        Japanese Windows                     jpn24.fnt
    949        Korean Windows                       kor24.fnt
    936        Simplified Chinese Windows           chs24.fnt
    950        Traditional Chinese Windows          cht24.fnt

>The generated font-image file can be used with 5250 printer emulation in combination with a Printer Definition Table (PDT) on a Windows workstation. The command will start a GUI which will allow you to specify the path in which to place the generated font-image file. The generated font-image file needs to have the above specified name and be placed in the Emulator\fonts folder which exists at: 
      <Configuration Root>\Emulator\fonts

>Where <Configuration Root> is normally a path like: 
       C:\Users\<user_name>\Documents\IBM\iAccessClient

>To find the actual Configuration Root for your installation, see section 8.1 Configuration Location. 
Limitations: 
In a Traditional Chinese Windows environment, there are 13 more UDCs than IBM's Big5 UDCs. Therefore, if the last 13 UDCs are defined in the range of 0xC8F2-0xC8FE, they are ignored by the utility and cannot be used. 
In a Korean Windows environment, only local code page 949 is supported. You can define and print 188 UDCs in the ranges of 0xC9A1-0xC0FE and 0xFEA1-0xFEFE. 

# つまり...

わかる人用の説明なので日本語で情報を補足しながら言い換えます。

* 何語の外字イメージファイルを生成するか Windows のロケールで決まる。日本語セッション用の外字を生成する時は、日本語 Windows を使う
* 外字イメージファイルは日本語の場合「 jpn24.fnt 」という名前になる。このファイル名は決め打ちなので変えてはいけない
* 外字イメージファイルの生成は、acslaunch_win-NN.exe /udcnv [/wide] と実行する
* 外字が HCP 930/939 で利用可能/Shift_JIS で利用可能な 1880 文字以内なら、「 /udcnv 」だけでいい
* UNICODE 対応の HCP 1399 では、1880 文字を超えて外字を利用できる。この場合、「 /udcnv  /wide 」で外字イメージファイルを生成する
* HCP 930/939 用に「 /udcnv  /wide 」で生成しても問題はないので、わからなければ「 /udcnv  /wide 」を指定するのが無難
* 「jpn24.fnt 」は「\<ACS構成ファイルのルート>\Emulator\fonts」に配置する。通常は「C:\Users\\\<ユーザー名>\Documents\IBM\iAccessClient\Emulator\fonts」
* 外字の配置は、ACS 5250 の起動前に行う。ACS は起動時に外字イメージファイルを確認、ロックした上で利用する。起動後に生成しても使われない。

# 実際の手順

##まず「fonts」フォルダーを確認
「\<ACS構成ファイルのルート>\Emulator\fonts」フォルダーを作成しておけば、acslaunch_win-NN.exe は、そこに外字イメージファイルを生成します。
そのため、先に「\<ACS構成ファイルのルート>\Emulator\fonts」フォルダーを確認するのが便利ででしょう。
ACS 1.1.8.4 を導入「5250セッション管理機能」を起動したり、.hod アイコンからセッションを開始すると、未作成の場合「fonts」フォルダーを作成してくれるようです。
もちろん、自分で作成してもかまいません。

## acslaunch_win-XX.exe /udcnv /wideで外字イメージファイルを生成
acslaunch_win-XX.exe /udcnv /wideで外字イメージファイルを生成します。

```C:\Users\User01>IBM\ClientSolutions\Start_Programs\Windows_i386-32\acslaunch_win-32.exe /udcnv /wide
```
/wide は 1880 文字を超えたの外字を使うためのオプションですが、1880 文字以内の場合でも悪影響はないので、日本語環境の場合は、取り合えずつけておけばいいでしょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/b85b23d7-75fe-961a-8baa-48e091143765.png)

「\<ACS構成ファイルのルート>\Emulator\fonts」フォルダーを確認しておいたので、デフォルトでそちらに「 jpn24.fnt 」を生成するように設定されています。

「変換」で「 jpn24.fnt 」を生成します。

事前に作成していない場合は、別フォルダーに生成されるので「fonts」を作って/ACSに作らせて、移動してください。

## あとは PDT モードのプリンターセッションで印刷するだけ
あとは PDT モードのプリンターセッションで印刷するだけです。

# いくつかの注意
繰り返しになる項目もありますが、いくつか注意を...

## Windows 外字を直接使いません
Windows 外字を直接使わないため、外字に変更があった場合、外字イメージファイルの更新が必要です。

## 外字イメージファイルを取得するのは起動時
ACS 5250 を起動後に、外字イメージファイルを生成しても利用しません。
また、利用中の 外字イメージファイルをは ACS でロックされるので、再生成や上書き更新は失敗します。 
外字イメージファイルの生成は、ACS が起動していない時に行います。

***
2020-05-05 作成
2020-05-07 ACSが「fonts」フォルダーを作成することを記述
2020-05-08 修正は、exe/dll で acsbundle.jar ではないことを記載 
2020-05-11 修正版と以前の 1.1.8.4 と区別する方法を記載
***
「All About ACS」では IBM i に対する新しいクライアント「IBM i Access Client Solutions」の情報をいろいろ提供していきます。
[記事一覧はこちら](http://qiita.com/6onoda/items/2dc925586d8d3b8644f2)で確認いたけます。

許可の無い転載を禁じます。
この記事は筆者の個人的な責任で無保証で提供しています。
当記事に関してIBMやビジネスパートナーに問い合わせることは、固くお断りします。
***