我有一个执行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,但是添加动词会导致返回错误,表明该文件类型没有默认应用程序。我一直在做一些研究,似乎应该使用无头模式,但我发现所有内容都包含命令行内容和ASP.NET。
我相信以前的开发人员在使用MS Word时也会遇到问题,因此,如果可能的话,宁愿避免使用该方法-我认为与Citrix有关,但不确定。
Chrome是否支持使用这种打印命令,还是我一无所获?如果支持,我在做什么错/我该如何做得更好(例如,无头模式?)?如果不支持,是否可以使用其他方法而不使用acrobat来打印PDF?
答案 0 :(得分:1)
Google chrome没有用于“ printto”的命令行开关。因此,当您使用动词“ printto”时,会出现错误。以下是Chrome支持的命令行开关的列表。
https://peter.sh/experiments/chromium-command-line-switches/
在Chrome中有一个开关“ --print”。但这不会打印pdf文件。
如果您能够使用Acrobat Reader打印页面,则它应该可以工作。如果您可以提供有关所面临的安全设置问题的更多详细信息,对我来说会更容易帮助。话虽如此,我一直在使用Acrobat Reader在Windows窗体应用程序中启动PDF打印相当长的时间。它们具有“ print”和“ printto”动词。而且它在所有生产部署中都很好用。
System.Diagonstics.Process类执行“启动过程”在Powershell上的作用。我们可以使用“开始过程”来测试打印,而不必运行C#代码。将打开pdf的默认应用程序设置为Acrobat reader。通过更改pdf位置运行以下示例代码。
Start-Process "C:\DevOps-with-ASP.NET-Core-and-Azure.pdf" -Verb printto "OneNote"
这样,我们可以识别安全问题并进行必要的更改,以允许通过Acrobat Reader打印。
到目前为止,通过浏览器使用Process类打印pdf是不可行的。甚至Microsoft自己的边缘浏览器也不支持通过Process打印。以下是我们在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