1

我有一个正在运行的应用程序,它有一个 WCF 后端。
一切都很好,除了一件事,打印文件!

基本上我有一个LocalReport( Microsoft.Reporting.WinForms.LocalReport, .rdlc 文件),它位于服务器上,并从应用程序客户端获取打印命令。
服务器填充报表并将其打印到客户端指定的打印机

它适用于打印到网络打印机,但我希望能够打印到本地打印机(特别是'Microsoft XPS Document Writer',当我尝试时它只是超时,这是可以理解的)。

LocalReport它的内容是从数据库中填充的,这就是为什么它是从服务器完成的。
它也被其他应用程序使用,这就是为什么我宁愿将它保留在服务器上而不是拥有本地副本的原因。



我尝试让服务返回 a PrintDocument,但它不能正确地通过 WCF 序列化。
我的另一个想法是将PrintDocument(或 的实例LocalReport,甚至将其导出为PDF)转换为byte array,将其发送给客户端,然后将其转换回并处理打印。似乎有点像黑客。

但由于我是 WCF 世界的新手,所以我想听听是否有更好的方法。
还是我做的事情都错了?

4

1 回答 1

1

在客户端实例化 Microsoft.Reporting.WinForms.LocalReport(WinForms,我假设您正在使用)。你可以加

var report = new Microsoft.Reporting.WinForms.LocalReport();
report.DataSources.Add(new ReportDataSource("MyReport", GetReportData()));

GetReportData可以进行 WCF 调用并引入可以呈现为报表的对象列表。如果这样做,将在客户端生成报告,并且本地打印机都可用。事实上,这也是进行报告的标准方式。

于 2013-06-21T17:47:51.767 回答