C# 打印到Adobe PDF时,ReportViewer.PrintDialog()引发异常

C# 打印到Adobe PDF时,ReportViewer.PrintDialog()引发异常,c#,winforms,pdf,reporting-services,C#,Winforms,Pdf,Reporting Services,我正在开发一个WinForms应用程序,它使用ReportViewer控件来显示一些Reporting Services报告。在这些屏幕上,我们允许用户通过调用ReportViewer上的PrintDialog()方法打印报告,如下所示: _reportViewer.PrintDialog(); 这在大多数情况下都可以正常工作,它会打开标准的windows打印对话框,用户选择要打印的打印机,然后打印。但是,当用户选择使用“Adobe PDF”打印为PDF时,会引发Win32Exception:

我正在开发一个WinForms应用程序,它使用
ReportViewer
控件来显示一些Reporting Services报告。在这些屏幕上,我们允许用户通过调用ReportViewer上的
PrintDialog()
方法打印报告,如下所示:

_reportViewer.PrintDialog();
这在大多数情况下都可以正常工作,它会打开标准的windows打印对话框,用户选择要打印的打印机,然后打印。但是,当用户选择使用“Adobe PDF”打印为PDF时,会引发
Win32Exception:指定的数据类型无效
。用于选择保存pdf文件的文件对话框甚至没有出现

这只发生在Adobe PDF打印机上。我安装并使用了他们的PDF打印机,它可以正常工作

有人知道是什么导致了这一切吗

编辑:

以下是堆栈跟踪:

at System.Drawing.Printing.StandardPrintController.OnStartPrint(PrintDocument document, PrintEventArgs e)
at System.Windows.Forms.PrintControllerWithStatusDialog.OnStartPrint(PrintDocument document, PrintEventArgs e)
at System.Drawing.Printing.PrintController.Print(PrintDocument document)
at System.Drawing.Printing.PrintDocument.Print()
at Microsoft.Reporting.WinForms.ReportViewer.PrintDialog(PrinterSettings printerSettings)
at Microsoft.Reporting.WinForms.ReportViewer.PrintDialog()

AFAIK ReportViewer控件只是将每个页面呈现为位图图像。因此,当打印到PDF时,如果分辨率很高,它可能是一个巨大的位图。也许AdobePDF在大位图方面有问题,Adobe还有很多其他的bug!尝试降低分辨率作为测试


我有一个应用程序,它使用ReportServer API获取页面位图,并将其分块,由自定义打印处理器处理。可能是报告内容造成了这个问题。我的意思是,报告可能包含Adobe PDF打印机无法识别的某些字符


你能试着打印一份非常简单的/基本的/空白的报告,看看它是否有效。

这并不能真正解决问题,但能在用户眼中解决问题


捕获PDF打印机抛出的错误,然后调用Reporting Services中内置的导出为PDF功能。即使打印到PDF打印机,Winforms中也不会出错。从用户的角度来看,他们像普通人一样“打印成pdf”,体验完全相同。这是一个有效的工作环境。:-)

如果您尝试从记事本或其他程序打印到Adobe PDF,是否也会发生同样的情况?不,我可以从记事本、word等打印到Adobe PDF。如果您可以打印到包括NitroPDF在内的其他打印机,我怀疑问题出在您的Adobe Acrobat上。不过,你也说过你可以从记事本等其他来源打印到AdobePDF…你能试着从更复杂的网页打印到AdobePDF吗?另外,您能否成功地将报告导出为PDF格式?您的报告是本地的还是远程的?我可以成功地将此网页打印到AdobePDF。通过导出是指通过报表查看器吗?通过报表查看器导出为PDF不会出现问题。报告是本地的。嗯,请尝试将AdobePDF打印引擎设置为默认打印机。你得到同样的结果吗?另外,看一看,我只是用一个空白的报告尝试了一下,但仍然有错误。我们所有的报告都出现了这种情况。相关说明-我遇到了一些使用特定激光打印机打印的用户的类似问题。其他打印机没有问题。我尝试将分辨率降低到每英寸72点(可能的最低分辨率),但仍然出现错误。