如何将多个 xaml 元素序列化为单个 xps 文件并打印 WPF Application c#
How to serialize multiple xaml elements into single xps file and print WPF Application c#
已经好久好久没能想出解决办法了。
我的应用程序包含十个带有格式化文本的堆栈面板。每个堆栈面板的高度为 800,宽度为 500。(想象一下写字板应用程序中有 10 个带有文本的页面)。我的主要目标是打印堆栈面板内容。每个堆栈面板内容都应准确显示在打印页面上。有十个堆栈面板,因此最终打印文档也应包含十页。
到目前为止,我可以序列化 xps 文件中的任何一个堆栈面板并打印它。
注意:堆栈面板名称之一是 'spanel0'
我的代码:
private void PrintDocument() {
PrintDialog pd = new PrintDialog();
FrameworkElement fe = (spanel0 as FrameworkElement);
fe.Measure(new Size(Int32.MaxValue, Int32.MaxValue));
Size visualSize = fe.DesiredSize;
fe.Arrange(new Rect(new Point(0, 0), visualSize));
MemoryStream stream = new MemoryStream();
string pack = "pack://temp.xps";
Uri uri = new Uri(pack);
DocumentPaginator paginator;
XpsDocument xpsDoc;
using (Package container = Package.Open(stream, FileMode.Create))
{
PackageStore.AddPackage(uri, container);
using (xpsDoc = new XpsDocument(container, CompressionOption.Fast, pack))
{
XpsSerializationManager rsm =
new XpsSerializationManager(new XpsPackagingPolicy(xpsDoc), false);
rsm.SaveAsXaml(spanel0);
paginator = ((IDocumentPaginatorSource)
xpsDoc.GetFixedDocumentSequence()).DocumentPaginator;
paginator.PageSize = visualSize;
}
PackageStore.RemovePackage(uri);
}
}
问题出在哪里?
我想将所有堆栈面板序列化为 xps,这样当我打印 xps 文档时,我会得到十页的 pdf 文件。使用上面的代码,我可以将任何一个堆栈面板序列化为 xps 并从中打印。
希望您已经理解我的问题。请指导我。提前致谢。
注意:我剩下的堆栈面板是 spanel1、spanel2、spanel3、spanel4、spanel5 等等
后来经过大量挖掘终于找到了解决方案。
在 WPF 应用程序中,我们可以单独序列化多个 xaml 元素。所有序列化的 xaml 元素都将采用 .xps 格式。然后我们可以收集回所有 .xps 文件并形成单个 .xps 文件。这样,我们就可以序列化多个 xaml 元素。谢谢。
已经好久好久没能想出解决办法了。
我的应用程序包含十个带有格式化文本的堆栈面板。每个堆栈面板的高度为 800,宽度为 500。(想象一下写字板应用程序中有 10 个带有文本的页面)。我的主要目标是打印堆栈面板内容。每个堆栈面板内容都应准确显示在打印页面上。有十个堆栈面板,因此最终打印文档也应包含十页。
到目前为止,我可以序列化 xps 文件中的任何一个堆栈面板并打印它。
注意:堆栈面板名称之一是 'spanel0'
我的代码:
private void PrintDocument() {
PrintDialog pd = new PrintDialog();
FrameworkElement fe = (spanel0 as FrameworkElement);
fe.Measure(new Size(Int32.MaxValue, Int32.MaxValue));
Size visualSize = fe.DesiredSize;
fe.Arrange(new Rect(new Point(0, 0), visualSize));
MemoryStream stream = new MemoryStream();
string pack = "pack://temp.xps";
Uri uri = new Uri(pack);
DocumentPaginator paginator;
XpsDocument xpsDoc;
using (Package container = Package.Open(stream, FileMode.Create))
{
PackageStore.AddPackage(uri, container);
using (xpsDoc = new XpsDocument(container, CompressionOption.Fast, pack))
{
XpsSerializationManager rsm =
new XpsSerializationManager(new XpsPackagingPolicy(xpsDoc), false);
rsm.SaveAsXaml(spanel0);
paginator = ((IDocumentPaginatorSource)
xpsDoc.GetFixedDocumentSequence()).DocumentPaginator;
paginator.PageSize = visualSize;
}
PackageStore.RemovePackage(uri);
}
}
问题出在哪里?
我想将所有堆栈面板序列化为 xps,这样当我打印 xps 文档时,我会得到十页的 pdf 文件。使用上面的代码,我可以将任何一个堆栈面板序列化为 xps 并从中打印。
希望您已经理解我的问题。请指导我。提前致谢。
注意:我剩下的堆栈面板是 spanel1、spanel2、spanel3、spanel4、spanel5 等等
后来经过大量挖掘终于找到了解决方案。
在 WPF 应用程序中,我们可以单独序列化多个 xaml 元素。所有序列化的 xaml 元素都将采用 .xps 格式。然后我们可以收集回所有 .xps 文件并形成单个 .xps 文件。这样,我们就可以序列化多个 xaml 元素。谢谢。