打印 PDF 文件 C#

許多公司都在很大程度上減少紙張的使用。但是,在某些情況下打印很重要。例如,系統可能包含 PDF 格式的在線訂單詳細信息。他們需要在發送在線訂單時打印 PDF。他們大規模處理項目,因此手動打印每個文檔可能是一項艱鉅的任務。 Aspose.PDF for .NET API,除了許多其他文件操作和轉換功能外,還支持 PDF 文件的高效打印。讓我們探索以下與使用 C# 在 .NET 應用程序中打印 PDF 文件相關的用例:

用 C# 打印 PDF 文件

可以使用 C# 或 VB.net 在您的 .NET 應用程序中自動打印 PDF 文件。您可以按照以下簡單步驟打印 PDF 文件:

  1. 創建 PdfViewer 類的對象
  2. 加載輸入 PDF 文檔
  3. 打印 PDF 文件

下面的代碼片段顯示瞭如何使用 C# 打印 PDF 文件:

//創建 PdfViewer 對象
PdfViewer viewer = new PdfViewer();
//打開輸入 PDF 文件
viewer.BindPdf(dataDir + "Test.pdf");
//打印PDF文檔
viewer.PrintDocument();
//關閉 PDF 文件
viewer.Close();

使用 C# 打印多個 PDF 文件

如果您因為業務性質需要打印多個文件,那麼 Aspose.PDF for .NET API 已經支持該功能。使用上面的代碼片段一個一個地打印多個 PDF 文件可能會有點慢。因此,讓我們將 PDF 打印更進一步,使過程更簡單。在這裡,我們將使用 List,同時將每個 PDF 文件的名稱添加到該列表。以下步驟解釋了我們將如何打印多個 PDF 文件:

  1. 初始化一個String類型的List
  2. 將 PDF 文件添加到列表
  3. 加載輸入 PDF 文件
  4. 打印多個 PDF 文件

代碼片段展示瞭如何使用 C# 打印多個 PDF 文件:

var files = new List<string>();
files.Add(dataDir + "First.pdf");
files.Add(dataDir + "Second.pdf");

foreach (String file in files)
{
    //創建 PdfViewer 對象
    PdfViewer viewer = new PdfViewer();
    //打開輸入 PDF 文件
    viewer.BindPdf(file);
    //打印PDF文檔
    viewer.PrintDocument();
    //關閉 PDF 文件
    viewer.Close();
}

使用 C# 打印 PDF 的特定頁面

API中提供了打印PDF文檔特定頁面的功能。我們將考慮一個包含打印多個頁面範圍的示例。您需要按照以下步驟中的說明指定起始頁碼和終止頁碼:

  • 設置文件輸入輸出路徑
  • 通過定義範圍設置特定頁面的打印
  • 指定打印參數
  • 按先前指定的方式打印頁面

下面的代碼片段顯示瞭如何使用 C# 打印文檔的特定頁面:

string inPdf = dataDir + "Test.pdf";
string output = dataDir;
IList<PrintingJobSettings> printingJobs = new List<PrintingJobSettings>();
PrintingJobSettings printingJob1 = new PrintingJobSettings();
printingJob1.FromPage = 2;
printingJob1.ToPage = 3;
printingJobs.Add(printingJob1);

PrintingJobSettings printingJob2 = new PrintingJobSettings();
printingJob2.FromPage = 5;
printingJob2.ToPage = 7;
printingJobs.Add(printingJob2);

{
   for (var printingJobIndex = 0; printingJobIndex < printingJobs.Count; printingJobIndex++)
    {
        System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
        System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
        ps.PrinterName = "Microsoft Print to PDF";
        ps.PrintRange = System.Drawing.Printing.PrintRange.SomePages;
        ps.FromPage = printingJobs[printingJobIndex].FromPage;
        ps.ToPage = printingJobs[printingJobIndex].ToPage;
        System.Console.WriteLine(ps.FromPage);
        System.Console.WriteLine(ps.ToPage);
        System.Console.WriteLine(printingJobIndex);
        using (var theViewer = new Aspose.Pdf.Facades.PdfViewer())
        {
            // 文檔打印代碼在這裡
            // 使用打印機和頁面設置打印文檔                    
            theViewer.BindPdf(inPdf);
            theViewer.AutoResize = true;
            theViewer.AutoRotate = true;
            theViewer.PrintPageDialog = false;
            theViewer.PrintDocumentWithSettings(pgs, ps);
            theViewer.Close();
        }
    }
}

使用 C# 打印加密的 PDF 文件

PDF 文件可以通過密碼進行保護。但是,密碼可以有兩種類型,即用戶密碼和所有者密碼。使用用戶密碼保護的 PDF 文件需要密碼才能打開和查看加密的 PDF 文件。另一方面,需要所有者密碼才能修改受密碼保護的受保護 PDF 文件的內容。以下步驟解釋了安全 PDF 的打印:

  1. 使用密碼加載受保護的 PDF
  2. 創建 PdfViewer 對象
  3. 打印加密的 PDF 文件

以下代碼片段顯示瞭如何使用 C# 打印受保護的 PDF 文件:

//在指定用戶或所有者密碼的同時加載安全 PDF 文檔
Document document = new Document(dataDir + "Password.pdf" , "userORowner");
//創建 PdfViewer 對象
PdfViewer viewer = new PdfViewer();
//打開輸入 PDF 文件
viewer.BindPdf(document);
//打印PDF文件
viewer.PrintDocument();
//關閉 PDF 文件
viewer.Close();

使用 C# 將 PDF 打印到打印機的特定紙盒

您可以使用 Aspose.PDF for .NET API 將 PDF 打印到特定的紙盒。例如,您可能想要將包含大量照片的 PDF 打印到不同的紙盤,並將文本 PDF 文件打印到不同的紙盤。按照以下步驟設置用於打印 PDF 文件的輸出托盤或接紙架:

  1. 加載輸入 PDF 文件
  2. 設置打印屬性
  3. 指定 PageSettingsPaperSource
  4. 調用 PrintDocumentWithSettings 方法

這裡值得注意的是,您可以更改打印機的名稱。在這裡,我們將使用 Microsoft Print to PDF 作為示例。以下代碼片段遵循這些步驟並顯示如何使用 C# 將文檔打印到打印機的特定紙盒或紙盒:

Document doc = new Document("Test.pdf");
PdfViewer viewer = new PdfViewer();
viewer.BindPdf(doc);
viewer.PrinterJobName = System.IO.Path.GetFileName(doc.FileName);
viewer.Resolution = 110;
// 設置打印屬性
viewer.AutoResize = true; // Print the file with adjusted size
viewer.AutoRotate = false; // Print the file with adjusted rotation
viewer.PrintPageDialog = false; // Do not produce the page number dialog when printing
viewer.RenderingOptions.UseNewImagingEngine = true;
// 為打印機和頁面設置以及 PrintDocument 創建對象
System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
// 設置打印機名稱
ps.PrinterName = "Microsoft Print to PDF";
pgs.PaperSize = new System.Drawing.Printing.PaperSize(paperTypeName, paperWidth, paperHeight);
pgs.Margins = new System.Drawing.Printing.Margins(margins.Left, margins.Right, margins.Top, margins.Bottom);
pgs.PaperSource = GetPaperSource(printerName, trayName);
// 使用打印機和頁面設置打印文檔
viewer.PrintDocumentWithSettings(pgs, ps);

///<summary>
/// 返回提供的打印機和紙盤名稱的 PaperSource 對象。
///</summary>
///<param name="printerName"></param>
///<param name="trayName"></param>
///<returns></returns>
public static System.Drawing.Printing.PaperSource GetPaperSource(string printerName, string trayName)
{
    System.Drawing.Printing.PaperSource ps = null;
    System.Drawing.Printing.PrintDocument prtDoc = new System.Drawing.Printing.PrintDocument();
    prtDoc.PrinterSettings.PrinterName = printerName;
   for (int i = 0; i < prtDoc.PrinterSettings.PaperSources.Count; i++)
    {
        if (prtDoc.PrinterSettings.PaperSources[i].SourceName.ToLower().Equals(trayName.ToLower()))
        {
            ps = prtDoc.PrinterSettings.PaperSources[i];
            break;
        }
    }
    return ps;
}

使用 C# 將頁面範圍打印到不同的紙張來源

在某些情況下,您可能需要將一個 PDF 文檔的不同頁面打印到不同的紙盒或紙盒。例如,封面的紙張來源不同,其他頁面的紙張來源也不同。您當然可以按照以下步驟在同一打印作業中將頁面範圍打印到不同的紙張來源:

  1. 初始化 PdfViewer 類的對象
  2. 使用 PdfQueryPageSettings 事件處理程序委託
  3. 設置頁面和打印機設置
  4. 調用 PrintDocumentWithSettings 方法

以下代碼片段顯示瞭如何按照這些步驟使用 C# 將不同的頁面範圍打印到不同的紙張來源或紙盒:

Aspose.Pdf.Facades.PdfViewer pdfv = new Aspose.Pdf.Facades.PdfViewer();

pdfv.PdfQueryPageSettings += PdfvOnPdfQueryPageSettings;

System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
System.Drawing.Printing.PrinterSettings prin = new System.Drawing.Printing.PrinterSettings();

pdfv.BindPdf(dataDir + "Print-PageRange.pdf");
prin.PrinterName = "HP LaserJet M9050 MFP PCL6";
prin.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);

Aspose.Pdf.Facades.PdfPageEditor pageEditor = new Aspose.Pdf.Facades.PdfPageEditor();
pageEditor.BindPdf(dataDir + "input.pdf");

pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);
pgs.PaperSize = prin.DefaultPageSettings.PaperSize;

pdfv.PrintDocumentWithSettings(pgs, prin);
pdfv.Close();

private static void PdfvOnPdfQueryPageSettings(object sender, System.Drawing.Printing.QueryPageSettingsEventArgs queryPageSettingsEventArgs, PdfPrintPageInfo currentPageInfo)
{
    bool isOdd = currentPageInfo.PageNumber % 2 != 0;

    System.Drawing.Printing.PrinterSettings.PaperSourceCollection paperSources = queryPageSettingsEventArgs.PageSettings.PrinterSettings.PaperSources;

    if (isOdd)
        queryPageSettingsEventArgs.PageSettings.PaperSource = paperSources[0];
    else
        queryPageSettingsEventArgs.PageSettings.PaperSource = paperSources[1];
}

使用 C# 打印 PDF 時檢查打印作業狀態

您可以將 PDF 文件打印到不同的打印機。例如,Microsoft Print to PDF、Microsoft XPS Document Writer 或任何物理打印機。但是,對於巨大的 PDF 文檔,打印可能需要很長時間,或者由於某種原因打印可能會失敗。因此,API 提供了一項功能,可讓您通過以下步驟檢查打印作業狀態:

  1. 加載輸入 PDF 文件
  2. 指定頁面設置
  3. 設置打印機名稱
  4. 使用 PrintDocumentWithSettings 打印 PDF 文檔

下面的代碼片段顯示瞭如何使用 C# 檢查 PDF 的打印作業狀態或打印進度:

// 實例化 PdfViewer 對象
PdfViewer viewer = new PdfViewer();

// 綁定源 PDF 文件
viewer.BindPdf(dataDir + "Sample Document with Bookmark.pdf");
viewer.AutoResize = true;

// 隱藏打印對話框
viewer.PrintPageDialog = false;

// 創建打印機設置對象
System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
System.Drawing.Printing.PrintDocument prtdoc = new System.Drawing.Printing.PrintDocument();

// 指定打印機名稱
//ps.PrinterName = "Microsoft XPS Document Writer";
ps.PrinterName = "Microsoft Print to PDF";

// 結果打印名稱
//ps.PrintFileName = "ResultantPrintout.xps";
ps.PrintFileName = "ResultantPrintout.pdf";

// 將輸出打印到文件
ps.PrintToFile = true;
ps.FromPage = 1;
ps.ToPage = 2;
ps.PrintRange = System.Drawing.Printing.PrintRange.SomePages;

// 指定打印輸出的頁面尺寸
pgs.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);
ps.DefaultPageSettings.PaperSize = pgs.PaperSize;
pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);

// 使用上面指定的設置打印文檔
viewer.PrintDocumentWithSettings(pgs, ps);

// 檢查打印狀態
if (viewer.PrintStatus != null)
{
    // 拋出異常
    Exception ex = viewer.PrintStatus as Exception;
    if (ex != null)
    {
        // 獲取異常信息
    }
}
else
{
    // 沒有發現錯誤。打印作業已成功完成
    Console.WriteLine("printing completed without any issue..");
}

結果,此代碼片段在 .NET 應用程序的控制台上打印有關 PDF 文件的打印狀態:

C# 打印 PDF

結論

總而言之,我們了解了在您的編程應用程序中使用 C# 或 VB NET 打印受密碼保護和不受保護的 PDF 文件的不同方法和用例。此外,我們探索了整個 PDF 文檔的打印。同樣,我們已經了解了通過特定的頁面托盤、紙盒或紙張來源打印某些頁面範圍。此外,我們還檢查瞭如何使用 C# 監視文檔的打印狀態或打印進度。

也可以看看