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

公開日: : 最終更新日: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

【ストアアプリ】バックグラウンドタスクを作成する

こんにちは。 Windows.ApplicationModel.Background名前空間を使用

記事を読む

【.NET】16進数文字列から色を設定する

文字列→Colorクラスへの変換メモ プログラム上でFromArgbメソッドに16

記事を読む

no image

Expression Encoder を組み込んだアプリケーションを配布する際のライセンス問題

Windowsアプリケーションにメディア編集機能を実装したい場合に、Expression Encod

記事を読む

no image

【XAML/VB.NET】XAMLファイルを帳票フォーマットとして使用する

掲題について。結論としてはFixedPageをルートとするXAMLファイルを XamlReader

記事を読む

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

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

記事を読む

【ストアアプリ】画像の光学式ズーム

こんにちは。 スマートデバイスといえばタッチ操作、ということで 今日はWindowsストアアプリ

記事を読む

no image

Visual Studio 2017 Version15.2 にアップデート後、Xamarin.iOS でビルドエラーが発生時の回避メモ

環境 Visual Studio Enterprise 2017 Version 15.2

記事を読む

no image

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

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

記事を読む

Xamarin.Androidで起動時にアプリケーションを起動

RECEIVE_BOOT_COMPLETEDの権限必要 ActionBootCompleted を

記事を読む

Message

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

PAGE TOP ↑