簡體   English   中英

從 Winform 應用程序打印 .PDF

[英]Printing .PDF from Winform Application

我有一個應用程序,它執行一個 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?

谷歌瀏覽器沒有“printto”的命令行開關。 因此,當您使用動詞“printto”時會出現錯誤。 以下是 Chrome 支持的命令行開關列表。

https://peter.sh/experiments/chromium-command-line-switches/

鉻中有一個開關“--print”。 但這不會打印pdf文件。

如果您能夠使用 Acrobat 閱讀器打印頁面,那么它應該可以工作。 如果您能提供有關您面臨的安全設置問題的更多詳細信息,我會更容易提供幫助。 話雖如此,我一直在使用 Acrobat 閱讀器在我的 Windows 表單應用程序中啟動 PDF 打印相當長的時間。 他們實現了“print”和“printto”動詞。 它適用於所有生產部署。

System.Diagonstics.Process 類執行 Powershell 上的“Start-Process”。 我們可以使用“Start-Process”測試打印,而無需運行 C# 代碼。 將打開 pdf 的默認應用程序設置為 Acrobat 閱讀器。 通過更改 pdf 位置運行以下示例代碼。

Start-Process "C:\DevOps-with-ASP.NET-Core-and-Azure.pdf" -Verb printto "OneNote"

通過這種方式,我們可以確定安全問題並進行必要的更改以允許通過 Acrobat Reader 進行打印。

到目前為止,使用 Process 類通過瀏覽器打印 pdf 是不可行的。 即使是微軟自己的邊緣瀏覽器也不支持通過 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM