プリンターを使って印刷するには

プリンターへのアクセス

WindowsRuntimeでは周辺機器へのアクセスはDeviceInformationクラスでデバイスを列挙して特定しますが、プリンターの場合はチャームのデバイス→印刷を表示することで現在アクセス可能なプリンター一覧が表示され、ユーザーが任意のプリンターを選択するという形になります。

32

 

したがって、プリンターで印刷をするために開発者側がすることは、プリントしたいドキュメントをPrintManagerクラスに投げるだけです。

どのプリンターで印刷するか、印刷をするかどうかはユーザーの選択に任せることになっています。

 

印刷用ページの作成

WindowsRuntimeで印刷を行うことができるものは、UIElementとそれを継承するクラスです。

UIElementはほとんどのXAMLコントロールの基底となるクラスですのでほとんどのコントロールは印刷が可能です。

したがって、画像やドキュメントなどを印刷したい場合、一度XAMLコントロール上に置きます。

 

今回は3ページ印刷するために一つ一つのページをCanvasコントロールで定義します。

 

XAMLでページが定義できたら、一度コンストラクタでUIElementのコレクションに入れておきましょう。

ページは複数(今回は3ページ)なのでUIElementのコレクションにいれることで扱いやすくなります。

 PrintDocumentの作成

印刷するドキュメントはPrintDocumentというクラスで定義されます。

このクラスは少し特殊で、何かしらの要求が来た時、そのイベントを使って印刷するコンテンツを追加します。

33

 

PrintDocumentを使うには、まずPrintDocumentをnewします。

 

つづいて、プレビュー要求がきたときのイベントを処理します。

Paginateイベントはプレビュー要求がきたときにプレビューページの最大数を設定する必要があります。

GetPreviewPageイベントはプレビュー要求がきたときにプレビューページをすべて設定します。

AddPagesイベントは印刷要求がきたときに印刷したいページをすべてAddPageします。

すべてAddできたらAddPagesCompleteメソッドを最後に呼んで印刷ページの追加を完了します。

これでPrintDocumentの処理は完了です。

PrintMangerでチャームに登録

先ほど作成したPrintDocumentをチャームに登録するにはPrintManagerクラスを使います。

このクラスもPrintDocument同様、要求イベントが来た時に応じで処理をします。

 

PrintTaskRequestedイベントはユーザーがチャームの印刷を押した時に発生します。

ここでCreatePrintTaskメソッドによってPrintDocumentのDocumentSourceプロパティを渡します。

CreatePrintTaskは別スレッドで呼び出されるのでDispatcher.RunAsyncメソッドでUIスレッドに戻します。

 

また、CreatePrintTaskメソッドは第一引数で印刷Paneに表示されるタイトルをかえることができます。

印刷する

以上で印刷ドキュメントの登録は完了しました。

あとは端末をプリンターに接続し、アプリからチャーム→デバイス→印刷を押すと印刷することができます。

 

印刷チャームを表示する

印刷チャームを表示することでユーザーに印刷を促すこともできます。

印刷チャームを表示するにはPrintMangerのShowPrintUIAsyncメソッドを使います。

 

サンプルコード

XAML

C#

 

EpsonのPX-046Aで印刷してみました。

20140922_192016764_iOS

印刷できました

20140922_192159799_iOS

目次