XamDataChart を PDF ファイルに出力する方法として、Microsoft Print to PDF を利用する方法があります。
しかしながら、チャートを RenderTargetBitmapを使用して一旦画像化してから(ラスターデータ)ファイルを作成すると画質があまりよくありません。特に拡大時に線の粗さが目立ってしまいます。

例えばこのようなチャートを出力する場合、

画像化してからPDFファイルに出力すると、このようになります(拡大時)。

DocumentPaginator を使用することにより、画質を保ったまま、チャートを PDF ファイルにエクスポートすることができます(ベクターデータ) 。
以下は DocumentPaginator の実装例です。

public class ChartDocumentPaginator : DocumentPaginator
{
	private FrameworkElement _visual;
	private readonly int _pageCount;
	private Size _pageSize;

	public ChartDocumentPaginator(FrameworkElement visual, double width, double height)
	{
		_pageCount = 1;
		_visual = visual;
		_pageSize = new Size(width, height);
	}

	public override bool IsPageCountValid => true;

	public override int PageCount => _pageCount;

	public override IDocumentPaginatorSource Source => null;

	public override Size PageSize
	{
		get => _pageSize;
		set => _pageSize = value;
	}

	public override DocumentPage GetPage(int pageNumber)
	{
		return new DocumentPage(_visual, this.PageSize, new Rect(), new Rect());
	}
}

上記クラスを使用して、XamDataChart をページに追加した DocumentPaginator を作成し、Microsoft Print to PDF を使用して印刷を実行します。

// Microsoft Print to PDFのPrintQueueを取得
PrintQueue printQueue = new PrintQueue(new LocalPrintServer(), "Microsoft Print to PDF");
PageMediaSize? paperSize = printQueue.DefaultPrintTicket.PageMediaSize;
if (paperSize != null && paperSize.Width != null && paperSize.Height != null)
{
	// DocumentPaginatorを作成
	var pagenator = new ChartDocumentPaginator(xamDataChart1, paperSize.Width.Value, paperSize.Height.Value);
	// XpsDocumentWriterを作成
	XpsDocumentWriter writer = PrintQueue.CreateXpsDocumentWriter(printQueue);
	// 印刷を実行
	writer.Write(pagenator);
}

拡大時も画質が保たれています。

Tagged:

製品について

Ultimate UI for WPF