始めの言葉

「プリンターから印刷できて当たり前」と、ユーザーからもSIerからも軽視されがちなプリンターの世界ですが、実際にはお困りだったり、思ったような印刷結果が得られないまま我慢してお使いの皆様のために、今までの経験が役立てばと、このブログを立ち上げました。印刷の基本から、応用情報、問題の解決方法を情報発信すると共に、PDF化など、これからどうするかについても、ご相談に乗れれば幸いです。ご質問はコメントでお寄せください。

2018年12月29日土曜日

プリントチケットを使った印刷制御 第 3 回 - XPSConfig ファイル -

前回のお話の最後に、"MAPXPS" コマンドを使用して印刷する際に、パラメーターとして "Profile Name" がありました。Mapping をインストールすると、自動的に "XPSConfig.conf" というファイルが保存されます。OS/400 版であれば、IFS 上の "\mapping" フォルダーの直下にあります。このファイルをメモ帳やブラウザーで開くと、次のような内容であることが分かります。
<xpsconfig>
                <*XPS>
                    <label>DO NOT MODIFY - standard XPS</label>
                    <language>XPS</language>
                </*XPS>
                <*PCL>
                    <label>DO NOT MODIFY - standard PCL5/e</label>
                    <language>PCL</language>
                    <color>off</color>
                </*PCL>
                <*PDF>
                    <label>DO NOT MODIFY - standard PDF</label>
                    <language>PDF</language>
                </*PDF>
                <*AFPDS>
                    <label>DO NOT MODIFY - standard AFPDS</label>
                    <language>AFPDS</language>
                </*AFPDS>
                <*IGP>
                    <label>DO NOT MODIFY - standard IGP</label>
                    <language>IGP</language>
                  <image>PCX</image>
                </*IGP>
                <*ZEBRA>
                    <label>DO NOT MODIFY - standard ZEBRA/ZPLII</label>
                    <language>ZEBRA</language>
                </*ZEBRA>
                <AFPDS6500>
                    <label>AFPDS for Matrix printer InfoPrint 6500</label>
                    <language>AFPDS</language>
                    <fonts>
                        <font name="OCR-A" size="12.00"  fgid="13" />
                        <font name="OCR-B" size="12.00"  fgid="3" />
                        <font name="Gothic" size="12.00"  fgid="26" />
                        <font name="Gothic" size="12.00" bold="1"  fgid="28" />
                    <font name="Gothic" size="12.00" italic="1"  fgid="314" />
                    <font name="Gothic" size="10.00"  fgid="87" />
                    <font name="Gothic" size="10.00" bold="1"  fgid="110" />
                    <font name="Gothic" size="10.00" italic="1"  fgid="109" />
                    <font name="Gothic" size="9.00"  fgid="204" />
                    <font name="Gothic" size="9.00" bold="1"  fgid="207" />
                    <font name="Gothic" size="9.00" italic="1"  fgid="208" />
                    <font name="Gothic" size="8.00"  fgid="222" />
                    <font name="Gothic" size="8.00" bold="1"  fgid="220" />
                    <font name="Gothic" size="8.00" italic="1"  fgid="217" />
                    <font name="Gothic" size="7.00"  fgid="400" />
                    <font name="Gothic" size="7.00" bold="1"  fgid="404" />
                    <font name="Gothic" size="7.00" italic="1"  fgid="408" />
                    <font name="Gothic" size="6.00"  fgid="258" />
                    <font name="Gothic" size="6.00" bold="1"  fgid="295" />
                    <font name="Gothic" size="6.00" italic="1"  fgid="296" />
                    <font name="Courier New" size="12.00"  fgid="11" />
            <font name="Courier New" size="12.00" bold="1" fgid="46" />
            <font name="Courier New" size="12.00" italic="1" fgid="18" />
            <font name="Courier New" size="10.00"  fgid="85" />
            <font name="Courier New" size="10.00" bold="1" fgid="108" />
            <font name="Courier New" size="10.00" italic="1" fgid="92" />
            <font name="Courier New" size="8.00"  fgid="214" />
            <font name="Courier New" size="8.00" bold="1" fgid="223" />
            <font name="Courier New" size="8.00" italic="1" fgid="215" />
                        <font name="Essay" size="PSM"  fgid="160" />
                        <font name="Essay" size="PSM"  fgid="163" />
                        <font name="Essay" size="PSM"  fgid="162" />
                    </fonts>
                    <color>OFF</color>
                    <codepage>1147</codepage>
                    <dotmatrix>on</dotmatrix>
                    <embeddedfont>no</embeddedfont>
                    </AFPDS6500>
<PDFPWD1>
<language>PDF</language>
<encryptmode>on</encryptmode>
<encryptuserpwd>[USRPSWD]</encryptuserpwd>
<encryptallowprint>[USRPRTALW]</encryptallowprint>
<encryptallowhightlevel>on</encryptallowhightlevel>
<encryptallowdataextraction>[USRCPYALW]</encryptallowdataextraction>
<encryptallowaccessibility>on</encryptallowaccessibility>
<encryptallowmodify>on</encryptallowmodify>
<encryptallowcomment>on</encryptallowcomment>
<encryptallowassemble>on</encryptallowassemble>
</PDFPWD1>
</xpsconfig>
xml 形式のファイルなので、例えば、次の 2 行でセットとなります。
<xpsconfig>

</xpsconfig>
ここで記されている様々な記述は、Mapping のデフォルトの指定となります。
具体的には、次のような意味を持っています。
<*XPS>
            <label>DO NOT MODIFY - standard XPS</label>
            <language>XPS</language>
</*XPS>
ここで、<*XPS>と</*XPS>で挟まれた中で、language、つまりファイル形式が "XPS" であることを指定しているということは、"*XPS" は、ファイル形式として XPS 形式であることを表しています。基本の設定なので、"DO NOT MODIFY", すなわち、変更不可という記述があります。
同様に、"*PCL"、"*PDF" についても定義されています。
そして、肝心なのはここからですが、この中に例えば、次のような記述を追加します。 
<PCLDUPLEXL>
         <label>DO NOT MODIFY - standard PCL5/e</label>
         <language>PCL</language>
         <duplex>LONG</duplex>
</PCLDUPLEXL>
これは、"PCLDUPLEXL" という名前を付けて、長辺綴じでの両面印刷を指定したものです。この定義 "PCLDUPLEXL"を "Profile Name" で指定すると、Mapping が "MAPXPS" コマンドに従って PCL 形式の印刷データを生成する際に、IFS 上の "XPSConfig.conf" の中から、この指定を読み取って、長辺綴じの両面印刷コマンドを組み込みます。
この追加した記述は、いくつでも "XPSConfig.conf" の中に追加することができます。もちろん、その際には、同じ名前のものが重ならないように注意することは必要です。
これが、Mapping において、プリントチケットを活用する方法です。

2018年12月22日土曜日

プリントチケットを使った印刷制御 第 2 回 - PCL プリンターの制御 -

3. 2-2. で生成された XPS 形式のファイル "STD_NOFRONT.xps" に対して、長辺綴じを指定した両面印刷コマンドをプリントチケットとして埋め込んだ XPS ファイルを生成します。そのために、次のようにパラメーターを指定して、MAP_XPS プログラムを実行します。 
-infile:/home/mapping/test/STD_NOFRONT.xps(対象となる XPS ファイル名) 
-set:DUPLEX=long(長辺綴じ両面印刷指定。短辺綴じの場合は、"short" を指定) 
-outfile:/home/mapping/test/STD_DUPL.xps(変換後の XPS ファイル名) 
-pages:*(固定値:XPSファイルの全ページに適用することを意味します。)
XPS ファイルに、長辺綴じ両面印刷コマンドを全ページに対して適用する
4-1. "MAPXPS" コマンドを使用して、生成された XPS ファイルを PCL 形式の印刷データに変換した後、OUTQ を通して PCL モードを持つプリンターに送信して印刷させます。そのために、MAPXPS と入力してからキーボードの F4 キーを押します。表示された画面で、次のようにパラメーターを指定した後、キーボードの F10 キーを押します。 
Input file xps : /home/mapping/test/STD_DUPL.xps(“3-1” の変換後の XPS ファイル名) 
Output file : *PRINT(印刷する場合の固定値。大文字) 
Printer language : *PCL(固定値。大文字) 
Spooled file : stddupl(生成される印刷データの任意のスプール名)
MAPXPS コマンド 1 画面目の指定
4-2. 次の画面では、次のように指定します。 
Output queue : PCLPTR(PCL プリンター用の OUTQ ) 
Library : QUSRSYS(PCL プリンターOUTQ のライブラリー名) 
Profile Name : *PCL(固定値。大文字)
MAPXPS コマンド 2 画面目の指定
以上のように指定したら、実行キーを押すと、XPS ファイルが生成されてからプリント・チケットが組み込まれた PCL モードの印刷データに変換されて、PCL プリンターへの OUTQ を通して印刷されるという一連の流れが実行されます。
最後に指定した "Profile Name" がプリント・チケットと深く関係しますが、これについては、次回にお話しします。




2018年12月15日土曜日

プリントチケットを使った印刷制御 第 1 回 - PCL プリンターの制御 -

Mapping Suite の現行のバージョン 7 では、XPS をコアのアーキテクチャーとしていますが、XPS の中には、"プリントチケット" という機能があります。Mapping V7 では、この機能を活用すると、今までの AS/400 からの印刷ではできなかった細かい印刷制御が可能になります。
ただし、Mapping が印刷データを生成して、OUTQ から送信することによって直結印刷できる、"PCL" モードを持つプリンターが対象となります。
今までも何度かお話してきましたが、海外ではデファクト・スタンダードとなっている、レーザー・プリンターや複合機の "PCL" モードも、日本の国内では、標準でサポートしているプリンターや複合機はまだ少数派です。とは言え、ほとんどのメーカーでは安価なオプションとして用意していますので、Mapping から見た場合、PCL モードのプリンターを使用することのメリットとコストを比較すると、ハードルは低いと言えると思います。

では、プリント・チケットの原理のお話の前に、実施に使用した実例を見てみましょう。 
あるお客様では、AS/400 上の Mapping から PCL モードを持つレーザー・プリンターに印刷する際に、両面印刷することが必要でした。しかし、両面印刷と言っても、長辺綴じ/短辺綴じがあります。そこで、XPS のプリントチケットを活用して次の流れで実現します。
おおまかには、次の流れになります。
1. MAPCPYSPLFコマンドを使用して、XPSファイルを生成します。 
2. 生成したXPSファイルに対して、MAP_XPSプログラムを使用して、FRONTSIDE=OFF を適用したXPSファイルに変換します。 
3. 変換したXPSファイルに対して、MAP_XPSプログラムを使用して、長辺綴じ、または短辺綴じを指定した両面印刷指定コマンドを組み込みます。 
4. 両面印刷指定コマンドを組み込んだXPSファイルに対して、MAPXPSコマンドを使用して印刷します。

具体的な手順を画面を見ながら追っていきます。
1-1. MAPCPYSPLF コマンドを使用して、XPS ファイルを生成します。MAPCPYSPLF コマンドは、今まで何度か出てきました。1 画面目で、対象となるスプール・ファイルと、フォーマットを指定して、キーボードの "F10" キーを押します。
MAPCPYSPLF コマンドの 1 画面目
1-2. 2 画面目では、次のように、"XPS Printer/outfile language" 欄に "*XPS" を指定します。これは、もちろん、これから生成するのは、XPS ファイルだからです。
MAPCPYSPLF コマンドの 2 画面目
1-3. 3 画面目では、次のように、生成する XPS ファイルのフォルダーとファイル名を指定します。フォルダーは、IFS 上のものになります。その後、実行キーを押して 指定したファイル名の XPS ファイルを生成します。
MAPCPYSPLF コマンドの 3 画面目
2-1. 次に "CALL MAP_XPS" と入力して実行します。次のような画面が表示されますので、"-infile:" の後に、"1" で生成した XPS ファイルのフォルダーとファイル名を指定します。追加するパラメーターがありますので、2 行目に "+" を入力して実行します。
MAP_XPSの 1 画面目
2-2. 次の画面のように、3 つのパラメーターを入力します。 
-set:FRONTSIDE=OFF <- 固定値 
-outfile:/home/mapping/test/STD_NOFRONT.xps <- 変換後の XPS ファイル名
-pages:* <- 固定値(XPS ファイルの全ページに適用することを意味します。)
実行キーを 2 度押して、XPS ファイルを生成します。

MAP_XPSの 2 画面目


 

2018年12月8日土曜日

MapDraw を使った帳票設計のテクニック 第19 回 - スプールに無いデータを追加する

MapDraw を使った帳票設計では、データはスプール・ファイルにあることが基本ですが、スプール・ファイルに無いデータを、帳票上に追加することもできます。例えば、MAPCPYSPLF コマンドを使用して PDF ファイルを生成するに当たって、スプール・ファイルの中の日付や時刻ではなく、PDF ファイルが生成された日付や時刻を追加表示することが、次の手順を使えば可能です。

1. 対象のスプールの属性を調べて、1ページ当たりの行数を確認します。下の画面の例では、"66 行" になります。
スプールの属性 66行/1ページ
2. 次の “3” で指定する、スプールに無いデータが、上の ”1” で確認した行数 +1 行目に追加されることを前提に、MapDraw 上で帳票設計します。下の画面の例では、67 行目に 10 桁のデータが追加されることを想定し、”DATETIME” というゾーンを設定しています。
追加のゾーンの指定
3. プロジェクトの生成 → 取り込みを行った後、次のコマンドを実行して、"QTEMP" というライブラリー内に、"MAPUSRDTA" というデータ・エリアを作成します。この例では、YYYY/MM/DDという文字をデータエリア内に作成します。
CRTDTAARA DTAARA(QTEMP/MAPUSRDTA) TYPE(*CHAR) LEN(2000) VALUE('YYYY/MM/DD’)
データ・エリア作成コマンド
4.MAPCPYSPLFコマンドを使用して、PDFファイルを生成します。
MAPCPYSPLF コマンド 1 画面目
MAPCPYSPLF コマンド 2 画面目
MAPCPYSPLF コマンド 3 画面目
5. 生成された PDF ファイルを表示すると、”2” で指定した箇所に、”3” で追加したデータが表示されたことを確認できます。
追加された文字

データ・エリアとは、プログラム間、ジョブ間の制御情報として使用されるディスク上の記憶域を表すオブジェクトの一つで、OS/400 の機能の一つです。ユーザー定義のデータ・エリアとローカル・データ・エリアがありますが、ここで使用するのは、ユーザーが作成するデータ・エリアです。任意のライブラリーに作成でき、複数のジョブで利用可能です。

ここでは、MAPCPYSPLF コマンドを実行する際に、67 行目にデータ・エリアの内容を取り込んで処理するために、事前に "*.pag" ファイルとして表示することができません。ただ、データ・エリア内の値を表示するには、次のコマンドを実行します。


WRKDTAARA DTAARA(QTEMP/MAPUSRDTA)

次の画面が表示されますので、"5= 表示" を実行します。
データ・エリアの表示
次の画面のように、データ・エリア内のデータが表示されます。 
データ・エリアの内容の表示
この例では追加する文字は固定値でしたが、実際には日付や時刻等の変数を追加する方が多いと考えられます。日付や時刻の追加の場合のCLの例を次に示します。

DCL VAR(&SYSTME) TYPE(*CHAR) LEN(20)
RTVJOBA DATETIME(&SYSTME)
CRTDTAARA DTAARA(QTEMP/MAPUSRDTA) TYPE(*CHAR) LEN(2000) VALUE(&SYSTME)
MAPCPYSPLF…
これによって、データエリア (QTEMP/MAPUSRDTA) YYYYMMDDHHNNSSXXXXXX がセットされます。