通过OxyPlot C#将Plot模型转换为XPS

时间:2014-01-08 13:20:17

标签: c# plot xps oxyplot


我目前在将Plotmodel打印到XPS文件时遇到问题。

到目前为止我所拥有的:


/// <summary>
/// Plotmodel to XPS-File
/// </summary>
/// <param name="model">The model</param>
/// <param name="fileName">The fileName</param>
/// <param name="width">Width of the model</param>
/// <param name="height">Height of the model</param>
public void Export(PlotModel model, string fileName, double width, double height)
{
   try
   {
      using (Package xpsPackage = Package.Open(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite))
      {
        using (var doc = new XpsDocument(xpsPackage))
        {
            var g = new Grid();

            var p = new OxyPlot.Wpf.Plot { Model = model }; //Problem?
            g.Children.Add(p);

            var size = new Size(width, height);
            g.Measure(size);
            g.Arrange(new Rect(size));
            g.UpdateLayout();


            if (xpsdw == null) //XpsDocumentWriter xpsdw
                xpsdw = XpsDocument.CreateXpsDocumentWriter(doc);
            }
            if (xpsdw != null)
            {
                xpsdw.Write(g);
            }
        }
    }
}

此代码工作正常(一次),但问题是:无论您多久使用此方法,您将始终只有一个包含数据的页面。因此,如果您想要将第二个Plotmodel打印到XPS文件中,旧的Plotmodel将被删除,您只能看到新的。

所以问题是: 您是否有想法,如何将新的Plotmodel附加到旧的XPS-File而不覆盖它?

我也尝试过使用:

XpsExporter.Export(model, fileName, width, height);

而不是我的功能,但这也没有奏效。

1 个答案:

答案 0 :(得分:0)

如果您事先知道要将多个图表写入单个文件,则应查看VisualsToXpsDocument

如果您确实必须将其他页面附加到磁盘上的现有文档,则会更加困难。您需要深入了解现有文档才能找到FixedDocumentFixedDocumentSequence的孩子)。获得FixedDocument后,您可以向其添加新的PageContent对象。 this thread底部附近有一个例子。