C#实现高效打印PDF文档的示例代码
目录
- 一、基础打印操作详解
- 通过Adobe AcroBAT Reader 打印(最常用)
- 浏览器打印(无需安装软件)
- 二、自动打印方法
- 方案1:借助Print Conductor 软件批量自动打印
- 方法2:通过 C# 编程实现自动打印(免费.NET库)
- 方法补充
一、基础打印操作详解
通过Adobe Acrobat Reader 打印(最常用)
1.打开PDF:使用 Acrobat Reader 或其他PDF阅读器打开文件。
2.访问打印设置:
- 快捷键:Ctrl + P
- 按钮:工具栏上的打印机图标
3.核心设置项:
a.打印机选择:从下拉菜单选择目标设备
b.打印范围:
- 所有页面:打印整个文档
- 当前视图:打印屏幕显示区域
- 指定页面:输入如"1,3-5"打印第1页和第3-5页
c.页面处理:
- 页面缩放方式:实际大小、适合页面、缩小大页面(避免内容被裁剪)。
- 多页打印:可选择“多页”设置,在一张纸上打印多页。
- 小册子打印:用于制作骑马钉小册子。
d.注释和表单:决定是否打印文档中的批注、表单域内容等。
e.高级选项:
作为图像打印:解决字体或格式异常问题(但可能降低质量)。
4.执行打印:确认设置后点击“打印”。
关键提示:打印前务必在预览窗口检查最后一页内容,避免因格式问题导致空白页或内容缺失!
浏览器打印(无需安装软件)
在Chrome/Firefox/Edge中打开PDF
快捷键 “Ctrl + P” 调出打印界面
设置基础打印参数 如打印份数、打印范围、页面方向、缩放比例等。
一些关键设置:
- 边距:选择"无"可最大化内容区域
- 背景图形:勾选以打印水印和背景色
- 页眉页脚:默认关闭,需手动开启
二、自动打印方法
当需要定时、批量或无人值守打印时,手动操作效率低下。以下是两种自动化方案:
方案1:借助Print Conductor 软件批量自动打印
Print Conductor 是一款高效的批量打印工具,用户只需将多个 PDF 文件拖入其界面,配置打印参数(如打印机选择、份数、页面范围、双面模式等),即可一键自动按序打印所有文档,大幅简化重复性打印任务。
方法2:通过 C# 编程实现自动打印(免费.NET库)
在.NET 开发领域中,有时可能会需要将打印 PDF 的功能集成到应用程序中。这个时候可以借助国产 免费库 Free Spire.PDF for .NET 通过C# 代码实现PDF文档打印,无需安装Adobe。(需注意免费版有页数限制)
安装免费.NET库:在 “NuGet包管理器” 中搜索 “FreeSpire.PDF” 并安装。
基本PDF打印示例:下面是一个简单C#代码演示了如何将指定的 PDF 文件打印到系统默认的打印机上:
using Spire.Pdf; namespace PrintWithDefaultPrinter { class Program { static void Main(string[] args) { // 创建一个 PdfDocument 对象 PdfDocument pdf = new PdfDocument(); // 加载一个 PDF 文件 pdf.LoadFromFile("示例文档.pdf"); // 打印到默认打印机 phppdf.Print(); // 清理资源 pdf.Dispose(); } } }
除了简单打印之外, 该免费PDF库还支持自定义打印设置,例如选择特定的打印机、设置打印页面范围、调整打印份数、静默打印、将不同页面打印到不同纸盒等
方法补充
C# 打印PDF的常用方法
1.使用默认程序打印
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 打印机操作核心方法 /// <summary> /// // 设置默认打印机 /// </summary> /// <param name="Name"></param> /// <returns>javascript;</returns> [DllImport("winspool.drv")] public static extern bool SetDefaultPrinter(String Name); /// <summary> /// 获取系统默认打印机名称 /// </summary> public static string DefaultPrinterName() { PrintDocument fPrintDocument = new PrintDocument(); return fPrintDocument.PrinterSettings.PrinterName; } /// <summary> /// 获取本机所有打印机列表 /// </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> /// 设置指定打印机为默认打印机 /// </summary> public static bool SetLocalPrinter(string defaultPrinter) { foreach (string item in GetLocalPrinters()) { if (item.Contains(defaultPrinter)) { return SetDefaultPrinter(item); } } return false; } #endregion /// <summary> /// 打印 /// 通过系统关联程序打印文件 /// 需注意的是,这种方式依赖于文件类型的默认关联程序 /// </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", // 它会调用与文件类型关联的默认应用程序来执行打印文件,如Adobe Reader或者word或图片查看器或其他PDF阅读器进行打印 Arguments = $"/p /h \"{LocalPath}\" \"{DefaultPrinterName()}\"", //WorkingDirectory = Path.GetDirectoryName(Application.ExecutablePath) // 设置工作目录为应用程序启动目录 }; p.StartInfo = startInfo; p.Start(); p.WaitForExit(5); // 等待5秒钟,确保打印任务已提交 } } }
需要注意的是,它虽然是一种简单且常用的方法。但这种方法依赖于系统关联的默认应用程序来处理打印任务,适用于大多数情况,但存在一些限制和潜在问题。如pdf后缀没有关联默认程序会报错。
所以我一般不会使用这种方式。
下面会罗列其他的方法和优缺点
2.使用命令行工具(如 Adhttp://www.devze.comobe Rea编程der 的 /t 参数)
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}\""); }
优点:绕过默认应用程序,强制使用 Adobe Reader。
缺点:需硬编码 Adobe 路径,可能因版本或安装位置不同失效。
3.直接调用 Adobe Acrobat 的 COM 接口
如果系统中安装了 Adobe Acrobat Pro,可以通过 COM 对象直接控制打印:
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); // 参数需根据需求调整 avDoc.Close(true); } app.Exit(); }
优点:直接控制 Adobe 软件,可靠性高。
缺点:依赖 Adobe Acrobat Pro,非免费版;需处理 COM 引用和资源释放。
4. 使用 .NET 的 PrintDocument 类
结合 System.Drawing 处理 PDF(需将 PDF 渲染为图像):
public static void PrintPdfAsImage(string filePath) { using (var document = PdfDocument.Load(filePath)) // 需要 PdfiumViewer 或其他库 { var printDoc = new System.Drawing.Printing.PrintDocument(); printDoc.PrintPage += (sender, e) => { e.Graphics.DrawImage(document.RenderToImage(), e.MarginBounds); e.HasMorePages = false; }; printDoc.Print(); }www.devze.com }
**优点:纯 .NET 实现。
缺点:**渲染质量依赖库,可能丢失文本选中等特性。
到此这篇关于C#实现高效打印PDF文档的示例代码的文章就介绍到这了,更多相关C#打印PDF内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论