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);
}
拡大時も画質が保たれています。
