插件Spire.PDF帮你高效搞定PDF打印
Spire.PDF介绍
Spire.PDF是一个专业的PDF组件,能够独立地创建、编写、编辑、操作和阅读PDF文件,支持 .NET、Java、WPF和Silverlight。Spire.PDF的PDF API拥有丰富的功能,如安全设置(包括数字签名)、PDF文本/附件/图片提取、PDF文件合并/拆分、元数据更新、章节和段落优化、图形/图像描绘和插入、表格创建和处理、数据导入等等。
本文将介绍以下几种常见方式:
使用默认打印机打印PDF文档
使用虚拟打印机(Microsoft XPS Document Writer)打印PDF文档
指定打印机及PDF文档打印页码范围
静默打印PDF文档
双面打印PDF文档
- 完整打印过程
使用默认打印机
//加载PDF文档
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("Test.pdf");
//使用默认打印机打印文档所有页面
doc.PrintDocument.Print();
使用虚拟打印机(Microsoft XPS Document Writer)
//加载PDF文档
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("Test.pdf"); //选择Microsoft XPS Document Writer打印机
doc.PrintDocument.PrinterSettings.PrinterName = "Microsoft XPS Document Writer"; //打印PDF文档到XPS格式
doc.PrintDocument.PrinterSettings.PrintToFile = true;
doc.PrintDocument.PrinterSettings.PrintFileName = "PrintToXps.xps";
doc.PrintDocument.Print();
指定打印机及文档打印页码范围
//加载PDF文档
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("Test.pdf"); //设置打印对话框属性
PrintDialog dialogPrint = new PrintDialog();
dialogPrint.AllowPrintToFile = true;
dialogPrint.AllowSomePages = true;
dialogPrint.PrinterSettings.MinimumPage = 1;
dialogPrint.PrinterSettings.MaximumPage = doc.Pages.Count;
dialogPrint.PrinterSettings.FromPage = 1;
dialogPrint.PrinterSettings.ToPage = doc.Pages.Count; if (dialogPrint.ShowDialog() == DialogResult.OK)
{
//指定打印机及打印页码范围
doc.PrintFromPage = dialogPrint.PrinterSettings.FromPage;
doc.PrintToPage = dialogPrint.PrinterSettings.ToPage;
doc.PrinterName = dialogPrint.PrinterSettings.PrinterName; //打印文档
PrintDocument printDoc = doc.PrintDocument;
dialogPrint.Document = printDoc;
printDoc.Print();
}
静默打印
//加载PDF文档
var doc = new PdfDocument();
doc.LoadFromFile("Test.pdf"); //静默打印PDF文档
PrintDocument printDoc = doc.PrintDocument;
printDoc.PrintController = new StandardPrintController();
printDoc.Print();
双面打印
//加载PDF文档
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("Test.pdf"); //判断打印机是否支持双面打印
bool isDuplex = doc.PrintDocument.PrinterSettings.CanDuplex;
if (isDuplex)
{
//如果支持则设置双面打印模式,可选:Default/Simplex/Horizontal/Vertical
doc.PrintDocument.PrinterSettings.Duplex = Duplex.Default;
//打印文档
doc.PrintDocument.Print();
}
完整打印过程

/// <summary>
/// 打印接口
/// </summary>
//入参:订单号、待打印文件全路径、单双面、颜色、纸张大小、纸张克重、打印范围、打印份数等,后续待补充
public void Print(string filepath, string frompage, string topage, string copies, string duplex, string color, string papersizes, string print)
{
try
{
if (print == "")
{
MessageBox.Show("请选择打印机!");
return;
} if (filepath == "")
{
MessageBox.Show("请选择打印文件路径!");
return;
} PdfDocument doc = new PdfDocument();
doc.LoadFromFile(filepath); doc.PrintSettings.PrinterName = print; //设置文档打印页码范围
doc.PrintSettings.SelectPageRange(Convert.ToInt32(frompage), Convert.ToInt32(topage));
//打印不连续的页面
//doc.PrintSettings.SelectSomePages(new int[] { 1, 3, 5, 7 }); //判断打印机是否支持双面打印
if (doc.PrintSettings.CanDuplex)
{
//如果支持则设置双面打印模式,可选:Default/Simplex/Horizontal/Vertical
switch (duplex)
{
case "双面打印":
doc.PrintSettings.Duplex = Duplex.Default;
break;
case "双面水平打印":
doc.PrintSettings.Duplex = Duplex.Horizontal;
break;
case "单面打印":
doc.PrintSettings.Duplex = Duplex.Simplex;
break;
case "双面垂直打印":
doc.PrintSettings.Duplex = Duplex.Vertical;
break;
default:
doc.PrintSettings.Duplex = Duplex.Simplex;
break;
}
} if (color == "黑白")
{
//黑白打印PDF文档
doc.PrintSettings.Color = false;
}
else
{
doc.PrintSettings.Color = true;
} //设置打印份数为1份
doc.PrintSettings.Copies = Convert.ToInt16(copies); PaperSize p = null;
//遍历打印机纸盒里面的纸张,找到需要的A3
foreach (PaperSize ps in printDoc.PrinterSettings.PaperSizes)
{
if (ps.PaperName.Equals(papersizes))
{
p = ps;
break;
}
}
//设置打印的纸张大小为A3
doc.PrintSettings.PaperSize = p; //静默打印PDF文档
doc.PrintSettings.PrintController = new StandardPrintController(); doc.PrintSettings.EndPrint += PrintSettings_EndPrint; //使用默认打印机打印文档所有页面
doc.Print();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
} private void PrintSettings_EndPrint(object sender, PrintEventArgs e)
{
MessageBox.Show("打印成功!");
}
支持选择打印机、纸张设置、双面打印、彩色打印、打印份数和打印页码范围等等都可以进行控制!
如有编程方面的交流可加群:186841119,一起相互交流学习进步!
插件Spire.PDF帮你高效搞定PDF打印的更多相关文章
- 不花钱搞定PDF编辑难题
PDF格式是专为显示而设计的格式,并不容易被编辑,市面上并没有一款可以真正免费使用的PDF编辑器. 不花钱搞定PDF编辑难题的办法: 1.免费使用PDF编辑器+去水印:免费版的PDF编辑器不是会加水印 ...
- 服务应用突然宕机了?别怕,Dubbo 帮你自动搞定服务隔离!
某日中午,午睡正香的时候,接到系统的报警电话,提示生产某物理机异常宕机了,目前该物理机已恢复,需要重启上面部署的应用. 这时瞬间没有了睡意,登上堡垒机,快速重启了应用,系统恢复正常.本想着继续午睡,但 ...
- 当文件目录变得杂乱不堪怎么办,python帮你轻松搞定
这几天和几个小伙伴,在一起合做一个ppt. 做ppt之前有原版的ppt,和一个word大纲,在制作过程中,又不断添加图片.视频等素材,最终,整个目录变得杂乱不堪(见下图-处理之前) 那我想,可不可以做 ...
- 面试阿里,美团,京东都会被问到的Spring ,从基础到源码帮你全搞定
1 前言 Spring是一个轻量级开源框架,它是为了解决企业应用开发的复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框 ...
- 对象存储 COS 帮您轻松搞定跨域访问需求
背景 早期为了避免 CSRF(跨站请求伪造) 攻击,浏览器引入了 "同源策略" 机制.如果两个 URL 的协议,主机名(域名/IP),端口号一致,则视为这两个 URL " ...
- “摆地摊“都找不到全栈工程师?JNPF帮你分分钟搞定!
大街上捕捉野生程序员 都这样了还找不到全栈工程师 全栈工程师(Full-Stack Engineer)图鉴: 全栈工程师,也叫全端工程师(同时具备前端和后台能力),英文Full Stack deve ...
- [调试][程序打印]当printf不能用时,使用C++的不定参数来搞定OutputDebugString打印
void _trace( char* str , ...) //类似printf{ va_list vlist; va_start(vlist , str ); char a [100] ; vspr ...
- 如何使用 APM 搞定 PHP 应用的性能优化?
APM 究竟是什么? 很多人都是第一次听说 APM 的概念,本文主要阐述如何使用 APM 的解决方案来实现 PHP 应用性能的优化.首先先介绍一下 APM (Application Performan ...
- sass笔记-1|Sass是如何帮你又快又好地搞定CSS的
Sass学习笔记持续整理中,开篇不讲怎么安装,sass是什么,这些搜索引擎会告诉你,我们从sass的作用开始讲起,知道sass用来干什么,有什么作用,我们才能相信用sass的好处,并且时时刻刻想着sa ...
随机推荐
- 修改apt,pip,npm为国内镜像源
apt 原文件备份 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 编辑源列表文件 sudo vim /etc/apt/sources. ...
- Linux文件系统和管理-2文件操作命令(下)
移动和重命名文件 mv 命令可以实现文件或目录的移动和改名 剪切的效果 同一分区移动数据,速度很快:数据位置没有变化 不同分区移动数据,速度相对慢:数据位置发生了变化 格式 和cp基本一样 mv [O ...
- Spring+Hibernate+Struts2整合之实现登录功能
前端代码: <form id="loginForm" action="${ pageContext.request.contextPath }/user_login ...
- MongoDB分片 --- MongoDB基础用法(六)
分片 在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求. 当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量. ...
- CSS动画之动画模块
过渡模块和动画模块的区别:过渡动画需要人为的去触发这个反应,而动画模块不需要人为相同点:都是动画:都是系统新增的属性:都是要满足三要素才有动画效果三要素:1.告诉系统执行哪个动画,要写出动画名称:an ...
- 4G工业路由器的传输功率是越高越好吗?
现在人们越来越多的利用运营商网络进行家庭的Wi-Fi上网,早已是非常普遍的事情了.而无线路由器作为设备组网的重要组成部分,与路由器相关的话题.知识总会能够引发大家的热议.这里,以众山物联网研发.生产的 ...
- pycharm pro2020版专业版永久激活
pycharm2020版本专业版永久激活[亲测有效] pycharm2020.1版安装包与破解工具下载 可私信我获取资源. 公众号,轻松学编程 教程 1.先下载安装包和破解补丁压缩包,然后点击pych ...
- CF295C Greg and Friends
首先 我们考虑每次船来回运人时都可以看成一种dp状态 又因为人的体重只有50kg和100kg两种, 所以我们可以开一个三维数组dp[i][j][k],第1维表示在出发岸50kg有i个,第2维表示在出发 ...
- 1到n整数中1出现的次数
1到n整数中1出现的次数 题目描述 输入一个整数n, 求1~n这n个整数的十进制表示中1出现的次数. 例如, 输入12, 1~12这些整数中包含1的数字有1, 10, 11和12, 1一共出现了4次 ...
- 深入Python中的正则表达式
正则表达式应用的场景也非常多.常见的比如:搜索引擎的搜索.爬虫结果的匹配.文本数据的提取等等都会用到,所以掌握甚至精通正则表达式是一个硬性技能,非常必要. 正则表达式 正则表达式是一个特殊的字符序列, ...