ユーザー定義の用紙サイズをサポートする
重要
Windows でプリンターとの通信手段として推奨されるのは、最新の印刷プラットフォームです。 プリンターデバイス開発におけるWindows 10および11での印刷体験をカスタマイズするために、MicrosoftのIPPインボックスクラスドライバーとPrint Support Apps (PSA)の使用を推奨します。
詳細については、最新の印刷プラットフォームに関する記事および「印刷サポート アプリの設計ガイド」を参照してください 。
ユーザー定義の用紙サイズは、単一のプリント サーバーに固有であり、通常は特定のアプリケーション用にカスタマイズされます。 そのため、多くの場合、カスタム用紙サイズと呼ばれます。 システム管理者は、印刷フォルダーを使用して、カスタム用紙サイズを定義します。 プリンターがカスタム用紙サイズを処理できる場合、ベンダーはプリンターの GPD ファイルを使用して、サイズの許容範囲を指定する必要があります。
カスタム用紙の許容サイズ範囲の記述方法には、次の 2 つの方法があります:
サイズ範囲は明示的に指定することができます。
サイズ範囲はプリンターの最大用紙サイズを基準に指定します。
用紙サイズ範囲を明示的に指定する
このメソッドを使用するには、GPD ファイルの PaperSize 機能に *Option エントリと CUSTOMSIZE 引数を含める必要があります。 このエントリには、次のオプション属性を含める必要があります:
*MinSize *MaxSize *MaxPrintableWidth *MinLeftMargin *TopMargin *BottomMargin *CenterPrintable? *CursorOrigin *Command これらの GPD エントリを使用して、カスタマイズされた用紙サイズの説明を作成します (次の特性を持つプリンターに限定):
プリンターが、カスタム用紙サイズを明示的に選択するコマンドをサポートしている (通常はカーソルの原点を移動します)。
すべてのカスタム用紙サイズで、カーソルの原点が用紙の左上隅を基準に固定されている。 (これは通常、横置きモードの印刷や、中央給紙や右給紙のプリンターには当てはまりません)。
上下の余白は用紙サイズに依存しません。
用紙幅が *MinLeftMargin と *MaxPrintableWidth に指定された値の合計より小さい場合、右側の余白はありません。 つまり、プリンターは用紙の右端まで印刷できます。
コマンド パラメーター (*Command エントリで指定) に標準変数式 (通常は PhysPaperLength 変数と PhysPaperWidth 変数を含む) を使用した場合、印刷時に計算されます。 これらの変数は、アプリケーションで指定された印刷ジョブに対して要求された実際の用紙サイズを表します。
プリンタの最大用紙サイズを基準とした用紙サイズ範囲の指定
カスタム用紙サイズの範囲を明示的に指定する機能がないプリンターの場合、プリンターの最大用紙サイズを基準にして用紙サイズを指定する別の方法が用意されています。
このメソッドを使用するには、GPD ファイルの PaperSize 機能に *Option エントリと CUSTOMSIZE 引数を含める必要があります。 このエントリには、次のオプション属性を含める必要があります:
*MinSize *MaxSize *MaxPrintableWidth *CustCursorOriginX *CustCursorOriginX *CustPrintableOriginX *CustPrintableOriginY *CustPrintableSizeX *CustPrintableSizeY *Command プリンターの最大用紙サイズに対して相対的なサイズ範囲を指定する場合、次の位置合わせ規則を使用します:
左給紙プリンターの場合、すべての用紙サイズの上余白と左余白を揃える必要があります。
右給紙プリンターの場合、すべての用紙サイズの上下の余白を揃える必要があります。
中央給紙プリンターの場合、すべての用紙サイズの上余白と上の中心点を揃える必要があります。
次の手順を実行します:
プリンターの最大用紙サイズに関する次の情報を取得します:
- 最大用紙サイズを選択するために必要なコマンド。
- 最大用紙サイズの *PageDimensions、*CursorOrigin、*PrintableOrigin、および *PrintableArea の GPD エントリに使用される値は、GPD ファイルに含まれる場合と同様に指定します。 ただし、実際にはこれらのエントリはファイルに配置されません。
カスタム用紙サイズごとに、プリンターの最大用紙サイズを基準にした次の情報を指定または計算する数式を作成します。
- 各用紙の印刷可能領域の原点とサイズ。
- 各用紙のカーソルの原点。
手順 2 の数式は、次の GPD エントリの値として指定される CUSTOMSIZE パラメーター式である必要があります:
*CustCursorOriginX *CustCursorOriginX *CustPrintableOriginX *CustPrintableOriginY *CustPrintableSizeX *CustPrintableSizeY
CUSTOMSIZE オプションには、最大印刷サイズを選択するコマンドを指定する *Command 項目も含める必要があります。 このコマンドは、すべてのカスタム用紙サイズに対して送信され、印刷可能領域とカーソル原点コントロールに指定された数式が実際のすべてのサイズの用紙に印刷される場所を制御します。
計算例
プリンターが、最大用紙サイズの余白と同じサイズの余白を持つカスタム用紙サイズをサポートすると仮定し、簡単な例を示します。 手順は次のとおりです。
最大用紙サイズの *PageDimensions、*CursorOrigin、*PrintableOrigin、*PrintableArea エントリの値を決定します。 (これらのエントリを GPD ファイルに配置しないでください)。
次の擬似式に示すように、これらの値を基に、最大用紙サイズの余白の幅を決定します。
LeftMarginWidth=*PrintableOrigin.x RightMarginWidth=*PageDimensions.x-*PrintableArea.x-LeftMarginWidthTopMarginWidth=*PrintableOrigin.y BottomMarginWidth=*PageDimensions.y-*PrintableArea.y-TopMarginWidth
これらの擬似式では、.x と .y は各エントリのペア値の水平方向と垂直方向のコンポーネントを表します。 横向き印刷の場合、*PrintableAreaPrintableOrigin に横長の値を使用します。
次に、標準以外の用紙サイズの印刷可能領域を指定または計算する擬似式を作成します。
*CustPrintableOriginX: %d{LeftMarginWidth}
*CustPrintableOriginY: %d{TopMarginWidth}
*CustPrintableSizeX: %d{PhysPaperWidth-LeftMarginWidth-RightMarginWidth}
*CustPrintableSizeY: %d{PhysPaperLength-TopMarginWidth-BottomMarginWidth}
PhysPaperWidth と PhysPaperLength の 2 つの標準変数を使用していることに注目してください。 実行時に、これらの変数には、アプリケーションによって要求された実際の用紙サイズの長さと幅が格納されます。
これらの擬似式は、左給紙、右給紙、または中央給紙のいずれの場合も有効です。
手順 1 で決定した実際の値をこれらの式に挿入して、GPD エントリを作成します。 例えば、次のようになります:
*CustPrintableOriginX: %d{300}
*CustPrintableOriginY: %d{300}
*CustPrintableSizeX: %d{PhysPaperWidth-600}
*CustPrintableSizeY: %d{PhysPaperLength-600}
カーソルの原点インデックスを計算する擬似式を作成します。 次の擬似式では、*CursorOrigin.x と *CursorOrigin.y は、最大用紙サイズのカーソル原点のペア値の水平および垂直コンポーネントのプレース ホルダーです。
左給紙プリンターの場合:
*CustCursorOriginX: %d{*CursorOrigin.x} *CustCursorOriginY: %d{*CursorOrigin.y} 右給紙プリンターの場合:
*CustCursorOriginX: %d{*CursorOrigin.x+PhysPaperWidth-*PageDimensions.x} *CustCursorOriginY: %d{*CursorOrigin.y} 中央給紙プリンターの場合:
*CustCursorOriginX: %d{*CursorOrigin.x+(PhysPaperWidth-PageDimensions.x)/2} *CustCursorOriginY: %d{*CursorOrigin.y} 手順 1 で決定した実際の値をこれらの式に挿入して GPD エントリを作成します。 例えば、次のようになります (中央給紙の場合):
*CustCursorOriginX: %d{((PhysPaperWidth-14040)/2)+300}
*CustCursorOriginY: %d{180}
残りの 3 つの GPD エントリの値 (*MinSize、*MaxSize、*MaxPrintableWidth) を指定します。 *MaxPrintableWidth に指定された値は、このメソッドでは実際には使用されませんが、パーサーはエントリが存在する必要があるため、値を 1 に設定できます。
例
次の GPD ファイル セグメントの例では、中央給紙プリンターで使用できるカスタム用紙サイズを示しています。 縦長モードでは、すべてのカスタム用紙サイズのすべての余白のサイズが 300 マスター単位 (1/4 インチ) になります。 横モードでは、上下の余白は 240 マスター 単位、左右の余白は 200 マスター 単位になります。
*Option: CUSTOMSIZE
{
*rcNameID: =USER_DEFINED_SIZE_DISPLAY
*MinSize: PAIR(4200,9000)
*MaxSize: PAIR(14040, 21240)
*MaxPrintableWidth: 14040
*MinLeftMargin: 100
*CenterPrintable?: FALSE
*PageProtectMem: 1692
*InsertBlock: =PaperConstraints
*switch: Orientation
{
*case: PORTRAIT
{
*CustCursorOriginX: %d{((PhysPaperWidth-14040)/2)+300}
*CustCursorOriginY: %d{180}
*CustPrintableOriginX: %d{300}
*CustPrintableOriginY: %d{300}
*CustPrintableSizeX: %d{PhysPaperWidth-600}
*CustPrintableSizeY: %d{PhysPaperLength-600}
*Command: CmdSelect
{
*Order: DOC_SETUP.13
*Cmd: "<1B>&l101a8c1e99F<1B>*p0x0Y<1B>*c0t8064x12528Y"
}
}
*case: LANDSCAPE_CC90
{
*switch: Option20
{
*% The 8100 rotates the landscape job 180 degrees if a stapler
*% is attached, so the staple can be placed in the top left
*% corner of the document. The printer always rotates the
*% landscape job, even if stapling is not selected.
*case: 3KStapler
{
*CustCursorOriginX: %d{((PhysPaperWidth-14040)/2)+200}
*CustCursorOriginY: %d{PhysPaperLength}
*CustPrintableOriginX: %d{200}
*CustPrintableOriginY: %d{240}
*CustPrintableSizeX: %d{PhysPaperWidth-400}
*CustPrintableSizeY: %d{PhysPaperLength-480}
*Command: CmdSelect
{
*Order: DOC_SETUP.13
*Cmd: "<1B>&l101a8c1e63F<1B>*p0x0Y<1B>*c0t12456x8184Y"
}
}
*case: MBM5S
{
*CustCursorOriginX: %d{((PhysPaperWidth-14040)/2)+200}
*CustCursorOriginY: %d{PhysPaperLength}
*CustPrintableOriginX: %d{200}
*CustPrintableOriginY: %d{240}
*CustPrintableSizeX: %d{PhysPaperWidth-400}
*CustPrintableSizeY: %d{PhysPaperLength-480}
*Command: CmdSelect
{
*Order: DOC_SETUP.13
*Cmd: "<1B>&l101a8c1e63F<1B>*p0x0Y<1B>*c0t12456x8184Y"
}
}
*default
{
*CustCursorOriginX: %d{((PhysPaperWidth-14040)/2)+200}
*CustCursorOriginY: %d{21000}
*CustPrintableOriginX: %d{200}
*CustPrintableOriginY: %d{240}
*CustPrintableSizeX: %d{PhysPaperWidth-400}
*CustPrintableSizeY: %d{PhysPaperLength-480}
*Command: CmdSelect
{
*Order: DOC_SETUP.13
*Cmd: "<1B>&l101a8c1e63F<1B>*p0x0Y<1B>*c0t12456x8184Y"
}
}
} *% switch Option20
} *% case LANDSCAPE_CC90
} *% switch Orientation
}