实例介绍
【实例简介】
c# 打印 随工单 等,按照自己的需求修改即可
【实例截图】

【核心代码】
using System;
using System.IO;
using System.IO.Packaging;
using System.Windows;
using System.Windows.Documents;
using System.Windows.Threading;
using System.Windows.Xps;
using System.Windows.Xps.Packaging;
namespace PrintTools
{
/// <summary>
/// 封装打印预览和直接打印的底层实现类
/// </summary>
partial class PrintPreWindow
{
/// <summary>
/// WPF使用委托加载XPS打印对象
/// </summary>
private delegate void LoadXpsMethod();
/// <summary>
/// 传递需要打印的数据集合
/// </summary>
private readonly Object _objectData;
/// <summary>
/// WPF XPS .NET底层封装的需要打印的内容
/// </summary>
private readonly FlowDocument _flowDocument;
/// <summary>
/// 构造初始化对象
/// </summary>
public PrintPreWindow(string strTemlName, Object data, IDocumentRender render = null)
{
InitializeComponent();
//初始化的时候调用对象
_objectData = data;
_flowDocument = LoadDocumentAndRender(strTemlName, data, render);
Dispatcher.BeginInvoke(new LoadXpsMethod(LoadXps), DispatcherPriority.ApplicationIdle);
}
/// <summary>
/// 提供给需要打印预览和打印按钮调用的方法
/// </summary>
/// <param name="strTemlName">打印模板的路径</param>
/// <param name="data">需要打印的内容</param>
/// <param name="documentRender">实现打印的模板赋值文件</param>
public static FlowDocument LoadDocumentAndRender(string strTemlName, object data,
IDocumentRender documentRender = null)
{
var flowDocument =
(FlowDocument) Application.LoadComponent(new Uri(strTemlName, UriKind.RelativeOrAbsolute));
flowDocument.PagePadding = new Thickness();
flowDocument.DataContext = data;
if (documentRender != null)
{
documentRender.Render(flowDocument, data);
}
return flowDocument;
}
/// <summary>
/// 执行异步委托,使用内存流
/// </summary>
public void LoadXps()
{
//构造一个基于内存的XPS Document
var memoryStream = new MemoryStream();
Package package = Package.Open(memoryStream, FileMode.Create, FileAccess.ReadWrite);
var uri = new Uri("pack://InMemoryDocument.xps");
PackageStore.RemovePackage(uri);
PackageStore.AddPackage(uri, package);
var xpsDocument = new XpsDocument(package, CompressionOption.Fast, uri.AbsoluteUri);
//将FlowDocument写入基于内存的XPSDocument中去
XpsDocumentWriter xpsDocumentWriter = XpsDocument.CreateXpsDocumentWriter(xpsDocument);
xpsDocumentWriter.Write(((IDocumentPaginatorSource) _flowDocument).DocumentPaginator);
//获取这个基于内存的XPSDocument的FixedDocument
DocumentViewer.Document = xpsDocument.GetFixedDocumentSequence();
//关闭基于内存的XPSDocument,释放资源
xpsDocument.Close();
}
}
}
好例子网口号:伸出你的我的手 — 分享!
网友评论
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


支持(0) 盖楼(回复)
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)