我目前在将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);
而不是我的功能,但这也没有奏效。
答案 0 :(得分:0)
如果您事先知道要将多个图表写入单个文件,则应查看VisualsToXpsDocument。
如果您确实必须将其他页面附加到磁盘上的现有文档,则会更加困难。您需要深入了解现有文档才能找到FixedDocument
(FixedDocumentSequence
的孩子)。获得FixedDocument
后,您可以向其添加新的PageContent
对象。 this thread底部附近有一个例子。