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

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

Raspberry Pi 3 Model B 各OS、動画プレイヤーでの再生比較

ベンチマークではなく、ただ感想をメモしただけ。 Windows 10 IoT Core C#

記事を読む

[OxyPlot]errro CS0117: ‘Resource.Attribute’ に ‘mediaRouteSettingsDrawable’ の定義がありません

Xamarin.Formsでグラフ描画を行う方法のひとつにOxyPlotというライブラリがある。

記事を読む

no image

This project references NuGet package(s) that are missing on this computer.

.nugetフォルダが設定されているソリューションから一部プロジェクトのみを抜き出すと発生する。 N

記事を読む

no image

【C#, WPF】XMLデータをListViewに表示し、チェック項目のみXML保存させる

前回の続きというか、WPF版。 <Window x:Class="MyWP

記事を読む

Xamarin Studio から Visual Studio for Mac へ変更してから、”The “XamlCTask” task failed unexpectedly.” が発生。

Visual Studio for Mac がGAしたので、インストールしてみた。 それまで開発して

記事を読む

no image

Windows10 IoT CoreでWindowsアップデートの自動実行を停止する

Manage IoT Core device updates このリンクにアップデートコントロール

記事を読む

no image

macOSのVSTSビルドエージェント構築過程で、type initializeで例外が発生し接続に失敗する問題の対応

macOS Sierra (10.12.4) Deploy an agent on OSX Xa

記事を読む

【.NET】【WPF/XAML】ローカルPDFを画面に表示する

[crayon-5ba340273f45e362019927/] [vb] Public

記事を読む

no image

【iPhoneアプリ】背景画像を設定する

ImageResourceにBg.pngという背景画像を登録しておく 背景を設定するタイミング

記事を読む

【XAML】フォントサイズを自動縮小して全体を表示

Viewboxを親にするだけ。 拡大・縮小方法はStretch, StretchDirec

記事を読む

Message

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

PAGE TOP ↑