-
2019-04-24 00:21:00
操作PDF文档时,打印是常见的需求之一。针对不同的打印需求,可分多种情况来进行,如设置静默打印、指定打印页码范围和打印纸张大小、双面打印、黑白打印等等。经过测试,下面将对常见的几种PDF打印需求做一些归纳总结,这里归纳了10种打印需求及方法。如下:
- 使用默认打印机打印PDF文档
- 使用虚拟打印机(Microsoft XPS Document Writer)打印PDF文档
- 指定打印机及PDF文档打印页码范围
- 静默打印PDF文档
- 双面打印PDF文档
- 黑白打印PDF文档
- 打印PDF文档时选择不同的出纸盒
- 将PDF文档打印多份
- 打印PDF一页为多页、打印多页为一页
- 自定义纸张大小打印PDF
使用工具:Spire.PDF for .NET
获取方法:
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(1, 5); //打印不连续的页面 //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 (1 <= e.CurrentPaper && e.CurrentPaper <= 50) { e.CurrentPaperSource = e.PaperSources[0]; } //设置余下页面的纸张来源为纸盒2 else { e.CurrentPaperSource = e.PaperSources[1]; } }; //打印PDF文档 doc.Print();
【示例8】将PDF文档打印多份
//加载PDF文档 PdfDocument doc = new PdfDocument(); doc.LoadFromFile("Test.pdf"); //设置打印份数为2份 doc.PrintSettings.Copies = 2; //打印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(1, 2); 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[0].Size; //实例化PaperSize对象,设置其宽高 //需要特别注意的是这里涉及到单位的转换,PaperSize的宽高参数默认单位是百英寸 PaperSize paper = new PaperSize("Custom", (int)size.Width/72*100, (int)size.Height/72*100); 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();
好书推荐、视频分享,与您一起进步更多相关内容 -
C#实现打印PDF文件
2016-04-20 19:42:52C#多种方法实现打印PDF文件,可以指定打印机 -
C#拆分PDF(iText)
2019-10-15 10:01:38按照exce制定的规则,将一个PDF拆分成多个并进行重命名。 -
python 批量打印PDF(转)
2022-02-25 21:27:46安装Ghostscript,GhostView,使用gsprint命令打印pdf文件。 gsprint命令参数说明: "-dQUIET", 安静的意思,指代执行过程中尽可能少的输出日志等信息。(也可以简写为“-q”) "-dNOSAFER", 通过命令行运行 "-...有一批PDF文件,好几百个,每个只打印第2,3页,双面打印。
网上搜索一波,方案如下:
安装Ghostscript,GhostView,使用gsprint命令打印pdf文件。
gsprint命令参数说明:
"-dQUIET", 安静的意思,指代执行过程中尽可能少的输出日志等信息。(也可以简写为“-q”)
"-dNOSAFER", 通过命令行运行
"-dBATCH", 执行到最后一页后退出
"-dNOPAUSE", 每一页转换之间没有停顿
"-dNOPROMPT", 没有相关提示
"-dFirstPage=1", 从第几页开始
"-dLastPage=5", 到第几页结束
"-sDEVICE=pngalpha", 转换输出的文件类型装置,默认值为x11alpha
"-g720x1280", 图片像素(-g<width>x<height>),一般不指定,使用默认输出
"-r300", 图片分辨率(即图片解析度为300dpi),默认值好像是72(未测试证实)
"-sOutputFile=/opt/shanhy/error1png/%d.png", 图片输出路径,使用%d或%ld输出页数
比如打印c.pdf第2,3页,命令如下
1
gsprint
-
dFirstPage
=
2
-
dLastPage
=
3
c.pdf
大部分pdf只打印第2,第3页,双面打印,所以用python控制批量打印所有pdf的第二页,暂停,提示翻页,然后批量打印第三页。
完整代码如下
# -*- coding: utf-8 -*- import os import time def print_pdf(pdf_file_name, page): """ 静默打印pdf :param pdf_file_name :page 打印第几页 :return: """ cmd = 'gsprint -dFirstPage=%s -dLastPage=%s %s' % (page, page, pdf_file_name) print(cmd) p = os.popen(cmd) time.sleep(3) print(p.read()) if __name__ == '__main__': curr_path = os.getcwd() fl = os.listdir(curr_path) for i in range(2,4): print(i) for f in fl: if 'pdf' in f.lower(): print_pdf(f, i) a = raw_input('请翻转打印纸')
ghostscript下载地址:
https://www.ghostscript.com/download.html
ghostview下载地址:
http://www.onlinedown.net/soft/6218.htm
-
C# 八种方案打印PDF文档
2017-11-02 21:20:12打印PDF文档是开发人员经久不变的话题,常见的打印需求大致有以下八种: 用默认打印机打印PDF文档 用虚拟打印机打印PDF文档 指定打印机及PDF文档的打印页码范围 静默打印PDF文档 双面打印PDF文档 打印PDF文档的多页...C# 八种方案打印PDF文档
打印PDF文档是开发人员经久不变的话题,常见的打印需求大致有以下八种:
- 用默认打印机打印PDF文档
- 用虚拟打印机打印PDF文档
- 指定打印机及PDF文档的打印页码范围
- 静默打印PDF文档
- 双面打印PDF文档
- 打印PDF文档的多页到一页
- 打印PDF文档的一页到多页
- 将PDF文档打印多份
本文将介绍如何使用C#实现以上所列出的打印功能。该方案使用了Spire.PDF for .NET控件,该控件主要用于在.NET应用程序中操作PDF文档。下载安装后,需要引用Spire.Pdf.dll到Visual Studio中,本文将介绍如何该控件来实现以上所列出的打印功能。
常见的八种打印需求及解决方案
1. 使用默认打印机打印PDF文档
使用PdfDocument对象调用Print方法可直接使用默认打印机打印一个PDF文档的所有页面。
PdfDocument pdf = new PdfDocument("Input.pdf"); pdf.Print();
2. 使用虚拟打印机(Microsoft XPS Document Writer)打印PDF文档
PdfPrintSettings类的PrinterName属性可以指定打印机的名称,PrintToFile方法可以将PDF文档打印为XPS格式。
PdfDocument pdf = new PdfDocument("Input.pdf"); pdf.PrintSettings.PrinterName = "Microsoft XPS Document Writer"; pdf.PrintSettings.PrintToFile("PrintToXps.xps"); pdf.Print();
3. 指定打印机及打印页码范围
如果需要打印PDF文档的指定页面,如打印第二页和第四页,则可以调用SelectSomePages方法。如果需要打印一个范围内的页面,则可以使用SelectPageRange方法。
PdfDocument pdf = new PdfDocument("Test.pdf"); //Set the printer pdf.PrintSettings.PrinterName = "HP LasterJet P1007"; //Only print the second and fourth page pdf.PrintSettings.SelectSomePages(new int[] { 2, 4 }); //Print the pages from 1 to 15 pdf.PrintSettings.SelectPageRange(1, 15); pdf.Print();
4. 静默打印PDF文档
PdfDocument pdf = new PdfDocument("Input.pdf"); pdf.PrintSettings.PrintController = new StandardPrintController(); pdf.Print();
5. 双面打印PDF文档
PdfDocument pdf = new PdfDocument("Input.pdf"); bool isDuplex = pdf.PrintSettings.CanDuplex; if (isDuplex) { //如果支持则设置双面打印模式,可选:Default/Simplex/Horizontal/Vertical pdf.PrintSettings.Duplex= Duplex.Default; //打印文档 pdf.Print(); }
6. 打印多页到一页
用户可以调用PdfPrintSettings类的SelectMultiPageLayout方法将一个PDF文档的多张页面打印到一张纸上。
//实例化一个PdfDocument对象 PdfDocument pdf = new PdfDocument(); //载入PDF文档 pdf.LoadFromFile("Input.pdf"); //将PDF文档的每两张页面打印到一张纸上(排版格式为1行,2列) pdf.PrintSettings.SelectMultiPageLayout(1, 2); pdf.Print();
以下是用于打印的PDF文档截图,该文档共有2页:
打印到 XPS的效果:
7. 打印一页到多页
PdfPrintSettings类的SelectSplitPageLayout方法支持将一个PDF文档的单张页面打印到多张纸上。该方法是根据A4纸的标准尺寸595pt*842pt对PDF页面进行拆分,超过该大小的页面,打印时其超过部分将会被打印到下一张纸。
//实例化一个PdfDocument对象 PdfDocument pdf = new PdfDocument(); //载入PDF文档 pdf.LoadFromFile("Input1.pdf"); //将PDF文档的单张页面根据标准页面大小进行拆分并打印 pdf.PrintSettings.SelectSplitPageLayout(); pdf.Print();
以下是用于打印的PDF文档截图,该PDF文档共有1页,页面大小为1600pt*750pt:
打印到XPS的效果:
8. 将文档打印多份
PdfDocument pdf = new PdfDocument("Input.pdf"); pdf.PrintSettings.Copies = 2; pdf.Print();
-
网页批量打印成PDF,并按条件合并成大PDF、生成页码
2021-06-19 04:20:29合同在系统(web系统)中以html形式显示,打印单份都是在网页中右键打印,订单量上千份,每笔订单有两份合同,如果手动打印的话,需要打印2000+次,因为还要按月份进行整理,还要页码,所以先要保存成PDF(因为有电子...题记:因为老板要求将过去一年内系统中的订单合同内容进行打印,并按月进行整理成纸质文件。合同在系统(web系统)中以html形式显示,打印单份都是在网页中右键打印,订单量上千份,每笔订单有两份合同,如果手动打印的话,需要打印2000+次,因为还要按月份进行整理,还要页码,所以先要保存成PDF(因为有电子印章和CSS样式,没法直接保存成Word),还要插入页码。
第一步,用pechkin将网页保存为PDF
合同1的文件名为351.pdf,合同2的文件名为352.pdf
将所有ID的合同到下载到同一目录中。
用的是C#写的脚本,大概用了半个小时所有的PDF下载完成(要是手动的话,按一笔订单两份合同1分钟计算的话,1天480份,大概得两天多吧,还是不带休息的那种。。)。
下面是主要的代码
第二步,将PDF按照月份进行合并成一个大的PDF,并生成页码。
PDF有了,用PDF编辑器进行合并和生成页码,一看,所有的PDF编辑软件合并,生成页码居然都是收费的(费用不高,老板不愿出,我也不愿出,如果有用付费的PDF编辑器的朋友,也可以谈谈感受)
ItextSharp,隆重登场。
创建输出的PDF和页码的字体
因为还要统计每笔订单对应的页码,所以多了一个40Page.txt
40.txt里面是每月对应的订单ID,每生成一个月的大PDF后,40.txt的内容我都换成下个月的。这个合成速度很快,几秒钟就搞定一个月的订单。
然后就是统计列表,纸质打印,装订了,这个程序就干不了
总结:pechkin有默认的页边距,和直接用网页打印成PDF有区别,比用网页打印的要缩小了,上面的代码只供参考,因为我的代码也没有做整理,有需要经常做上面工作的朋友可以加微信
-
C# net autocad批量打印(图纸设置,打印比例设置)
2020-06-11 14:15:33private void btn_outpdf_Click(object sender, EventArgs e) { AcadDocument doc = null; string destPath = string.Empty; foreach (var file in fileslist) { doc = _app.Documents.Open(file,... -
C#打印操作实例--批量打印学生证实例源码
2019-04-02 10:51:40C#打印操作实例--批量打印学生证实例源码 -
winform 按顺序连续打印多个PDF文件
2014-05-05 14:13:00原文:winform 按顺序连续打印多个PDF文件关于PDF打印的问题,前面有篇文章(点这里查看)也叙述过,今天来谈谈另外一种方法 其实方法很简单,因为需要把多个PDF文档按顺序连续打印,为此我们为什么不把要打印的pdf... -
C#PDF转图片,支持批量转,支持PDF文件,BASE64转换为图片文件,BASE64,支持合并PDF为一张图
2022-01-26 15:07:12使用C#做个个小的winform工具发现 速度还蛮快,打算用.NET WEBAPI写个接口进行PDF转图片,我把代码给大家,目前百度上没这么全的,给大家闭坑了。 项目引用包如下: PdfiumViewer ImageResizer.Plugins.PdfiumRen -
C#实战之CAD二次开发005:打印pdf
2019-07-28 12:05:54上期我们介绍了如何在CAD中插入文字和插入图块两个功能,这期我们再讲一下如何实现CAD打印pdf功能。 打印pdf 要实现打印pdf功能,需要借助一个软件pdfFactory,这个是pdf虚拟打印机,下载地址 链接:... -
AutoCad 批量打印
2021-08-25 09:01:56Batchplot(CAD批量打印工具)安装步骤 操作特别说明 软件下载和安装 https://www.onlinedown.net/soft/982973.htm 基本简介 Batchplot是一个专门针对AutoCAD2000以上版本设计的单DWG多图纸的批量打印、批量... -
如何用.NET(CSharp & VB.NET)将DWG文件打印为PDF
2017-04-30 09:39:15从.NET(比如C#)里面调用AutoCAD ActiveX API实现后台打印DWG文件为PDF文件,而且要把打印页面的大小设置成和DWG视图的页面的大小一致。当然除了ActiveX API,其它接口,比如ObjectARX和AutoCAD.NET API也支持打印并... -
cad批量打印_最好用的cad批量打印方法
2020-11-18 17:20:20在设计行业CAD算是入门软件,同时也是必备软件,大神们在做CAD时经常批量打印,首先,先解释下“CAD批量打印”这个名词,因为有些人可能对CAD的批量打印存在一定的误解。 CAD批量打印,并不是对多个dwg文件进行打印... -
c# 给pdf添加数字签名的步骤
2021-04-06 22:36:24数字签名广泛用于保护PDF文档,可见数字签名在日常生活中是相当重要的。在这篇文章中我将与大家分享如何给PDF文件添加可见的数字签名。 首先我下载了一个由E-iceblue公司开发的免费版的PDF组件-Free Spire.PDF,控件... -
C# 文本文件批量打印工具
2009-09-30 18:58:00C# 文本文件批量打印工具,网上也有一些程序实现了文本文件的打印,有些问题1、长行文字,不能自动换行打印2、只能打印单个文件只好自己编写一个工具,解决以上文件,并可以设置打印页面,页眉页脚,可以设置字体的... -
winfrom 实现条形码批量打印以及将条形码信息生成PDF文件
2017-04-21 14:23:00其主要难点就在于如何生成条形码、如何批量打印条形码以及将界面条形码信息批量生成以其各自的 barcode 码命名的pdf文件并存到指定的目录下。由于自身“储备”不足于是开始大量的在网上搜索关于这几个方面的资料,... -
C#根据html生成PDF
2018-02-23 09:57:58using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls;...using iTextSharp.text...using iTextSharp.text.pdf; using System.IO; using iTextS... -
C# 多张图片生成PDF
2020-07-25 17:55:57C# 多张图片生成PDF //存放image路径 List<string> imageList = new List<string>(); imageList.Add(@"D:\image1.png"); imageList.Add(@"D:\image2.png"); //生成PDF路径 string fileName = string.... -
CAD工具——批量打印
2021-12-03 09:25:24批量打印图纸。 执行方式 (1)单击菜单栏“功能→高级工具→批量打印”。如图: (2)在左下角命令行输入“MxC_BitchPrint”按enter键。如图: 执行命令之后,系统会弹出“批量打印”对话框。 选项说明 (1)图... -
WPS转PDF工具
2017-10-25 21:28:01WPS转PDF工具,命令行工具,用命令行运行,第一个参数为输入的WPS文件,第二个参数(可选)为输出PDF文件名字 -
C#开发实例大全(基础卷).软件开发技术联盟(带详细书签) PDF 下载
2018-02-20 01:26:55实例045 批量替换某一类字符串 58 实例046 对字符串进行加密与解密 59 3.3 常用数字处理技术 61 实例047 判断输入的货币值是否为数字 61 实例048 对计算结果进行四舍五入 62 实例049 商品金额的大小写转换 63 实例... -
C#使用iTextSharp+ZXing.Net+FreeSpire.PDF生成和打印pdf文档
2019-04-20 09:52:00项目需求(Winform)可以批量打印某个模板,经过百度和摸索,使用iTextSharp+ZXing.Net+FreeSpire.PDF三个类库实现了生成pdf、生成条形码和打印pdf功能。 首先在项目作用使用NuGet获取这三个类库的引用。 其次把C:... -
顺丰丰桥面单打印.rar
2020-09-16 09:34:56改资源为顺丰丰桥的电子面单打印接口完整代码,文章案例:https://blog.csdn.net/weixin_48529185/article/details/108602135 -
ASP.NET C#根据HTML页面导出PDF
2020-06-18 16:09:36记录一个将html页面转换成PDF文件的转换器,该...同时附上C#将html转换为PDF的代码: //生成PDF string page= "~/Student/Print_StudentCard.aspx";//要打印的页面 string pdf = Server.MapPath("~/Upload/wkhtml -
c# 创建一个pdf 将图片和文字存入PDF
2020-09-25 16:20:29一:url抓取图片存入本地 c# 二:将图片和文字存入PDFc# 将url网页上获取的图片...创建一个字典批量存储一下 调用此方法会在bin/debug目录下生成pdf。 private void button1_Click(object sender, EventArg... -
C#生成word文档 、word转pdf、合并pdf文件等
2018-03-17 17:33:03C#生成word文档 、word转pdf、合并pdf文件等 在系统开发中经常会有用户需求涉及到基于模板导出word文档、pdf文档,或者把几个文件合并成一个进行导出预览等,他们所说需求不一样,但在功能实现上却是相同的。由于... -
C# TIF文件转PDF
2022-04-28 10:46:12TIF文件转PDF 使用场景 前几天公司管文件的想要一个本地TIF文件转换成PDF的功能,虽然我不明白为什么要转换成PDF(TIF文件是有图层的,可以使用其他软件进行重新编辑),其实是公司购买的致远OA系统不能支持TIF文件...