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打印的更多相关文章

  1. 不花钱搞定PDF编辑难题

    PDF格式是专为显示而设计的格式,并不容易被编辑,市面上并没有一款可以真正免费使用的PDF编辑器. 不花钱搞定PDF编辑难题的办法: 1.免费使用PDF编辑器+去水印:免费版的PDF编辑器不是会加水印 ...

  2. 服务应用突然宕机了?别怕,Dubbo 帮你自动搞定服务隔离!

    某日中午,午睡正香的时候,接到系统的报警电话,提示生产某物理机异常宕机了,目前该物理机已恢复,需要重启上面部署的应用. 这时瞬间没有了睡意,登上堡垒机,快速重启了应用,系统恢复正常.本想着继续午睡,但 ...

  3. 当文件目录变得杂乱不堪怎么办,python帮你轻松搞定

    这几天和几个小伙伴,在一起合做一个ppt. 做ppt之前有原版的ppt,和一个word大纲,在制作过程中,又不断添加图片.视频等素材,最终,整个目录变得杂乱不堪(见下图-处理之前) 那我想,可不可以做 ...

  4. 面试阿里,美团,京东都会被问到的Spring ,从基础到源码帮你全搞定

    1 前言 Spring是一个轻量级开源框架,它是为了解决企业应用开发的复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框 ...

  5. 对象存储 COS 帮您轻松搞定跨域访问需求

    背景 早期为了避免 CSRF(跨站请求伪造) 攻击,浏览器引入了 "同源策略" 机制.如果两个 URL 的协议,主机名(域名/IP),端口号一致,则视为这两个 URL " ...

  6. “摆地摊“都找不到全栈工程师?JNPF帮你分分钟搞定!

    大街上捕捉野生程序员 都这样了还找不到全栈工程师 全栈工程师(Full-Stack Engineer)图鉴: 全栈工程师,也叫全端工程师(同时具备前端和后台能力),英文Full Stack  deve ...

  7. [调试][程序打印]当printf不能用时,使用C++的不定参数来搞定OutputDebugString打印

    void _trace( char* str , ...) //类似printf{ va_list vlist; va_start(vlist , str ); char a [100] ; vspr ...

  8. 如何使用 APM 搞定 PHP 应用的性能优化?

    APM 究竟是什么? 很多人都是第一次听说 APM 的概念,本文主要阐述如何使用 APM 的解决方案来实现 PHP 应用性能的优化.首先先介绍一下 APM (Application Performan ...

  9. sass笔记-1|Sass是如何帮你又快又好地搞定CSS的

    Sass学习笔记持续整理中,开篇不讲怎么安装,sass是什么,这些搜索引擎会告诉你,我们从sass的作用开始讲起,知道sass用来干什么,有什么作用,我们才能相信用sass的好处,并且时时刻刻想着sa ...

随机推荐

  1. Windos--jar包注册成服务

    1.下载资源 链接: https://pan.baidu.com/s/16asJXGudsRN23Rwra_qGZw 提取码: w2gv 解压后有五个文件 1.1注意事项 1.把你的生成的jar包放入 ...

  2. Android测试工具 UIAutomator介绍

    UI Automator 测试工具定义以及用途 UI Automator 测试框架提供了一组 API,用于构建在用户应用和系统应用上执行交互的界面测试.通过 UI Automator API,您可以执 ...

  3. eclipse 包与子包的视图显示方式切换

    上图Package Presentation ---> Hierarchical(如下图显示父包与子包) 参考:https://zhidao.baidu.com/question/2205086 ...

  4. pyqt5安装报错解决办法

    用国内快速的镜像源即可 pip install PyQt5 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

  5. 使用Volley获取验证码

    时间紧张,直接上代码 public class MainActivity extends AppCompatActivity { private RequestQueue queues ; Strin ...

  6. 如何发布代码到maven中心仓库

    deploy to sonatype 参考文章 https://blog.csdn.net/xuefu_78/article/details/52494698 https://blog.csdn.ne ...

  7. 常用物联网应用层协议(1)——先说HTTP协议

    概念 简介 HTTP是一个属于应用层的面向对象的协议,目前使用最为广泛的是HTTP1.1协议.当然,许多网站已经开始支持HTTP2.0,HTTP2复杂度高于HTTP1.1,我们先从HTTP1.1说起. ...

  8. 封装APP之详解

    一.什么是封装APP 封装APP又称Web APP,Web APP即是一种框架型APP开发模式(HTML5 APP 框架开发模式),该开发方式拥有跨平台的优势,该模式通常由"HTML5云网站 ...

  9. SQL注入的一些学习

    -------------------------------------- 这是我之前发布到的其他的一个网址,这里的话我重新总结 可能分很多,我也不是很清楚,只是皮毛的研究了一下 1,sql按数据库 ...

  10. http接口和web service接口测试区别是什么?

    1.web service有一套完整的协议标准,其中有soap协议,用来进行消息的传递. 2.soap请求是HTTP POST的一个专用版本,遵循一种特殊的xml消息格式 Content-type设置 ...