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

公開日: : 最終更新日: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の設定がイマイチ効かない…。プリンタに依存するのでしょうか。

関連記事

拡張温度に対応した Windows 10 IoT Core ボード

Windows 10 IoT Core 対応ボード その2 こっちは拡張温度対応している。 Ban

記事を読む

no image

【Xcode】Capabilities全項目【v6.1時点】

Capabilitiesの各項目が何を示しているのか よくわからなかった、かつ日本語のサイトが少な

記事を読む

Package ‘Win10SDK_10.0.14393.33,version=10.0.14393.3300’ failed to install.

Visual Studio 2017 RC1 でUWPアプリケーションのコンポーネントインストールす

記事を読む

Xamarin.Forms + Visual Studio Team Services ビルドタスクで自動バージョンアップ

Visual Studio Team Services で Xamarin.Forms の継続的デリ

記事を読む

【iPhoneアプリ】リリース手順〜iTunesConnect登録〜

AppStoreに有料アプリ、iAdアプリを公開するためには、 iTunes Connectで

記事を読む

no image

UWPでMicrosoft.OData.Clientを使用する時、LINQ式でエラー

UWPからは非同期メソッドを実行する必要があるので、通常はExecuteAsyncをコールするが、

記事を読む

no image

【.NET】正規表現の復習

正規表現エンジン System.Text.RegularExpressions.Regexオブジェ

記事を読む

no image

No registered resource provider found for location ‘Japan East’ and API version ‘2.0’ for type ‘servers’.

Visual Studio から Azure Web Apps をデプロイするときに発生したエラーの

記事を読む

【ストアアプリ】バッジ通知(BadgeUpdateManager)について

こんにちは。 前回のタイル通知にバッジ通知を追加しました。 以下を参考に。 https

記事を読む

no image

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

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

記事を読む

Message

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

PAGE TOP ↑