博客
关于我
C# 打印PDF文档的10种方法
阅读量:415 次
发布时间:2019-03-06

本文共 3974 字,大约阅读时间需要 13 分钟。

操作PDF文档时的打印需求因项目而异,常见的打印场景可分为多种情况,如静默打印、指定页码范围、纸张大小设置等。以下将介绍10种常见的PDF打印需求及其实现方法。

1. 使用默认打印机打印PDF文档

默认打印机通常是系统预装的打印机(如Windows自带的打印机)。在代码中可以通过Spire.PDF for .NET库实现默认打印机打印PDF文档的功能。

// 创建PdfDocument对象并加载PDF文档PdfDocument doc = new PdfDocument();doc.LoadFromFile("Test.pdf");// 使用默认打印机打印文档doc.Print();

2. 使用虚拟打印机(Microsoft XPS Document Writer)打印PDF文档

Microsoft XPS Document Writer是一种常用的虚拟打印机,可以将PDF文档转换为XPS格式文件进行打印。

// 创建PdfDocument对象并加载PDF文档PdfDocument doc = new PdfDocument();doc.LoadFromFile("Test.pdf");// 设置打印机为Microsoft XPS Document Writerdoc.PrintSettings.PrinterName = "Microsoft XPS Document Writer";// 将PDF文档打印为XPS格式文件doc.PrintSettings.PrintToFile("PrintToXps.xps");doc.Print();

3. 指定打印机及PDF文档打印页码范围

在某些场景下,可能需要指定特定打印机并设置打印页码范围。以下是如何实现的方法:

// 创建PdfDocument对象并加载PDF文档PdfDocument doc = new PdfDocument();doc.LoadFromFile("Test.pdf");// 设置打印机为HP LaserJet P1007doc.PrintSettings.PrinterName = "HP LaserJet P1007";// 设置打印页码范围为1-5页doc.PrintSettings.SelectPageRange(1, 5);// 打印PDF文档doc.Print();

4. 静默打印PDF文档

静默打印是指在打印过程中不显示打印界面,适用于需要自动化打印的场景。

// 创建PdfDocument对象并加载PDF文档PdfDocument doc = new PdfDocument();doc.LoadFromFile("Test.pdf");// 设置静默打印doc.PrintSettings.PrintController = new StandardPrintController();// 打印PDF文档doc.Print();

5. 双面打印PDF文档

双面打印可以节省纸张,但需要确保打印机支持该功能。以下是如何实现的方法:

// 创建PdfDocument对象并加载PDF文档PdfDocument doc = new PdfDocument();doc.LoadFromFile("Test.pdf");// 检查打印机是否支持双面打印if (doc.PrintSettings.CanDuplex){    // 设置双面打印模式(可选:Default/Simplex/Horizontal/Vertical)    doc.PrintSettings.Duplex = Duplex.Default;    // 打印PDF文档    doc.Print();}

6. 黑白打印PDF文档

在某些场合下,可能需要将PDF文档打印为黑白版本。以下是实现方法:

// 创建PdfDocument对象并加载PDF文档PdfDocument pdf = new PdfDocument();pdf.LoadFromFile("Test.pdf");// 设置打印为黑白模式pdf.PrintSettings.Color = false;// 打印PDF文档pdf.Print();

7. 打印PDF文档时选择不同的出纸盒

在一些打印场景下,可能需要根据需要选择不同的纸盒进行打印。

// 创建PdfDocument对象并加载PDF文档PdfDocument doc = new PdfDocument();doc.LoadFromFile("Test.pdf");// 设置纸盒交替规则doc.PrintSettings.PaperSettings += delegate(object sender, PdfPaperSettingsEventArgs e){    // 设置页面1-50使用纸盒1    if (1 <= e.CurrentPaper && e.CurrentPaper < 50)    {        e.CurrentPaperSource = e.PaperSources[0];    }    // 设置剩余页面使用纸盒2    else    {        e.CurrentPaperSource = e.PaperSources[1];    }};// 打印PDF文档doc.Print();

8. 将PDF文档打印多份

在某些场景下,可能需要将PDF文档打印多份,以下是实现方法:

// 创建PdfDocument对象并加载PDF文档PdfDocument doc = new PdfDocument();doc.LoadFromFile("Test.pdf");// 设置打印份数为2份doc.PrintSettings.Copies = 2;// 打印PDF文档doc.Print();

9. 打印PDF一页为多页,多页为一页

Spire.PDF支持将PDF文档的多张页面打印到一张纸上(如2页/张),或将单张页面打印成多张纸。

单页打印为多页:

// 创建PdfDocument对象并加载PDF文档PdfDocument pdf = new PdfDocument();pdf.LoadFromFile("Input.pdf");// 将PDF文档的每两张页面打印到一张纸上(排版格式为1行,2列)pdf.PrintSettings.SelectMultiPageLayout(1, 2);pdf.Print();

多页打印为单页:

// 创建PdfDocument对象并加载PDF文档PdfDocument pdf = new PdfDocument();pdf.LoadFromFile("Input1.pdf");// 将PDF文档的单张页面根据标准页面大小(A4纸,595pt*842pt)拆分并打印pdf.PrintSettings.SelectSplitPageLayout();pdf.Print();

10. 自定义纸张大小打印PDF文档

Spire.PDF支持自定义纸张大小打印,以下是实现方法:

使用虚拟打印机自定义纸张大小:

// 创建PdfDocument对象并加载需要打印的PDF文档Spire.Pdf.PdfDocument doc = new Spire.Pdf.PdfDocument();doc.LoadFromFile("FileName.pdf");// 获取原文档第一页的纸张大小Point size = doc.Pages[0].Size;// 创建自定义纸张大小PaperSize paper = new PaperSize("Custom", (int)(size.Width / 72 * 100), (int)(size.Height / 72 * 100));paper.RawKind = (int)PaperKind.Custom;// 设置打印纸张大小为自定义大小doc.PrintSettings.PaperSize = paper;// 设置打印为原纸张大小模式doc.PrintSettings.SelectSinglePageLayout(PdfSinglePageScalingMode.FitSize, true);// 打印文档doc.Print();

使用真实打印机设置纸盒中的纸张大小:

// 创建PdfDocument对象并加载需要打印的PDF文档Spire.Pdf.PdfDocument doc = new Spire.Pdf.PdfDocument();doc.LoadFromFile("FileName.pdf");// 获取当前打印机支持的纸张大小PaperSize p = null;PrintDocument printDoc = new PrintDocument();foreach (PaperSize ps in printDoc.PrinterSettings.PaperSizes){    if (ps.PaperName.Equals("A3"))    {        p = ps;        break;    }}// 设置打印纸张大小为A3doc.PrintSettings.PaperSize = p;// 设置打印为原纸张大小模式doc.PrintSettings.SelectSinglePageLayout(PdfSinglePageScalingMode.FitSize, true);// 打印文档doc.Print();

转载地址:http://uunkz.baihongyu.com/

你可能感兴趣的文章
Netty工作笔记0084---通过自定义协议解决粘包拆包问题2
查看>>
Netty常见组件二
查看>>
netty底层源码探究:启动流程;EventLoop中的selector、线程、任务队列;监听处理accept、read事件流程;
查看>>
Netty核心模块组件
查看>>
Netty框架的服务端开发中创建EventLoopGroup对象时线程数量源码解析
查看>>
Netty源码—2.Reactor线程模型一
查看>>
Netty源码—4.客户端接入流程一
查看>>
Netty源码—4.客户端接入流程二
查看>>
Netty源码—5.Pipeline和Handler一
查看>>
Netty源码—6.ByteBuf原理二
查看>>
Netty源码—7.ByteBuf原理三
查看>>
Netty源码—7.ByteBuf原理四
查看>>
Netty源码—8.编解码原理二
查看>>
Netty源码解读
查看>>
Netty的Socket编程详解-搭建服务端与客户端并进行数据传输
查看>>
Netty相关
查看>>
Network Dissection:Quantifying Interpretability of Deep Visual Representations(深层视觉表征的量化解释)
查看>>
Network Sniffer and Connection Analyzer
查看>>
NetworkX系列教程(11)-graph和其他数据格式转换
查看>>
Networkx读取军械调查-ITN综合传输网络?/读取GML文件
查看>>