首页 > 编程语言 >《c#慢跑》打印机

《c#慢跑》打印机

时间:2023-04-18 10:47:00浏览次数:46  
标签:打印机 c# doc PdfDocument 打印 文档 慢跑 pdf PDF

工具 Spire.PDF for .NET

原文链接:https://www.zhihu.com/tardis/bd/art/482045596
主要参考的是获取纸张的部分代码,即10、中的2、。

工具 Spire.PDF for .NET 获取方法

1、通过官网下载。
在程序中添加引用Spire.Pdf.dll,dll文件在安装路径下的bin文件夹中。
2、通过Nuget网站下载。

打印功能实现

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#,doc,PdfDocument,打印,文档,慢跑,pdf,PDF
From: https://www.cnblogs.com/fusio/p/17314944.html

相关文章

  • golang打包和部署到centos
     项目在golang开发好,打包上传到linux服务器运行,两步:1、打包;在控制台项目于目录下,执行下列命令setGOOS=linuxsetGOARCH=amd64gobuild -o"packageName"如下图所示:会生成一个没有后缀的二进制文件main2、生成main文件上传到Linux服务器运行;上传操作在前面mysql配......
  • socket网络编程
    下面分别以TCP、UDP为例介绍两者的流程图和代码实现:TCP1.流程图:和网上大部分的版本不同,我将TCP三次握手的过程画在了accpet之前,这也是在查阅一些资料发现三次握手会由内核自动完成,aceept只是从队列中取出已经建好的tcp连接,这一点可以在代码中不加入accpet以及后续步骤......
  • Oracle审计篇——细粒度审计
    Oracle的标准审计默认级别是DB,这个级别不会记下具体sql语句是什么,如果需要记下需要开到DB,extended,但是改这个参数需要重启数据库生效,影响业务。SQL>showparameteraudit_trailNAMETYPEVALUE-------------------------------------......
  • 如何查看Oracle加密代码
    例如我们想看看dbms_pdb.cleanup_task这个函数的内容是什么,直接看会发现只能看到声明,代码是加密的可以把加密后的代码粘出来解密https://www.codecrete.net/UnwrapIt/解密后找到cleanup_task对应部分查了下PRAGMAINTERFACE(C,KPDBCLEANUPTASK);意思是调用C语言的内部代码,更深一层......
  • oracle 为sql寻找更好的执行计划并绑定
    这种方法只适合sql本身有更好的执行计划,不能绑定自己构造的执行计划(比如加hint),并且每次只能针对一个sql_id,如果慢sql未使用绑定变量导致有很多类似sql最好从索引、sql改写等方面优化。首先找到慢sql的sql_id,查看其各执行计划平均执行时间--可用v$active_session_history,dba_hist_a......
  • Oracle授予普通用户kill session权限
    开发A在测试环境操作时有时会遇到阻塞问题,需要找DBA帮忙查看阻塞会话及killsession,后来觉得太麻烦想要个kill会话的权限,查了下Oracle授予普通用户killsession权限的方法。1.授予altersystem权限官方文档查到,killsession需要ALTERSYSTEM权限,但是这个权限非常大,不能直接给GRANT......
  • kettle工具如何使用service_name连接oracle
    开发反馈使用kettle工具连pdb连不上,报错如下: Causedby:org.pentaho.di.core.exception.KettleDatabaseException:Errorconnectingtodatabase:(usingclassoracle.jdbc.driver.OracleDriver)Listenerrefusedtheconnectionwiththefollowingerror:ORA-12505,TNS:l......
  • Oracle 恢复之using backup controlfile 和 until cancel
    Oracle恢复数据库时有几个常用但非常相似的命令,整理下它们各自的作用及适用场景。recoverdatabaserecoverdatabaseuntilcancelrecoverdatabaseusingbackupcontrolfilerecoverdatabaseusingbackupcontrolfileuntilcancelrecoverdatabaseuntilcancelusingbackupc......
  • 基于DotNetCoreNPOI封装特性通用导出excel
    基于DotNetCoreNPOI封装特性通用导出excel目前根据项目中的要求,支持列名定义,列索引排序,行合并单元格,EXCEL单元格的格式也是随着数据的类型做对应的调整。效果图:调用方式可以看到时非常容易的能够导出数据,实际调用可能就三四句话//你的需要导出的数据集合,这里的......
  • Oracle 利用在线重定义进行分区表转换
    例如原始非分区表为createtableTESTUSER.LOG_TEST("id"CHAR(36)primarykey,"created_at"DATE)一、选择重定义方法   Bykey,选择主键或者所有字段有NOTNULL约束的唯一键用于在线重定义操作。使用这种方法,在线重定义之前和之后表应该有相同的主键字段(默......