博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在WinForms中使用自定义纸张
阅读量:6855 次
发布时间:2019-06-26

本文共 921 字,大约阅读时间需要 3 分钟。

一直以来,使用自定义纸张打印都是个很头疼的问题,很多次在考虑项目方案的时候,这个问题会成为选择B/S还是C/S的一个重要因素(其实是我自己懒得动手)。但在这次的项目里,我痛下决心,一定要完美地解决自定义纸张打印的问题,于是Google了许多相关资料,终于让我搞定。

说实在话,其实只要了解自定义纸张在Windows里的机制就很容易上手。在基于NT架构的Windows操作系统中,打印服务器(Print Spooling)管理着所有打印机的设置,如果要添加一个自定义纸张,那必须在打印服务器里设置。如果是手工操作,可以在控制面板的打印机文件夹中找到打印服务器的设置,然后在设置的对话框里添加自定义的纸张即可。而这一切如果要以编程的方式来实现,就要通过winspool.drv的相关函数。相关函数并不是很多,但数据结构比较复杂,因为使用的是C#,所以在使用这些函数之前还要将原生类型映射到C#的类型中。

还好,已经有人为我完成了大部分功能。twostepted在Code Project里发表的一篇文章,已经为我完成了大多数功能,剩下就需要自己来动手了。在他的程序中,通过API调用实现了自定义纸张的添加、删除和设置默认的功能,但这些功能都混在了一起,于是我把他的代码做了一定的修改,以满足我的要求。先来看看功能测试的界面。

 

我想功能不用我多说,你一看就能明白。为了使这篇文章有一点点技术成份,下面把几个相关的API函数提一下:

OpenPrinter  所有的操作都需要先连接打印机,不错,就是用它了。如果执行成功,返回一个与打印名称打印机相应的句柄。

AddForm 这里的Form不是窗体,而是表单,或者可以翻译成形态,也就是纸张的设置。很明显,它的功能就是添加一种纸张。

DeleteForm 删除纸张设置,当然,只能删除自定义的纸张。 

ClosePrinter 用完以后当然得关掉啦。

因为时间关系,不做深入的说明了,有兴趣的人可以来体验。

注意:如果启用了UAC,要用管理员身份启动VS。 

转载于:https://www.cnblogs.com/effun/archive/2012/04/29/custompapersize.html

你可能感兴趣的文章
jquery事件之select选中事件
查看>>
IIS负载均衡之介绍篇:Application Request Route详解
查看>>
-webkit-overflow-scrolling
查看>>
钉钉开发系列(十一)钉钉网页扫码登录
查看>>
什么是ERP
查看>>
linux ./configure 的参数详解
查看>>
Github 上 Star 最多的个人 Spring Boot 开源学习项目
查看>>
企业级大数据平台构建
查看>>
0302作业.
查看>>
关于:target与定位动画的奇怪现象
查看>>
linq
查看>>
css设置height 100%
查看>>
数据结构与算法基本学习笔记(5)
查看>>
【2-SAT】【DFS】【分类讨论】Gym - 101617K - Unsatisfying
查看>>
Eclipse+Tomcat+Ant 小记
查看>>
[转载]ubuntu防火墙设置
查看>>
poj3080
查看>>
java-注释、API之字符串(String)
查看>>
jQuery函数attr()和prop()的区别
查看>>
mysql 查询
查看>>