C# 打印PDF文档的10种方法
操作PDF文档时,打印是常见的需求之一。针对不同的打印需求,可分多种情况来进行,如设置静默打印、指定打印页码范围和打印纸张大小、双面打印、黑白打印等等。经过测试,下面将对常见的几种PDF打印需求做一些归纳总结,这里归纳了10种打印需求及方法。如下:
- 使用默认打印机打印PDF文档
- 使用虚拟打印机(Microsoft XPS Document Writer)打印PDF文档
- 指定打印机及PDF文档打印页码范围
- 静默打印PDF文档
- 双面打印PDF文档
- 黑白打印PDF文档
- 打印PDF文档时选择不同的出纸盒
- 将PDF文档打印多份
- 打印PDF一页为多页、打印多页为一页
- 自定义纸张大小打印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(, ); //打印不连续的页面
//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/Vertical
doc.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的纸张来源为纸盒1
if ( <= e.CurrentPaper && e.CurrentPaper <= )
{
e.CurrentPaperSource = e.PaperSources[];
}
//设置余下页面的纸张来源为纸盒2
else
{
e.CurrentPaperSource = e.PaperSources[];
}
}; //打印PDF文档
doc.Print();
【示例8】将PDF文档打印多份
//加载PDF文档
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("Test.pdf"); //设置打印份数为2份
doc.PrintSettings.Copies = ; //打印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(, );
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[].Size; //实例化PaperSize对象,设置其宽高
//需要特别注意的是这里涉及到单位的转换,PaperSize的宽高参数默认单位是百英寸
PaperSize paper = new PaperSize("Custom", (int)size.Width/*, (int)size.Height/*);
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;
} } //设置打印的纸张大小为A3
doc.PrintSettings.PaperSize = p; //打印
doc.PrintSettings.SelectSinglePageLayout(PdfSinglePageScalingMode.FitSize, true);
doc.Print();
(本文完)
更多关于PDF打印详情,可查看视频 C# 打印PDF视频教程
转载请注明出处!
C# 打印PDF文档的10种方法的更多相关文章
- Java 打印PDF文档的3种情况
以下内容归纳了通过Java程序打印PDF文档时的3种情形.即: 静默打印 显示打印对话框打印 打印PDF时自定义纸张大小 使用工具:Spire.PDF for Java Jar导入: 方法1:通过官网 ...
- Java 复制PDF文档的2种方法
本文将介绍通过Java程序来复制PDF页面,包括: 跨文档复制,即从文档1复制到文档2 在同一文档内复制,即从页面A复制到页面B 使用工具:Free Spire.PDF for Java (免费版) ...
- 安卓打印实现打印pdf文档
先声明一下,此处的打印非pos打印机打印和蓝牙打印机打印,如果想查找打印小票的pos打印机请进入下面的传送门,蓝牙打印目前没做过,有做过的请指教. pos打印机传送门: 1. https://www. ...
- C#通过调用WinApi打印PDF文档类,服务器PDF打印、IIS PDF打印
其他网站下载来的类,可以用于Winform.Asp.Net,用于服务器端PDF或其他文件打印. 直接上代码: using System; using System.Collections.Generi ...
- C# 插入超链接到PDF文档(3种情况)
超链接可以实现不同元素之间的连接,用户可以通过点击被链接的元素来激活这些链接.具有高效.快捷.准确的特点.本文中,将分享通过C#编程在PDF文档中插入超链接的方法.内容包含以下要点: 插入网页链接 插 ...
- C#使用iTextSharp+ZXing.Net+FreeSpire.PDF生成和打印pdf文档
项目需求(Winform)可以批量打印某个模板,经过百度和摸索,使用iTextSharp+ZXing.Net+FreeSpire.PDF三个类库实现了生成pdf.生成条形码和打印pdf功能. 首先在项 ...
- 前端调用后台接口下载word文档的两种方法
1传统的ajax虽然能提交到后台,但是返回的数据被解析成json,html,text等字符串,无法响应浏览器下载.就算使用bob模拟下载,数据量大时也不方便 废话不多说:上代码(此处是Layui监听提 ...
- JS获取/设置iframe内对象元素、文档的几种方法
1.IE专用(通过frames索引形象定位): document.frames[i].document.getElementById('元素的ID'); 2.IE专用(通过iframe名称形象定位): ...
- Javadoc转换chm帮助文档的四种方法总结
1) 将现有的 html 文件集(比如 api) 制作成chm 文档 http://www.blogjava.net/lishunli/archive/2010/01/07/308618.html 我 ...
随机推荐
- windows下安装mysql-5.7.11-winx64
1.解压. 2.将『D:\Program Files\mysql-5.7.11-winx64\bin』加入系统环境变量. 3.修改my-default.ini. 4.初始化data目录,在 ...
- 0513JS数组内置方法、数学函数、时间函数
|数组中常用的内置方法|-push()与pop()|--push()是往数组的尾部添加,同时返回新数组的长度 var attr = [1,2,3,4,5];var attr2 = [6,7,8,9,0 ...
- 【踩坑】iconfont使用异常bug
你见过html页面上'x'字符变成打印机图标么?一般人应该没有. -----------------------诡异bug----------------------- 今天测试报了一个bug,说页面 ...
- Apache下载、安装及配置(Windows版)
一.Apache的下载 1.点击链接http://httpd.apache.org/download.cgi,找到所需版本,如下图位置: 2.点击所需版本,选择Windows文件格式,如下图位置: 3 ...
- jquery mobile 表单提交 图片/文件 上传
jquerymobile 下面 form 表单提交 和普通html没区别,最主要是 <form 要加一个 data-ajax='false' 否则 上传会失败 1 html代码 <!do ...
- PAT1124:Raffle for Weibo Followers
1124. Raffle for Weibo Followers (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN ...
- echarts 专题
todo:缩放 5 分钟上手 ECharts 获取 ECharts 你可以通过以下几种方式获取 ECharts. 从官网下载界面选择你需要的版本下载,根据开发者功能和体积上的需求,我们提供了不同打包的 ...
- 关于数据库报Packet for query is too large (1986748 > 1048576)(mysql写入数据过大)的解决办法
方法2 (很妥协,很纠结的办法) 进入mysql server 在mysql 命令行中运行 set global max_allowed_packet = 2*1024*1024*10 然后关闭掉这此 ...
- Javascript中没有块级作用域(模仿)
在C/C++中,由花括号封闭的代码块都有自己的作用域,也就是块级作用域(私有作用域).而在javascript中则没有块级作用域,首先来看一段代码: function test(){ for(var ...
- python 产生token及token验证
1.前言 最近在做微信公众号开发在进行网页授权时,微信需要用户自己在授权url中带上一个类似token的state的参数,以防止跨站攻击.在经过再三思考之后,自己试着实现一个产生token和验证tok ...