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

本文共 4081 字,大约阅读时间需要 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 Writer
doc.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 P1007
doc.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;
}
}
// 设置打印纸张大小为A3
doc.PrintSettings.PaperSize = p;
// 设置打印为原纸张大小模式
doc.PrintSettings.SelectSinglePageLayout(PdfSinglePageScalingMode.FitSize, true);
// 打印文档
doc.Print();

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

你可能感兴趣的文章
nft文件传输_利用remoting实现文件传输-.NET教程,远程及网络应用
查看>>
ng 指令的自定义、使用
查看>>
Nginx
查看>>
nginx + etcd 动态负载均衡实践(二)—— 组件安装
查看>>
nginx + etcd 动态负载均衡实践(四)—— 基于confd实现
查看>>
Nginx + Spring Boot 实现负载均衡
查看>>
Nginx + uWSGI + Flask + Vhost
查看>>
Nginx - Header详解
查看>>
Nginx Location配置总结
查看>>
Nginx Lua install
查看>>
Nginx upstream性能优化
查看>>
Nginx 中解决跨域问题
查看>>
Nginx 动静分离与负载均衡的实现
查看>>
Nginx 反向代理 MinIO 及 ruoyi-vue-pro 配置 MinIO 详解
查看>>
nginx 反向代理 转发请求时,有时好有时没反应,产生原因及解决
查看>>
Nginx 反向代理解决跨域问题
查看>>
Nginx 反向代理配置去除前缀
查看>>
nginx 后端获取真实ip
查看>>
Nginx 学习总结(16)—— 动静分离、压缩、缓存、黑白名单、性能等内容温习
查看>>
Nginx 学习总结(17)—— 8 个免费开源 Nginx 管理系统,轻松管理 Nginx 站点配置
查看>>