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