插件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 ...
随机推荐
- C# Hash算法
#region Hash算法 /// <summary> /// Hash算法 /// </summary> /// <param name="myStr&qu ...
- [开源] .Net ORM FreeSql 1.10.0 稳步向行
写在开头 FreeSql 是 .NET 开源生态下的 ORM 轮子,转眼快两年了,说真的开源不容易(只有经历过才明白).今天带点干货和湿货给大家,先说下湿货. 认识我的人,知道 CSRedisCore ...
- 立即执行函数 - Js函数笔记
立即执行函数 定义:此类函数没有声明,在执行一次后即释放,适合做初始化. 针对初始化功能的函数,同时遵循一句话,只有表达式才能被执行符号执行 1.(function() {...}()); - W3C ...
- maven 的安装与环境变量配置
在http://maven.apache.org下载maven安装包 一.Windows 1.解压压缩包: jar -xvf "D:/apache-maven-3.5.0-bin.zip&q ...
- Qlik Sense学习笔记之Mashup开发(二)
date: 2019-01-26 11:28:07 updated: 2019-01-26 11:28:07 Qlik Sense学习笔记之Mashup开发(二) 1.Mobile SPA UI Fr ...
- python使用matplotlib画图,jieba分词、词云、selenuium、图片、音频、视频、文字识别、人脸识别
一.使用matplotlib画图 关注公众号"轻松学编程"了解更多. 使用matplotlib画柱形图 import matplotlib from matplotlib impo ...
- Flask中的MTV架构之Templates
Flask 中的MTV架构之Templates 关注公众号"轻松学编程"了解更多. 1.Templates(模板引擎) 1.1 说明 模板文件就是按照特定规则书写的一个负责展示 ...
- P2346 四子连棋
P2346 四子连棋 迭代加深++ 题意描述 在一个4*4的棋盘上摆放了14颗棋子,其中有7颗白色棋子,7颗黑色棋子,有两个空白地带,任何一颗黑白棋子都可以向上下左右四个方向移动到相邻的空格,这叫行棋 ...
- 对于RBAC与shiro的一些思考
一.什么是RBAC模型 RBAC模型是一个解决用户权限问题的设计思维. 在最简单的RBAC模型中,将用户表设计为如下几个表 1.用户 2.角色 3.权限 以及这三张表衍生出来的两张中间表 4.用户_角 ...
- 多服务器使用Docker设置一主一从三哨兵redis(完整)
本来应该续之前那篇博客Docker配置redis哨兵模式--多服务器·上写一个下篇的,但是忽然意识到应该将必要的环境打包为一个基础镜像,在此基础上建立与redis有关的镜像,这样既能够快速打包,又能够 ...