我有一个应用程序运行,它有一个WCF后端。
一切都很好,除了一件事,打印文件!
基本上我有一个LocalReport
(Microsoft.Reporting.WinForms.LocalReport
, .rdlc文件),它生活在服务器上,并得到一个命令从应用程序客户端打印。
服务器填充报表并将其打印到客户端指定的打印机
它可以打印到网络打印机,但我希望能够打印到本地打印机(特别是'Microsoft XPS Document Writer',当我尝试时它只是超时,这是可以理解的)。
LocalReport
有它的内容从数据库填充,这就是为什么它是从服务器完成的。
它也被其他应用程序使用,这就是为什么我宁愿把它保存在服务器上,而不是有一个本地副本。
我试过让服务返回一个PrintDocument
,但它没有在WCF上正确序列化。
我的另一个想法是将PrintDocument
(或LocalReport
的实例,甚至将其导出为PDF)转换为字节数组,将其发送给客户端,然后将其转换回来并处理打印。看起来有点像黑客。
但是作为WCF世界的新手,我想知道是否有更好的方法。
还是我把事情都搞错了?
在客户端实例化Microsoft.Reporting.WinForms.LocalReport(我假设您使用的是WinForms)。你可以添加
var report = new Microsoft.Reporting.WinForms.LocalReport();
report.DataSources.Add(new ReportDataSource("MyReport", GetReportData()));
GetReportData
可以调用WCF并引入可以呈现为报告的对象列表。如果这样做,将在客户端生成报告,并且本地打印机都可用。事实上,这也是做报告的标准方式。