首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在C#.NET中捕获打印作业

作为云计算领域的专家,我可以为您提供关于如何在C#.NET中捕获打印作业的全面答案。

首先,在C#.NET中捕获打印作业可以使用Windows API函数。可以使用PrintQueue和PrintServer类来访问打印队列和打印服务器。

以下是一些步骤:

  1. 导入必要的命名空间
代码语言:csharp
复制
using System.Printing;
using System.Drawing;
using System.IO;
  1. 创建一个打印作业
代码语言:csharp
复制
PrintDocument pd = new PrintDocument();
pd.PrintPage += new PrintPageEventHandler(PrintDocument_PrintPage);
pd.Print();
  1. 定义一个处理打印作业的函数
代码语言:csharp
复制
private void PrintDocument_PrintPage(object sender, PrintPageEventArgs e)
{
    // 在页面上打印图像数据
    Image image = Image.FromFile("example.jpg");
    e.Graphics.DrawImage(image, 0, 0, image.Width, image.Height);
}
  1. 打印作业队列
代码语言:csharp
复制
PrintQueue pq = new PrintQueue();
pq.AddJob("example.jpg", pd);
pq.Print();

以上代码将创建一个打印作业,并在队列中添加该作业,然后打印队列中的所有作业。

需要注意的是,使用Windows API函数需要使用C#的Windows Forms或WPF应用程序。如果您使用的是Web应用程序,则需要使用其他技术来捕获打印作业。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • HP打印机维修资料大全(续)

    HP打印机维修资料大全(续) EIO x BUFFER OVERFLOW 与PRESS GO TO CONTINUE交替出现 发送给指定插槽(x)中EIO插卡的数据过多。可能在使用不恰当的通讯协议。按[执行]键取消该信息。(数据将丢失。)检查主机配置。如果该信息持续显示,请与HP授权的服务或支持提供者联系。 22 PARALLEL I/O BUFFER OVERFLOW与PRESS GO TO CONTINUE交替出现 发送给并行端口的数据过多。检查是否电缆连接松动,并确保使用高质量电缆。(一些非HP并行电缆可能缺少针连接,或者不符合IEEE-1284标准。)当使用的驱动程序不符合IEEE-1284标准时,会发生本错误。为获得最佳性能,请使用打印机所带的HP驱动程序。按[执行]键清除出错信息。(数据将丢失。)如果该信息持续显示,请与HP授权的服务或支持提供者联系。 22 SERIAL I/O BUFFER OVERFLOW与PRESS GO TO CONTINUE交替出现 发送给串行端口的数据过多。确保打印机控制面板的I/O菜单中选择了正确的串行定步选项。。打印菜单图,校验串行定步项目(从打印机控制面板的I/O菜单中)与计算机的设置匹配。(有关接口设置的更多信息,参见用户手册。)按[执行]键清除出错信息。(数据将丢失。)如果该信息持续显示,请与HP授权的服务或支持提供者联系。 40 BAD SERIAL TRANSMISSION与PRESS GO TO CONTINUE交替出现 打印机从计算机传输数据时发生错误。该错误可能由多种原因导致:打印机在线时计算机开机或关机。网络发生问题(如果适用的话)。打印机的波特率或奇偶校验与计算机的不一致。(波特率告诉打印机信息从计算机传到打印机的速率。)确保打印机与计算机的波特率设置相同。可通过打印机控制面板的I/O菜单访问串行波特率的设置。按[执行]键清除出错信息,并继续打印。 40 EIO x BAD TRANSMISSION与PRESS GO TO CONTINUE交替出现 打印机与指定插槽中的EIO插卡间的连接中断。按[执行]键清除出错信息,并继续打印。 41.3 UNEXPECTED PAPER SIZE 所用纸张尺寸与纸盘设置不一致。确保所有纸盘的尺寸设置正确。纸盘前部显示的尺寸必须与装入纸盘的纸张尺寸相吻合。(打印机将在尺寸设置正确后才继续试打印作业。)如果用纸盘1打印,确保打印机控制面板中的纸张尺寸配置正确。执行以上操作后,按[执行]键。出错的页将自动重印。(或者,可以按[取消作业]健将打印作业从打印机内存中清除。) 41.x PRINTER ERROR与PRESS GO TO CONTINUE交替出现 发生了暂时的打印错误。按[执行]键。出错的页将自动重印。如果该信息持续显示,请与HP授权的服务或支持提供者联系。 50.x FUSER ERROR 发生了内部错误。将打印机关闭后再打开。出错信息可能被清除,然后在传送下个打印作业时又出现。如果该信息持续出现,请与HP授权的服务或支持提供者联系。 51.x or 52.x PRINTER ERROR 发生了暂时打印错误。按[执行]键。出错的页将自动重印。如果该信息持续出现,请与HP授权的服务或支持提供者联系。 53.xy.zz PRINTER ERROR 打印机内存发生问题。将不使用导致出错的DIMM。x、y和zz的数值列举如下:x=DIMM 类型 0=ROM 1=RAMy=设备位置 0=内存(ROM或RAM)1至3= DIMM插槽1、2或3zz=错误号可能需要更换指出的DIMM。关闭打印机,更换导致错误的DIMM。如果该信息持续出现,请与HP授权的服务或支持提供者联系。 55 PRINTER ERROR与PRESS GO TO CONTINUE交替出现 发生暂时打印错误。按[执行]键。出错的页将自动重印。如果该信息持续出现,请与HP授权的服务或支持提供者联系。 56.x, 57.x, 58.x, 59.x PRINTER ERROR 发生了暂时打印错误。关闭打印机,然后再打开。如果该信息持续出现,请与HP授权的服务或支持提供者联系。 62.x PRINTER ERROR 打印机内存发生问题。x的数值指出了问题的位置;0=内存 1至3=DIMM插槽1、2或3可能需要更换指出的DIMM。如果该信息持续出现,请与HP授权的服务或支持提供者联系。 64.x PRINTER ERROR 发生暂时打印错误。关闭打印机,然后再打开。如果该信息持续出现,请与HP授权的服务或支持提供者联系。66.xy.zz INPUT DEVICE FAILURE与CHECK CABLES AND CYCLE POWER交替出现 外部纸张处理设备发生错误。按[执行]键清除该信息。如果信息未清除,将打印机关闭后再打开。如果该信息持续出

    02

    超硬核!苏州同程旅游学长给我的全面的面试知识库

    C#是一种通用编程语言,涵盖了诸如面向对象编程,静态类型化,面向组件的编程,强类型化等各种学科。C#在ASP.NET框架中广泛用于创建网站,Web应用程序和游戏。世界各地的C#编程都有巨大的机会。如果您想在C#编程中谋求一份职业,则需要进行一次面试,在其中会向您询问以下几个C#基本面试问题和解答。 这是C#面试问题和答案的精选列表,在面试过程中可能会提出这些问题。根据他们的经验和其他各种因素,可能会向候选人询问基本的C#面试问题,以提高C#.NET面试的水平。此列表涵盖了所有针对新生的C#问题以及针对经验丰富的应聘者的C#面试问题和答案。

    02

    SpoolFool:Windows Print Spooler 权限提升 (CVE-2022-21999)

    早在 2020 年 5 月,微软就修复了一个 Windows Print Spooler 权限提升漏洞。该漏洞的编号为 CVE-2020–1048,微软承认 SafeBreach Labs 的 Peleg Hadar 和 Tomer Bar 报告了该安全问题。在补丁发布的同一天,Yarden Shafir和Alex Ionescu发表了关于该漏洞的技术文章。本质上,用户可以通过创建指向磁盘上文件的打印机端口来写入任意文件。在修补漏洞 (CVE-2020–1048) 后,Print Spooler 现在将在添加端口之前检查用户是否有权创建或写入文件。补丁和博文发布一周后,Paolo Stagno(又名 VoidSec)私下向微软披露了 CVE-2020–1048 的绕过方法。该绕过在三个月后的 2020 年 8 月得到修补,微软承认有八个独立实体报告了该漏洞,该漏洞被确定为 CVE-2020-1337。该漏洞的绕过使用目录连接(符号链接)来规避安全检查。假设用户创建了目录C:\MyFolder\并配置了一个打印机端口以指向该文件C:\MyFolder\Port。该操作将被授予,因为确实允许用户创建C:\MyFolder\Port. 现在,如果用户随后变成C:\MyFolder\指向C:\Windows\System32\创建端口之后的目录连接会发生什么?好吧,Spooler 会简单地写入文件C:\Windows\System32\Port。

    03

    [答疑]作业单打印和发放的责任分配

    潘老师,有个批量操作的问题我想不太清楚,想请教一下。用户在打印作业单时通常都是一次批量打印的。分析阶段不考虑时间与空间因素,所以在类图上我画的打印事件与作业单是一对多关系(一次打印多个作业单)。在彩色建模画分析序列图的套路中,单个作业单收到领域事件“打印”,请求“部件”执行打印规则,然后作业单创建“打印”对象(保存),最后作业单自己改变状态。循环这一过程直到所有作业单打印完成。但这样一来,每个作业单都创建了一个打印对象,与我画的类图一对多关系矛盾了。假设类图是对的,那序列图中的“打印”对象由作业单来创建是否就不合适了?如果是那该由谁来创建呢?如果是控制类,我记得它只分配责任不具体执行的。假如序列图是对的,那作业单与打印就是一对一关系,这与实际情况在理解上感觉又有点矛盾

    02

    WINCC通过生产批次名称来进行批次数据过滤查询的组态编程方法

    1 <概述> <在一些行业的生产过程中,产品按照批次进行生产。WinCC 在批次生产过程中会对一些生产数据进行归档,以便于后期对批次生产进行分析或者追溯。WinCC 提供了数据归档的功能,并且还可以通过多种方式将归档数据查询出来进行呈现。例如通过 OnlineTrendControl 显示历史趋势,通过 OnlineTableControl 显示历史数据。也可以通过报表打印的方式输出到打印机或者报表文件。但是在使用 WinCC OnlineTrendControl 以OnlineTableControl 时,对于数据的过滤查询只能根据时间进行。这就给这种希望根据批次名称进行批次数据查询的应用带来了一些不便。为了解决这个问题,本文将介绍如何能够通过生产批次名称来进行批次数据过滤查询的组态编程方法。 1.1 <实现原理> <首先明确应用需求的重点是希望根据批次名称进行历史数据的查询。那么也就意味着只要能够在 WinCC 中归档批次名称的同时,将该批次的开始生产时间以及结束生产时间与批次名称一同进行归档。当选择了需要查询的批次名称的时候也就能够获取到该批次的生产起始以及结束时间,再根据这两个时间即可过滤查询出该批次生 产过程中归档的所有历史数据。 1.2 <测试环境> <本文中的功能实现所使用 WinCC 版本为 V7.5 SP1 亚洲版。操作系统为 Windows 10 Pro Version 1803(64-Bit)>

    01

    研究团队利用算法实现3D打印“防抖”功能,大大缩短打印时间 | 黑科技

    研究人员希望这一算法可以作为固件用于各种打印机,以帮助提升打印机的速度。 目前,除了一些很小的简单物品,用3D打印机打印物品都需要很长时间,最近,密歇根大学的研究员Chinedum Okwudire及其团队研制出了一种新型算法,该算法可以大大缩短打印时间,而且不会让打印机有额外的耗损,也无需打印机进行硬件升级。 首先,我们先来了解一下为什么3D打印机打印速度慢? 现有的3D打印机存在工作速度越快,震动幅度就越大的问题。其中消费级的打印机因为是采用轻质、灵活、廉价的材料制作而成,所以这一问题会更加明显。而正是

    00

    疫情下上海网课的新实验:科技正让线上教学“进化”成线上教育

    在最近两个月的疫情中,上海的在线教学也经历了一场大考。期间,上海各级学校的老师们积极利用信息化工具,将线上教学过程数字化,完成了网课、作业、评测和辅导等关键教学环节的线上闭环,让线上教学逐步向线上教育进化发展。 5月9日,腾讯教育举办上海市云端精准教学案例分享会,邀请全国教育学会理事、上海教育学会副会长、小学教育管理专业委员会主任卞松泉(图左三)以及来自上海市宝山区宝虹小学、上海外国语大学松江外国语学校的优秀教师们共同探讨线上教育的新趋势,并分享如何利用腾讯作业君、墨水屏等信息化工具,推动上海市从应急式的网

    02

    C#常用 API函数大全[通俗易懂]

    WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同一个网络资源的连接 WNetCancelConnection 结束一个网络连接 WNetCancelConnection2 结束一个网络连接 WNetCloseEnum 结束一次枚举操作 WNetConnectionDialog 启动一个标准对话框,以便建立同网络资源的连接 WNetDisconnectDialog 启动一个标准对话框,以便断开同网络资源的连接 WNetEnumResource 枚举网络资源 WNetGetConnection 获取本地或已连接的一个资源的网络名称 WNetGetLastError 获取网络错误的扩展错误信息 WNetGetUniversalName 获取网络中一个文件的远程名称以及/或者UNC(统一命名规范)名称 WNetGetUser 获取一个网络资源用以连接的名字 WNetOpenEnum 启动对网络资源进行枚举的过程

    04

    VC++编写ActiveX控件

    暑假在做一个项目的时候,本来是用C#.NET来写的一个港口进出闸的流程控制程序,里面涉及一个响应用PLC的采集信息的问题(PLC用串口和工控机相连接),然后思考如何用C#写串口通讯程序,结果师兄在一旁直接用VC++写了一个“*.ocx控件”,并在自己的电脑上进行了测试,完工后就把生成的“*.ocx”控件注册文件复制到了我们的电脑上。我们就在C#.NET程序里面将此控件拖入到主窗口中,然后就能直接利用此控件的事件来捕捉PLC的命令了,感觉好神奇。然后,我对C++的态度有了极大的转变,以前只知道C++写窗口程序是多么麻烦啊(远不如C#.NET来得快和直接),而它的所谓“比较底层,和底层操作系统的关系比C#这些高级语言要密切很多”的好处一直都没有体会到,现在才知道,正是因为C++比较底层,比较基础,所以它可以开发出很多和语言无关的公用程序块,如dll动态链接库和COM组件,原则上,只要你的Windows的系统,用VC++开发出来的这些公用程序块就能被任何语言调用(如果不用MFC框架,而用ATL框架来编写,甚至还可以脱离Windwos系统,不仅仅实现跨语言,甚至跨平台调用,这个笔者就没有仔细研究了)。

    03
    领券