- ファイル名を指定して、XpsDocumentオブジェクトを作成。
- XpsDocument.CreateXpsDocumentWriter を使って、1.で作成した XpsDocumentオブジェクトから、XpsDocumentWriter オブジェクトを作成。
- 2.で作成した XpsDocumentWriterオブジェクトの CreateVisualsCollatorメソッドで、VisualsToXpsDocumentオブジェクトを作成。
- 3.で作成した VisualsToXpsDocumentオブジェクトの Writeメソッドで、書き込みたいVisual オブジェクト を指定して書き込み。
using (XpsDocument xpsdoc = new XpsDocument(sfd.FileName, FileAccess.Write)) //1
{
XpsDocumentWriter xpsdw = XpsDocument.CreateXpsDocumentWriter(xpsdoc); //2
VisualsToXpsDocument vToXpsD = (VisualsToXpsDocument)xpsdw.CreateVisualsCollator(); //3
vToXpsD.Write(this.canvas1); //4
vToXpsD.EndBatchWrite();
}
保存したファイルをXPSビューアーで開いてみます。画面のハードコピーではないので、拡大しても滑らかです。
MainWindow.xaml
<Window x:Class="SaveXps.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="200" Width="300">
<Window.CommandBindings>
<CommandBinding Command="SaveAs" Executed="SaveAsCommandHandler" />
</Window.CommandBindings>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Menu Grid.Row="0">
<MenuItem Command="SaveAs"/>
</Menu>
<Canvas Grid.Row="1" Name="canvas1">
<TextBlock>Canvas上のTextBlock</TextBlock>
<Button Canvas.Top="10" Canvas.Left="20">ボタン</Button>
<Ellipse Canvas.Top="10" Canvas.Left="10" Stroke="Black" Width="30" Height="30" />
</Canvas>
</Grid>
</Window>
MainWindow.xaml.cs
using Microsoft.Win32;using System.IO;
using System.Windows;
using System.Windows.Input;
using System.Windows.Xps;
using System.Windows.Xps.Packaging;
namespace SaveXps
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void SaveAsCommandHandler(object sender, ExecutedRoutedEventArgs e)
{
SaveFileDialog sfd = new SaveFileDialog();
if (sfd.ShowDialog() == true)
{
using (XpsDocument xpsdoc = new XpsDocument(sfd.FileName, FileAccess.Write))
{
XpsDocumentWriter xpsdw = XpsDocument.CreateXpsDocumentWriter(xpsdoc);
VisualsToXpsDocument vToXpsD = (VisualsToXpsDocument)xpsdw.CreateVisualsCollator();
vToXpsD.Write(this.canvas1);
vToXpsD.EndBatchWrite();
}
}
}
}
}
0 件のコメント:
コメントを投稿