【ストアアプリ】基本的な印刷手順

公開日: : 最終更新日:2015/10/20 Blog, Microsoft ,

Windowsストアアプリにて印刷を行う方法を紹介します。

印刷を行うには印刷コントラクトを使用します。

<Page
    x:Class="App1.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:App1"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">
    <Grid Name="target" Background="Blue">
        <TextBlock Text="hoge" FontSize="100"/>
        <Button Content="print" Click="Button_Click" FontSize="100" />
    </Grid>
</Page>
public MainPage()
{
    this.InitializeComponent();

    var printDocument = new PrintDocument();
    var printDocSrc = printDocument.DocumentSource;
    var printMgr = PrintManager.GetForCurrentView();
    printDocument.Paginate += (sender, e) =>
    {
        //印刷オプションなどを設定できる
        e.PrintTaskOptions.ColorMode = PrintColorMode.Monochrome;
        e.PrintTaskOptions.Orientation = PrintOrientation.Landscape;
        e.PrintTaskOptions.MediaSize = PrintMediaSize.IsoA4;

        //TODO:この時点で前頁分の印刷イメージを用意しておく。
        //     GetPreviewPageイベントハンドラで頁番号で要求される。
    };
    printDocument.GetPreviewPage += (sender, e) =>
    {
        //指定ページ番号のプレビュー要求
        printDocument.SetPreviewPage(e.PageNumber, target);
    };
    printDocument.AddPages += (sender, e) =>
    {
        //PrintDocumentインスタンスに印刷ページを渡す
        printDocument.AddPage(target);
        printDocument.AddPagesComplete();
    };
    printMgr.PrintTaskRequested += (sender, e) =>
    {
        e.Request.CreatePrintTask("title", new PrintTaskSourceRequestedHandler((e2) =>
        {
            e2.SetSource(printDocSrc);
        }));
    };
}

private async void Button_Click(object sender, RoutedEventArgs e)
{
    //プログラムからチャームを呼び出す
    await PrintManager.ShowPrintUIAsync();
}

PrintManager.GetForCurrentViewでPrintManagerインスタンスを取得します。
PrintManagerのPrintTaskRequestedをサブスクライブし、PrintDocumentSourceインスタンスを引き渡します。

PrintDocumentSourceは、Paginate/GetPreviewPage/AddPagesイベントをサブスクライブします。
印刷チャームから要求されると上記3つのイベントが順次処理されます。(AddPagesは印刷確定ボタンを押したタイミング)

#PrintColorMode.Monochromeの設定がイマイチ効かない…。プリンタに依存するのでしょうか。

関連記事

no image

UWP+IoT Coreのシリアル通信メモ

Windows10 IoT + Raspberry Pi を始めようとしているのだが、どうもセンサー

記事を読む

no image

属性を使って、列挙型の列挙子を並び替え、フィルタリングする

メモだよ

記事を読む

no image

【WPF/XAML】Visibility変更時のアニメーション切替

ストーリーボードを使わずに、Visibility変更でアニメーションを発生させたかった。 やってる

記事を読む

App Service Linux (Docker) 環境で、コンテナ内の Nginx のログをAzureポータルから確認

何も設定しない場合はSSHでアクセスしてログ参照する 通常はコンテナ内の /var/log/ngi

記事を読む

Visual Studio 2015 + PHP Tools for Visual Studio で App Service for Linux へデプロイ

発端はこれ。 https://social.msdn.microsoft.com/Forums/ja

記事を読む

Visual Studio Team Services ダッシュボードを自動更新する

Visual Studio Team Services のダッシュボードでプロジェクトや運用状況のサ

記事を読む

【ストアアプリ】タイル通知(TileUpdateManager)について

こんにちは。 ストアアプリでタイル通知を行う方法を調べました。 前回のトースト通知と

記事を読む

【WPF/XAML】チェックボックスのデザイン変更

[xml] <Window x:Class="Sample"

記事を読む

【iPhoneアプリ】多言語対応させる2

今回はコード内の文字列を多言語化する ファイルを追加する。  

記事を読む

no image

【Cocos2d-x】Cocos2d-xセットアップ

メモ。Xcodeはインストール済、OSはMac10.9.5 必要なものをダウンロード&解凍

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

PAGE TOP ↑