首页 > 其他分享 >打印机驱动的模式问题 看到别人说的 记录一下 感觉还是很有启发的

打印机驱动的模式问题 看到别人说的 记录一下 感觉还是很有启发的

时间:2023-01-28 12:09:07浏览次数:48  
标签:打印机 printer 回放 windows dll 驱动 processor 启发


想弄出每页的图片的话,大概有三个办法:

投机取巧的办法,属于野路子的,用GPD去定制unidrv.dll,生成一个实际上无任何用的打印机驱动(当然你可以把自己的printer processor附加到别的已安装的打印机驱动上去),这个驱动就是配合安装print processor,让windows可以通过它去产生脱机文件(光有printer processor是无法让windows生成spool文件的);再修改genprint,在里面解析spool file拿到每页的EMF图片,EMF图片是矢量图,体积小,适合在任何显示设备上回放,不过这样因为那个GPD打印机驱动是个样子货,记得windows偶尔会弹出文件无法打印之类的提示。这个代码量最小。

第二个办法,如果只要JPG/BMP之类的,记得可以通过编写Unidrv rendering plugin(例子大概是在ddk的oemui目录),抓取surface内容保存为JPG来实现,不过记得因为surface上的是一副位图,所以你无法保存成矢量图了,而且在不同的设备上回放效果可能有区别;

第三个办法,也是最复杂最正规但是功能最强大的,就是自己从头实现一个printer graphic dll,不借助unidrv,自己实现所有的GRE/DDI接口,不过这里你不需要做太复杂的操作,就是记录下GRE的每个回放动作,保存为自己定义的格式的文件,这个文件虽然记录了一系列的GDI操作,但是显然windows是不认的,所以你要再提供一套库函数,去解析回放每个动作。这个办法的好处是你可以(1)拿到另外一台windows机器上回放每一页效果不会有差别,因为本质上你保存的是GDI操作(2)你可以在回放的同时做页面操作如加水印合并页面等然后再输出到物理打印机(3)兼容性最好,缺点是代码量比较大,要花一点时间去熟悉DDI和printer graphic dll的结构。

标签:打印机,printer,回放,windows,dll,驱动,processor,启发
From: https://blog.51cto.com/u_15307523/6024869

相关文章

  • 浅谈树上启发式合并(Dsu on tree)
    树上启发式合并树上启发式合并(Dsuontree),是一个解决树上离线问题的有力算法,一般的复杂度是\(\mathcalO(n\logn)\)(假定转移可以\(\mathcalO(1)\)解决),时间复杂度相比......
  • WPF的MVVM的数据驱动学习示例
    项目结构  界面数据绑定<Windowx:Class="WpfApp1.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="h......
  • 消息驱动(SpringCloud Stream)
    前言什么是消息驱动?屏蔽底层消息中间件的差异,降低切换成本,统一消息的编程模型官网:​​https://spring.io/projects/spring-cloud-stream#overview​​​​https://cloud.s......
  • 插入单片机,电脑没反应,安装CH340也没用,之前误删了几个驱动,现在回不去了
    提问:遇到问题:插入单片机,USB接口没反应,之前在其他设备那误删了一下东西(泪奔)试着解决:安装了ch340,安装成功了,但是设备管理器没有显示,串口也有感叹号解答:可能的原因是设......
  • 【Reactor模型】事件驱动模型 - Reactor模型简述
    模型演进抛出一个问题:线程怎样才能高效地处理多个连接的业务?当一个连接对应一个线程时,线程一般采用[read->业务处理->send]的处理流程,如果当前连接没有数据可读,那么线程......
  • KlipperPad 安装精简优化版 Windows10 教程(完美驱动)
    前言本文针对思兼的KlipperPad,介绍如何安装Windows10精简优化版操作系统。一、使用品铂原版系统操作系统链接:http://pipo.cn/index.php?m=About&a=gujian_show&id=......
  • 使用Knative事件驱动组件解耦服务依赖
    1部署一个Knative事件驱动应用通过以下9个步骤完成一个完整的Knative事件驱动应用的部署与验证。1)下载官方示例代码:$gitclone-b"release-0.16"https://github.com/......
  • Knative的事件驱动组件Eventing
    KnativeEventing是Knative平台的通用事件驱动组件,它实现了云原生应用开发对事件驱动的通用需求,同时还提供了一组可组合的原语,实现了事件源和消费者之间的延迟绑定。Knati......
  • I2C总线式驱动开发
    一、I2C总线背景知识SOC芯片平台的外设分为:一级外设:外设控制器集成在SOC芯片内部二级外设:外设控制器由另一块芯片负责,通过一些通讯总线与SOC芯片相连  Inter-Integr......
  • 嵌入式Linux驱动程序开发基本概念和方法
    系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是......