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

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

関連記事

Visual Studio 2015 Express の Language Pack

探してみたけど見当たらなかったのでメモ残し。 Visual Studio 2015 には言語パック

記事を読む

【ストアアプリ】トースト通知の基本

Windowsストアアプリ開発での基本。 トースト通知について投稿します。 Pack

記事を読む

no image

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

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

記事を読む

no image

Xamarin.FormsのAndroidでスプラッシュ画面

Xamarin.Formsでアプリを作成した時、iOSは起動時にLauncher.storyboar

記事を読む

no image

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

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

記事を読む

no image

‘System.Windows.Navigation.BaseUriHelper’ のタイプ初期化子が例外をスローしました。

作成した.NETアプリケーション(WPF)が起動しない。 今回は構成ファイル(app.config)

記事を読む

Visual Studio Team Services で 新規プロジェクトを作成するときの自分用初期設定メモ

新規プロジェクト作成 Version control -> Git Work item proc

記事を読む

Visual Studio 2015 Update1 の Xamarin.Forms でインテリセンスを使いたい

Xamarinを触り始めました。 チュートリアルということで、Xamarin.Forms Quick

記事を読む

画面設計デザイン時の無料画面イメージ作成ツール

画面デザイン全般に使っているツールを紹介。 Webアプリ作成時のワイヤーフレームや、 ス

記事を読む

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

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

記事を読む

Message

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

PAGE TOP ↑