40章:チュートリアル39:WPFでの印刷(2) (VB)

    作成2013.04.07

     WPFアプリケーションにおける印刷に関しては、わかりやすい事例が見つかりませんでした。

  1. 参照元情報
     印刷の概要は
    「印刷の概要」にジャンプする
     DocumentViewerを利用すると比較的簡単にXAMLで作成した図形の印刷ができます。

  2. WPF印刷(2)
     DocumentViewerを試行錯誤的に試した結果です。
     ダウンロード後は解凍してから使用してください。
      [WPF印刷(2)]をダウンロードする。
     解凍すると「40WPF_Printing2」フォルダーがあります。
    注(1)「40WPF_Printing2」フォルダーの「WPF_Printing2.sln」ファイルをダブルクリックすると「Microsoft Visual Basic 2010 Express」が起動します。
    注(2)メニューの「ウインド」_「ウインドレイアウトのリセット」で標準に戻ります。
    注(3)「ソリューションエクスプローラ」ウインドウ内の「MainWindow.xaml」をダブルクリックすると「デザイン」と「XAML」が表示されます。
    注(4)メニューの「表示」_「コード」を選択するとコードが表示されます。
    注(5)「WPF_Printing2.sln」の動作確認は「デバッグ」_「デバッグ開始」で実行します。デバッグ機能を用いて動作確認を行います。


  3. WPF_Printing2.slnの実行
    (1)「Microsoft Visual Basic 2010 Express」のデバッグ機能を使用します。
    (2)「デバッグ」_「デバッグ開始」を選択します。
    (3)図形がはいった印刷画面が表示されます。
    (4)印刷ボタンを押すと印刷が実行されます。
    (5)クローズボックスで終了します。


  4. プロジェクトの構成
    (1)XAMLコードとVBコードで構成されます。


  5. XAMLの全コード
    <Window x:Class="MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="401" Width="522">
        <Grid>
            <Grid Name="Grid1" Margin="0,25,0,0">
                <Ellipse Height="50" HorizontalAlignment="Left" Margin="65,91,0,0" Name="Ellipse1" Stroke="Black" VerticalAlignment="Top" Width="93" Fill="BlueViolet" />
                <Label Content="Label" Height="28" HorizontalAlignment="Left" Margin="225,167,0,0" Name="Label1" VerticalAlignment="Top" />
                <Rectangle Height="56" HorizontalAlignment="Left" Margin="264,85,0,0" Name="Rectangle1" Stroke="Black" VerticalAlignment="Top" Width="101" Fill="Magenta" />
    
            </Grid>
            <DocumentViewer   Name="DocumentViewer1" Margin="0,0,0,0" Visibility="Hidden"></DocumentViewer>
        </Grid>
    </Window>
    


  6. XAMLのポイント
    (1)Grid1内に図形を配置します。
    (2)Grid1外にDocumentViewerを配置します。


  7. Class MainWindowクラスの全コード
    Class MainWindow 
        Public Sub New()
            InitializeComponent()
    
            Dim page As New FixedPage
            Dim content1 As New PageContent
            Dim doc As New FixedDocument
    
            Grid1.Children.Clear()
            Me.DocumentViewer1.Visibility = Windows.Visibility.Visible
    
            page.Width = 120 * 96 / 25.4
            page.Height = 70 * 96 / 25.4
            page.Children.Add(Ellipse1)
            page.Children.Add(Rectangle1)
            page.Children.Add(Label1)
            CType(content1, Markup.IAddChild).AddChild(page)
    
            doc.Pages.Add(content1)
            Me.DocumentViewer1.Document = doc
        End Sub
    End Class
    


  8. VBコードの解説
    (1)Dim page As New FixedPageで変数pageをFixedPage型で生成します。
    (2)Dim content1 As New PageContentで変数content1をPageContent型で生成します。
    (3)Dim doc As New FixedDocumentで変数docをFixedDocument型で生成します。
    (4)Grid1.Children.Clear()でGrid1に配置された図形を切り離します。
    (5)Me.DocumentViewer1.Visibility = Windows.Visibility.VisibleでDocumentViewer1を可視可します。
    (6)page.Widthとpage.Heightでページサイズを決定します。
    (7)page.Children.Addでpageに図形を加えます。
    (8)CType(content1, Markup.IAddChild).AddChild(page)でcontent1にpageを加えます。
    (9)doc.Pages.Add(content1)でdocにcontent1を加えます。
    (10)Me.DocumentViewer1.Document = docでDocumentViewer1にdocを加えます。


    感想:
    (1)非常に簡単な記載でXAMLで作成した図形を印刷できます。
    (2)DocumentViewerはプレビュー画面でデザイン等が制限されます。
    (3)このままでは、プログラム上の自由度がないので、実用的には改良する必要があります。
    (4)XAMLで作成した図形をDocumentViewerに加えるには一旦、図形をGrid1から切り離す必要があり、このための処理を考える必要があります。






41章:チュートリアル40:WPFでの印刷(3) (VB)に行く。

トップページに戻る。