C#實(shí)現(xiàn)高效打印PDF文檔的示例代碼
一、基礎(chǔ)打印操作詳解
通過(guò)Adobe Acrobat Reader 打?。ㄗ畛S茫?/h3>
1.打開(kāi)PDF:使用 Acrobat Reader 或其他PDF閱讀器打開(kāi)文件。
2.訪問(wèn)打印設(shè)置:
- 快捷鍵:Ctrl + P
- 按鈕:工具欄上的打印機(jī)圖標(biāo)
3.核心設(shè)置項(xiàng):
a.打印機(jī)選擇:從下拉菜單選擇目標(biāo)設(shè)備
b.打印范圍:
- 所有頁(yè)面:打印整個(gè)文檔
- 當(dāng)前視圖:打印屏幕顯示區(qū)域
- 指定頁(yè)面:輸入如"1,3-5"打印第1頁(yè)和第3-5頁(yè)
c.頁(yè)面處理:
- 頁(yè)面縮放方式:實(shí)際大小、適合頁(yè)面、縮小大頁(yè)面(避免內(nèi)容被裁剪)。
- 多頁(yè)打?。嚎蛇x擇“多頁(yè)”設(shè)置,在一張紙上打印多頁(yè)。
- 小冊(cè)子打?。河糜谥谱黩T馬釘小冊(cè)子。
d.注釋和表單:決定是否打印文檔中的批注、表單域內(nèi)容等。
e.高級(jí)選項(xiàng):
作為圖像打?。航鉀Q字體或格式異常問(wèn)題(但可能降低質(zhì)量)。
4.執(zhí)行打?。捍_認(rèn)設(shè)置后點(diǎn)擊“打印”。
關(guān)鍵提示:打印前務(wù)必在預(yù)覽窗口檢查最后一頁(yè)內(nèi)容,避免因格式問(wèn)題導(dǎo)致空白頁(yè)或內(nèi)容缺失!

瀏覽器打?。o(wú)需安裝軟件)
在Chrome/Firefox/Edge中打開(kāi)PDF
快捷鍵 “Ctrl + P” 調(diào)出打印界面
設(shè)置基礎(chǔ)打印參數(shù) 如打印份數(shù)、打印范圍、頁(yè)面方向、縮放比例等。
一些關(guān)鍵設(shè)置:
- 邊距:選擇"無(wú)"可最大化內(nèi)容區(qū)域
- 背景圖形:勾選以打印水印和背景色
- 頁(yè)眉頁(yè)腳:默認(rèn)關(guān)閉,需手動(dòng)開(kāi)啟

二、自動(dòng)打印方法
當(dāng)需要定時(shí)、批量或無(wú)人值守打印時(shí),手動(dòng)操作效率低下。以下是兩種自動(dòng)化方案:
方案1:借助Print Conductor 軟件批量自動(dòng)打印
Print Conductor 是一款高效的批量打印工具,用戶只需將多個(gè) PDF 文件拖入其界面,配置打印參數(shù)(如打印機(jī)選擇、份數(shù)、頁(yè)面范圍、雙面模式等),即可一鍵自動(dòng)按序打印所有文檔,大幅簡(jiǎn)化重復(fù)性打印任務(wù)。
方法2:通過(guò) C# 編程實(shí)現(xiàn)自動(dòng)打?。赓M(fèi).NET庫(kù))
在.NET 開(kāi)發(fā)領(lǐng)域中,有時(shí)可能會(huì)需要將打印 PDF 的功能集成到應(yīng)用程序中。這個(gè)時(shí)候可以借助國(guó)產(chǎn) 免費(fèi)庫(kù) Free Spire.PDF for .NET 通過(guò)C# 代碼實(shí)現(xiàn)PDF文檔打印,無(wú)需安裝Adobe。(需注意免費(fèi)版有頁(yè)數(shù)限制)
安裝免費(fèi).NET庫(kù):在 “NuGet包管理器” 中搜索 “FreeSpire.PDF” 并安裝。
基本PDF打印示例:下面是一個(gè)簡(jiǎn)單C#代碼演示了如何將指定的 PDF 文件打印到系統(tǒng)默認(rèn)的打印機(jī)上:
using Spire.Pdf;
namespace PrintWithDefaultPrinter
{
class Program
{
static void Main(string[] args)
{
// 創(chuàng)建一個(gè) PdfDocument 對(duì)象
PdfDocument pdf = new PdfDocument();
// 加載一個(gè) PDF 文件
pdf.LoadFromFile("示例文檔.pdf");
// 打印到默認(rèn)打印機(jī)
pdf.Print();
// 清理資源
pdf.Dispose();
}
}
}除了簡(jiǎn)單打印之外, 該免費(fèi)PDF庫(kù)還支持自定義打印設(shè)置,例如選擇特定的打印機(jī)、設(shè)置打印頁(yè)面范圍、調(diào)整打印份數(shù)、靜默打印、將不同頁(yè)面打印到不同紙盒等
方法補(bǔ)充
C# 打印PDF的常用方法
1.使用默認(rèn)程序打印
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing.Printing;
using System.IO;
using System.Runtime.InteropServices;
namespace PDF
{
public static class PrintHelper
{
#region 打印機(jī)操作核心方法
/// <summary>
/// // 設(shè)置默認(rèn)打印機(jī)
/// </summary>
/// <param name="Name"></param>
/// <returns></returns>
[DllImport("winspool.drv")]
public static extern bool SetDefaultPrinter(String Name);
/// <summary>
/// 獲取系統(tǒng)默認(rèn)打印機(jī)名稱
/// </summary>
public static string DefaultPrinterName()
{
PrintDocument fPrintDocument = new PrintDocument();
return fPrintDocument.PrinterSettings.PrinterName;
}
/// <summary>
/// 獲取本機(jī)所有打印機(jī)列表
/// </summary>
public static List<string> GetLocalPrinters()
{
List<string> fPrinters = new List<string>();
fPrinters.Add(DefaultPrinterName());
foreach (string fPrinterName in PrinterSettings.InstalledPrinters)
{
if (!fPrinters.Contains(fPrinterName))
{
fPrinters.Add(fPrinterName);
}
}
return fPrinters;
}
/// <summary>
/// 設(shè)置指定打印機(jī)為默認(rèn)打印機(jī)
/// </summary>
public static bool SetLocalPrinter(string defaultPrinter)
{
foreach (string item in GetLocalPrinters())
{
if (item.Contains(defaultPrinter))
{
return SetDefaultPrinter(item);
}
}
return false;
}
#endregion
/// <summary>
/// 打印
/// 通過(guò)系統(tǒng)關(guān)聯(lián)程序打印文件
/// 需注意的是,這種方式依賴于文件類型的默認(rèn)關(guān)聯(lián)程序
/// </summary>
public static void PrintByDefaultProcess(string LocalPath)
{
Process p = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo
{
CreateNoWindow = true,
WindowStyle = ProcessWindowStyle.Hidden,
UseShellExecute = true,
FileName = LocalPath,
Verb = "print", // 它會(huì)調(diào)用與文件類型關(guān)聯(lián)的默認(rèn)應(yīng)用程序來(lái)執(zhí)行打印文件,如Adobe Reader或者word或圖片查看器或其他PDF閱讀器進(jìn)行打印
Arguments = $"/p /h \"{LocalPath}\" \"{DefaultPrinterName()}\"",
//WorkingDirectory = Path.GetDirectoryName(Application.ExecutablePath) // 設(shè)置工作目錄為應(yīng)用程序啟動(dòng)目錄
};
p.StartInfo = startInfo;
p.Start();
p.WaitForExit(5); // 等待5秒鐘,確保打印任務(wù)已提交
}
}
}
需要注意的是,它雖然是一種簡(jiǎn)單且常用的方法。但這種方法依賴于系統(tǒng)關(guān)聯(lián)的默認(rèn)應(yīng)用程序來(lái)處理打印任務(wù),適用于大多數(shù)情況,但存在一些限制和潛在問(wèn)題。如pdf后綴沒(méi)有關(guān)聯(lián)默認(rèn)程序會(huì)報(bào)錯(cuò)。
所以我一般不會(huì)使用這種方式。
下面會(huì)羅列其他的方法和優(yōu)缺點(diǎn)
2.使用命令行工具(如 Adobe Reader 的 /t 參數(shù))?
public static void PrintWithAdobeCommandLine(string filePath, string printerName)
{
string adobePath = @"C:\Program Files\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe";
Process.Start(adobePath, $"/t \"{filePath}\" \"{printerName}\"");
}
優(yōu)點(diǎn)?:繞過(guò)默認(rèn)應(yīng)用程序,強(qiáng)制使用 Adobe Reader。
?缺點(diǎn)?:需硬編碼 Adobe 路徑,可能因版本或安裝位置不同失效。
3.直接調(diào)用 Adobe Acrobat 的 COM 接口
如果系統(tǒng)中安裝了 Adobe Acrobat Pro,可以通過(guò) COM 對(duì)象直接控制打印:
using Adobe.Acrobat;
public static void PrintWithAdobePdf(string filePath)
{
Acrobat.AcroApp app = new Acrobat.AcroApp();
Acrobat.AcroAVDoc avDoc = new Acrobat.AcroAVDoc();
if (avDoc.Open(filePath, ""))
{
Acrobat.AcroPDDoc pdDoc = (Acrobat.AcroPDDoc)avDoc.GetPDDoc();
pdDoc.PrintPages(0, 0, 0, 0, 0, 0, 0); // 參數(shù)需根據(jù)需求調(diào)整
avDoc.Close(true);
}
app.Exit();
}
優(yōu)點(diǎn)?:直接控制 Adobe 軟件,可靠性高。
?缺點(diǎn)?:依賴 Adobe Acrobat Pro,非免費(fèi)版;需處理 COM 引用和資源釋放。
4. 使用 .NET 的 PrintDocument 類?
結(jié)合 System.Drawing 處理 PDF(需將 PDF 渲染為圖像):
public static void PrintPdfAsImage(string filePath)
{
using (var document = PdfDocument.Load(filePath)) // 需要 PdfiumViewer 或其他庫(kù)
{
var printDoc = new System.Drawing.Printing.PrintDocument();
printDoc.PrintPage += (sender, e) =>
{
e.Graphics.DrawImage(document.RenderToImage(), e.MarginBounds);
e.HasMorePages = false;
};
printDoc.Print();
}
}
**優(yōu)點(diǎn)?:純 .NET 實(shí)現(xiàn)。
缺點(diǎn)?:**渲染質(zhì)量依賴庫(kù),可能丟失文本選中等特性。
到此這篇關(guān)于C#實(shí)現(xiàn)高效打印PDF文檔的示例代碼的文章就介紹到這了,更多相關(guān)C#打印PDF內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#讀取多條數(shù)據(jù)記錄導(dǎo)出到Word之圖片輸出改造
這篇文章主要為大家詳細(xì)介紹了C#讀取多條數(shù)據(jù)記錄并導(dǎo)出到Word標(biāo)簽?zāi)0逯械膱D片輸出問(wèn)題,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2024-11-11
c#基礎(chǔ)之?dāng)?shù)組與接口使用示例(遍歷數(shù)組 二維數(shù)組)
本文主要介紹了c#基礎(chǔ)知識(shí)中的數(shù)組與接口使用方法,結(jié)合示例,大家一看就明白2014-01-01
C# WPF 父控件通過(guò)使用可視化樹找到子控件的示例代碼
這篇文章主要介紹了C# WPF 父控件通過(guò)使用可視化樹找到子控件的示例代碼,需要的朋友可以參考下2018-08-08

