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 我 ...
随机推荐
- Sublime中文编码问题
1. 改配置 Preferences->Settings 三个全部加上 "default_encoding": "UTF-8" 2. 代码编写 2.1 ...
- display的属性值测试
由于在学习CSS的display的属性值只针对block.inline.inline-block和flex进行过了解,并且自己观察得知列表中li的display属性是list-item,而想要触发BF ...
- SSH整合配置文件概括
配置方式一:struts.xml, applicationContext.xml(hibernate.cfg.xml配置信息写入spring配置文件中) (版本号, struts2:2.3.15; s ...
- mongo Shell初体验
mongo shell是一个MongoDB的交互式JavaScript接口.您可以使用mongo shell来查询和更新数据以及执行管理操作. 打开cmd命令行,输入mongo,就可以进入mongo ...
- (七)SpringBoot2.0基础篇- application.properties属性文件的解析及获取
默认访问的属性文件为application.properties文件,可在启动项目参数中指定spring.config.location的参数: java -jar myproject.jar --s ...
- 剑指Offer常见问题整理
1 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数.(来自牛客网,剑指offer) ...
- What is the best way to handle Invalid CSRF token found in the request when session times out in Spring security
18.5.1 Timeouts One issue is that the expected CSRF token is stored in the HttpSession, so as soon a ...
- Spring mvc 原理浅析
2.2. 数据的绑定 前面说过了,SpringMVC是方法级的映射,那么Spring是如何处理方法签名的,又是如何将表单数据绑定到方法参数中的?下面我们就来讨论这个问题.2.2.1. 处理方法签名 首 ...
- filddler一个抓包修改的工具 貌似很强大2017.12.07
filddler直接百度下载 还没弄懂怎么用 有待研究!
- scrapy顺序执行多个爬虫
# -*- coding:utf-8 -*- from scrapy import cmdline from scrapy.cmdline import execute import sys,time ...