将 Wpf 控件转换为 pdf

Convert Wpf Control into pdf

我想将我的 WPF 控件转换为 pdf,有人能帮我举个例子吗?

我有一个 WPF 图表和一个列表视图:

上图是我的WPF输出,我想把这个页面转成pdf?

任何人都可以帮助我吗?下面是我的代码可以创建一个 pdf 但 pdf 里面没有内容,请帮忙。

public void SaveCurrentViewToXPS()
        {

            var dialog = new SaveFileDialog();

            dialog.AddExtension = true;
            dialog.DefaultExt = "pdf";
            dialog.Filter = "PDF Document (*.pdf)|*.pdf";

            if (dialog.ShowDialog() == false)
                return;

            FixedDocument fixedDoc = new FixedDocument();
            PageContent pageContent = new PageContent();
            FixedPage fixedPage = new FixedPage();

            PrintDialog printDlg = new PrintDialog();
            Size pageSize = new Size(printDlg.PrintableAreaWidth, printDlg.PrintableAreaHeight - 100);
            lw.Width = 2100;
            lw.Height = 2970;

            //Create first page of document
            fixedPage.Children.Add(lw);
            //fixedPage.Children.Add(ColumnChart2);
            ((System.Windows.Markup.IAddChild)pageContent).AddChild(fixedPage);
            fixedDoc.Pages.Add(pageContent);

            // write to PDF file
            string tempFilename = "temp.xps";
            File.Delete(tempFilename);
            XpsDocument xpsDoc = new XpsDocument(tempFilename, FileAccess.Write);
            XpsDocumentWriter xWriter = XpsDocument.CreateXpsDocumentWriter(xpsDoc);
            xWriter.Write(fixedDoc.DocumentPaginator);
            xpsDoc.Close();

            PdfSharp.Xps.XpsConverter.Convert(tempFilename);
        }

谢谢

问题可能出在 xps 文档中添加视觉效果的方式。

    FixedDocument fixedDoc = new FixedDocument();
    PageContent pageContent = new PageContent();
    FixedPage fixedPage = new FixedPage();

    PrintDialog printDlg = new PrintDialog();
    Size pageSize = new Size(printDlg.PrintableAreaWidth, printDlg.PrintableAreaHeight - 100);

    var visual = ((System.Windows.Controls.Panel)this.Content).Children[0] as UIElement;
    ((System.Windows.Controls.Panel)this.Content).Children.Remove(visual);
    fixedPage.Children.Add(visual);
    ((System.Windows.Markup.IAddChild)pageContent).AddChild(fixedPage);

    fixedDoc.Pages.Add(pageContent);

    // write to PDF file
    string tempFilename = "temp.xps";
    File.Delete(tempFilename);
    XpsDocument xpsd = new XpsDocument(tempFilename, FileAccess.ReadWrite);
    System.Windows.Xps.XpsDocumentWriter xw = XpsDocument.CreateXpsDocumentWriter(xpsd);
    xw.Write(fixedDoc);
    xpsd.Close();
    PdfSharp.Xps.XpsConverter.Convert(tempFilename, dialog.FileName, 1);

参考https://github.com/EbenZhang/PdfSharp.XPS