C# 从Winform应用程序打印.PDF

C# 从Winform应用程序打印.PDF,c#,pdf,printing,processstartinfo,C#,Pdf,Printing,Processstartinfo,我有一个应用程序,它执行一个SSRS报告来创建一个文件,该文件以PDF格式保存在本地。我想打印文件,但Acrobat Reader的安全设置出现问题,导致打印无法进行。我们的安全人员和应用程序支持人员表示,Acrobat不是一个选项,我需要找到另一种打印报告的方法 所有运行该应用程序的计算机都安装了Google Chrome,所以我觉得用它来打开和打印PDF是明智的。我们可以将chrome设置为打开PDF文件的默认应用程序,完成此操作后,我在网上进行了一些研究后运行了以下代码片段: Proces

我有一个应用程序,它执行一个SSRS报告来创建一个文件,该文件以PDF格式保存在本地。我想打印文件,但Acrobat Reader的安全设置出现问题,导致打印无法进行。我们的安全人员和应用程序支持人员表示,Acrobat不是一个选项,我需要找到另一种打印报告的方法

所有运行该应用程序的计算机都安装了Google Chrome,所以我觉得用它来打开和打印PDF是明智的。我们可以将chrome设置为打开PDF文件的默认应用程序,完成此操作后,我在网上进行了一些研究后运行了以下代码片段:

Process process = new Process();
PrintDialog printDialog = new PrintDialog();

numberOfCopies = printDialog.PrinterSettings.Copies;
ProcessStartInfo starter = new ProcessStartInfo();

starter.FileName = "\"" + printFileName + "\"";
starter.Arguments = "\"" + printDialog.PrinterSettings.PrinterName + "\"";

//starter.Verb = "printto";

for (short s = 1; s <= numberOfCopies; s++)
{
    starter.CreateNoWindow = true;
    starter.WindowStyle = ProcessWindowStyle.Hidden;
    starter.UseShellExecute = true;
    process.StartInfo = starter;
    process.Start();

//... more code
使用行starter.Verb=printto;注释,chrome打开PDF,但添加动词会导致返回错误,表示该文件类型没有默认应用程序。我一直在做一些研究,似乎我应该使用headless模式,但我发现只有命令行和ASP.NET

我相信以前的一位开发人员也有微软Word的问题,所以如果可能的话,他更愿意避免这种做法——我认为这与Citrix有关,但不确定


Chrome是否支持像这样使用print命令,或者我是否处于隐藏状态?如果它确实支持,我做错了什么/我如何才能做得更好,例如无头模式??如果它不支持,是否有其他方法可以在不使用acrobat的情况下打印PDF?

Google chrome没有用于printto的命令行开关。因此,当您使用动词printto时,会出现错误。下面是Chrome支持的命令行开关列表

有一个开关-在铬打印。但这不会打印pdf文件

如果您能够使用Acrobat reader打印页面,那么它应该可以工作。如果您能提供有关您所面临的安全设置问题的更多详细信息,我将更容易提供帮助。话虽如此,我使用Acrobat reader在Windows窗体应用程序中启动PDF打印已经有相当长的时间了。他们实现了print和printto动词。而且它在所有生产部署中都运行良好

System.Diagnostics.Process类执行启动进程在Powershell上执行的操作。我们可以使用Start进程测试打印,而无需运行C代码。设置作为Acrobat reader打开pdf的默认应用程序。通过更改pdf位置运行以下示例代码

Start-Process "C:\DevOps-with-ASP.NET-Core-and-Azure.pdf" -Verb printto "OneNote"
通过这一点,我们可以确定安全问题,并进行必要的更改,以允许通过Acrobat Reader进行打印

到目前为止,使用Process类通过浏览器打印pdf是不可行的。即使是微软自己的edge浏览器也不支持进程打印。下面是我们在powershell中尝试执行相同操作时遇到的错误

PS C:\Users\darsh> Start-Process "C:\DevOps-with-ASP.NET-Core-and-Azure.pdf" -Verb printto "OneNote"
Start-Process : This command cannot be run due to the error: No application is associated with the specified file for
this operation.
At line:1 char:1
+ Start-Process "C:\DevOps-with-ASP.NET-Core-and-Azure.pdf" -Verb print ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Start-Process], InvalidOperationException
    + FullyQualifiedErrorId : InvalidOperationException,Microsoft.PowerShell.Commands.StartProcessCommand