C# 打印PDF文档的10种方法

操作PDF文档时,打印是常见的需求之一。针对不同的打印需求,可分多种情况来进行,如设置静默打印、指定打印页码范围和打印纸张大小、双面打印、黑白打印等等。经过测试,下面将对常见的几种PDF打印需求做一些归纳总结,这里归纳了10种打印需求及方法。如下:

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

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

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

  4. 静默打印PDF文档

  5. 双面打印PDF文档

  6. 黑白打印PDF文档

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

  8. 将PDF文档打印多份

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

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

使用工具:Spire.PDF for .NET

获取方法:

1. 通过官网下载。在程序中添加引用Spire.Pdf.dll,dll文件在安装路径下的bin文件夹中。

2. 通过Nuget网站下载。

 C# 示例代码

【示例1】使用默认打印机打印PDF

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

 

【示例2】使用虚拟打印机(Microsoft XPS Document Writer)打印PDF

//加载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文档打印页码范围

//加载PDF文档
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("Test.pdf");//指定打印机
doc.PrintSettings.PrinterName = "HP LaserJet P1007";//设置文档打印页码范围
doc.PrintSettings.SelectPageRange(1, 5);//打印不连续的页面
//doc.PrintSettings.SelectSomePages(new int[] { 1, 3, 5, 7 });//打印PDF文档
doc.Print();

 

【示例4】静默打印PDF

//加载PDF文档
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("Test.pdf");//静默打印PDF文档
doc.PrintSettings.PrintController = new StandardPrintController();
doc.Print();

 

【示例5】双面打印PDF

//加载PDF文档
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("Test.pdf");//判断打印机是否支持双面打印
if (doc.PrintSettings.CanDuplex)
{//如果支持则设置双面打印模式,可选:Default/Simplex/Horizontal/Verticaldoc.PrintSettings.Duplex = Duplex.Default;//打印PDF文档doc.Print();
}

 

【示例6】黑白打印PDF

//加载PDF文档
PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile("Test.pdf");//黑白打印PDF文档
pdf.PrintSettings.Color = false;
pdf.Print();

 

【示例7】打印PDF文档时选择不同的出纸盒

//加载PDF文档
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("Test.pdf");//设置纸盒
doc.PrintSettings.PaperSettings += delegate(object sender, PdfPaperSettingsEventArgs e)
{//设置页面1-50的纸张来源为纸盒1if (1 <= e.CurrentPaper && e.CurrentPaper <= 50){e.CurrentPaperSource = e.PaperSources[0];}//设置余下页面的纸张来源为纸盒2else{e.CurrentPaperSource = e.PaperSources[1];}
};//打印PDF文档
doc.Print();

 

【示例8】将PDF文档打印多份

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

【示例9】打印PDF一页为多页,多页为一页

1. 调用PdfPrintSettings类的SelectMultiPageLayout方法将一个PDF文档的多张页面打印到一张纸上。

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

2. PdfPrintSettings类的SelectSplitPageLayout方法支持将一个PDF文档的单张页面打印到多张纸上。该方法是根据A4纸的标准尺寸595pt*842pt对PDF页面进行拆分,超过该大小的页面,打印时其超过部分将会被打印到下一张纸。

//实例化一个PdfDocument对象
PdfDocument pdf = new PdfDocument();
//载入PDF文档
pdf.LoadFromFile("Input1.pdf");//将PDF文档的单张页面根据标准页面大小进行拆分并打印
pdf.PrintSettings.SelectSplitPageLayout();
pdf.Print()

 

【示例10】自定义纸张大小打印PDF

1. 使用虚拟打印机自定义纸张大小打印:保持原来页面大小打印到PDF

//加载需要打印的PDF文档
Spire.Pdf.PdfDocument doc = new Spire.Pdf.PdfDocument();
doc.LoadFromFile(FileName);//获取原文档第一页的纸张大小,这里的单位是Point
SizeF size = doc.Pages[0].Size;//实例化PaperSize对象,设置其宽高
//需要特别注意的是这里涉及到单位的转换,PaperSize的宽高参数默认单位是百英寸 
PaperSize paper = new PaperSize("Custom", (int)size.Width/72*100, (int)size.Height/72*100);
paper.RawKind = (int)PaperKind.Custom;//设置打印的纸张大小为原来文档的大小
doc.PrintSettings.PaperSize = paper;//需要选择FitSize打印模式
doc.PrintSettings.SelectSinglePageLayout(PdfSinglePageScalingMode.FitSize, true);
//打印
doc.Print();

2. 使用真实打印机设置纸盒中的纸张大小打印:将原来A4的文档打印成A3的大小。

//加载需要打印的PDF文档Spire.Pdf.PdfDocument doc = new Spire.Pdf.PdfDocument();doc.LoadFromFile(FileName);PaperSize p = null;//实例化一个PrintDocument对象来获取当前打印机的纸盒信息PrintDocument printDoc = new PrintDocument();//遍历打印机纸盒里面的纸张,找到需要的A3
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();

推荐一个公众号:dotNET编程大全,扫码关注!

需加微信交流群的,请加小编微信号z438679770,切记备注 加群,小编将会第一时间邀请你进群!

 每日分享不易,"在看"就是鼓励!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304490.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

遗传算法经典实例代码_经典算法研究系列 之 深入浅出遗传算法

关注数学&#xff0c;关注AI&#xff0c;关注我们公众号ID&#xff1a;Math-AI经典算法研究系列遗传算法1初探遗传算法Ok&#xff0c;先看维基百科对遗传算法所给的解释&#xff1a;遗传算法是计算数学中用于解决最优化的搜索算法&#xff0c;是进化算法的一种。进化算法最初是…

java buffalo_随你怎么玩!Buffalo 网络硬盘新潮流

现代时尚的办公环境是怎样的&#xff1f;ADSL、无线网络、笔记本、还有咖啡&#xff0c;惬意地被沙发包裹起来&#xff0c;自由自在地网上冲浪……&#xff1b;当然仅仅有这些还是不够&#xff0c;我们需要视频会议、需要网络下载、甚至打印、扫描&#xff0c;还有需要随时随地…

.NET gRPC核心功能初体验

gRPC是高性能的RPC框架&#xff0c; 有效地用于服务通信(不管是数据中心内部还是跨数据中心)。由Google开源&#xff0c;目前是一个Cloud Native Computing Foundation&#xff08;CNCF&#xff09;孵化项目。其功能包括&#xff1a;•双向流•强大的二进制序列化•可插拔的身份…

为什么我怎么也理解不了波粒二象性,是因为智商不够吗?

大家好&#xff0c;各位观众。如果你们之前不能完全理解波粒二象性&#xff08;现象本身&#xff0c;或者这个概念的内涵和外延&#xff09;。不用担心&#xff0c;我认为十有八九不是智商问题&#xff1a;量子物理的内容有太多“反常识”了。很多时候&#xff0c;是我们的脑袋…

设备间的连线图例

转载于:https://blog.51cto.com/51fashion/243017

化学版2048,你玩过吗?内含游戏链接

今天来给大家推荐一款游戏——Na&#xff08;钠&#xff09;&#xff0c;也可以叫它化学版2048。首先2048大家都不陌生&#xff0c;曾经火爆一时的小游戏&#xff0c;于14年由年仅19岁的意大利程序员加布里勒希鲁尼&#xff08;Gabriele Cirulli&#xff09;开发出来。2048游戏…

sqlsession.selectlist 会返回null么_StackOverflow经典问题:代码中如何去掉烦人的“!=nullquot;判空语句...

推荐阅读&#xff1a;程序员引路人&#xff1a;腾讯T4曰“面试不仅仅是技术过硬就可以了&#xff0c;你还需要懂得这些”​zhuanlan.zhihu.com问题为了避免空指针调用&#xff0c;我们经常会看到这样的语句if (someobject ! null) { someobject.doCalc();}最终&#xff0c;项…

如何在 ASP.Net Core 中使用 Configuration Provider

ASP.NET Core 是一个开源的&#xff0c;跨平台的&#xff0c;精简的模块化框架&#xff0c;可用于构建高性能&#xff0c;可扩展的web应用程序&#xff0c; ASP.NET Core 中的数据配置常用 k-v 的形式存储&#xff0c;值得注意的是&#xff0c;新的数据配置还支持 层级方式&…

GdiPlus[30]: IGPPen: 线帽

StartCap 和 EndCap 属性分别用来读写两段的线帽, 测试图:StartCap 和 EndCap 测试代码:uses GdiPlus;procedure TForm1.FormPaint(Sender: TObject); constCapArr: array[0..8] of Byte (0, 1, 2, 3, $10, $11, $12, $13, $14); varGraphics: IGPGraphics;Pen: IGPPen;Pt1,Pt…

你知道怎么样排序才能做到多快好省?

小智最近迷上了计算机算法&#xff0c;今天过来给大家讲讲排序算法。准备讲排序算法之前&#xff0c;我们还是要先回顾一下排序这个概念。排序是一门古老的科学。排序问题&#xff0c;用数学的方式可以表达如下问题输入&#xff1a;给定n个数&#xff0c;a1, a2, a3, ..., an…

C# 使用 Index 和 Range 简化集合操作

C# 使用 Index 和 Range 简化集合操作Intro有的语言数组的索引值是支持负数的&#xff0c;表示从后向前索引&#xff0c;比如&#xff1a;arr[-1]从 C# 8 开始&#xff0c;C# 支持了数组的反向 Index&#xff0c;和 Range 操作&#xff0c;反向 Index 类似于其他语言中的负索引…

我的小服务器

朋友做了一个工控机的板子&#xff0c;我要了一块来&#xff0c;自己加上了迅驰1.2G CPU&#xff0c;再从笔记本上拆了一个1G内存和老的移动硬盘 30G IDE&#xff0c;就算搭起了一个最简陋的服务器。此外我从破DVD光驱上拆了一块铁皮底板&#xff0c;打了几个洞&#xff0c;把主…

爱心助农|百万斤丑苹果紧急待售!谁能帮这些特困孩子熬过寒冷冬天?

题记&#xff1a;人们在猛兽横行的蛮荒年代&#xff0c;得以从树上回归地面&#xff0c;是人们守望相助的结果&#xff0c;也是人类能繁衍至今的原因在这个什么都讲究颜值的年代有这样一个东西却以“丑”、“但非常好吃”引起了我们的注意它便是山西临猗的冰糖心丑苹果还要一个…

微软开源AI诊断工具Error Analysis

喜欢就关注我们吧&#xff01;Error Analysis 使用机器学习技术&#xff0c;助数据科学家更好地了解模型错误模式。在 2020 年 5 月的微软 Build 大会上&#xff0c;微软推出了三个响应式的 AI&#xff08;Responsible AI&#xff0c;RAI&#xff09;工具包&#xff0c;这三个工…

【SDL的编程】VC环境搭建

SDL&#xff08;simple DirectMedia Layer&#xff09;是一个可跨平台的开源库&#xff0c;最近由于自己的兴趣&#xff0c;就把它windosXP下的环境搭建了下。PC&#xff1a;Mircrosoft Windows XP Service Pack3Platform&#xff1a;Mircrosoft Visual C 6.0SourceCode&#x…

# 保持最外层获取焦点_大事件!沈阳爱尔白内障焕晶诊疗中心正式启用,两位PanOptix三焦点人工晶体植入患者清晰见证!...

近日&#xff0c;沈阳爱尔眼科医院大东院区白内障焕晶诊疗中心正式投入使用&#xff01;由沈阳爱尔眼科医院大东院区业务院长朱建勋领衔的白内障手术团队始终与国内外一流水准保持同步&#xff0c;开创性引进了爱尔康AcrySof IQ PanOptix 新一代三焦点人工晶状体。中心最先入住…

使用 Tye 辅助开发 k8s 应用竟如此简单(六)

续上篇&#xff0c;这篇我们来进一步探索 Tye 更多的使用方法。本篇我们将进一步研究 Tye 与分布式应用程序运行时 Dapr 如何碰撞出更精彩的火花。巧了&#xff0c;巧了&#xff0c;真是巧了 今天正值 dapr 1.0 发布的日子。如果你暂时还不了解什么是 dapr。那不如通过以下简短…

BeetleX.WebFamily针对Web SPA应用的改进

BeetleX.WebFamily1.0在集成vueelementaxios的基础上添加应用页、窗体布局和登陆验证等功能。通过以上功能开发Web SPA应用时只需要编写vue控件和配置菜单即可实现应用开发。使用创建一个.net控制台项目&#xff0c;然后通过Nuget引入BeetleX.WebFamily1.0组件&#xff0c;并在…

php acl rbac,建站常用的用户权限管理模型ACL和RBAC的区别

常用的权限管理模型ACL和RBAC的区别1.ACLACL是最早也是最基本的一种访问控制机制&#xff0c;它的原理非常简单&#xff1a;每一项资源&#xff0c;都配有一个列表&#xff0c;这个列表记录的就是哪些用户可以对这项资源执行CRUD中的那些操作。当系统试图访问这项资源时&#x…

华为年终奖,小员工分百万!任正非:钱给多了,不是人才也变成了人才!

华为今年又提前发了巨额年终奖&#xff0c;并公布了新的奖金方案&#xff0c;23级奖金额有近百万&#xff0c;并且宣称“上不封顶、绝不拖欠”&#xff0c;一时间引起热议。任正非签发的内部文件&#xff1a;华为不搞按资排辈&#xff0c;只要做出突出贡献&#xff0c;在新方案…