让低版本的office支持将文档打印成图片的工具,ImagePrinter可以将文档“打印(虚拟打印)”成BMP、PNG、JPG、PDF等格式的文件,安装后会成为系统的默认打印机。「ImagePrinter」的体积只有900多KB

安装时问你是否安装驱动程序,选择“是”

虚拟打印机有三种定制方法:

1、驱动层(Driver)一种。好像是修改Render plug-in什么的。没做过。

2、打印假脱机(splooer)层两种。

(1)自定义打印处理器(PrintProcessor),一般是修改DDK中genprint的例子。将自定义的代码加入到PrintDocumentOnPrintProcessor中。

(2)在监视(Monitor)层。

打印假脱机(splooer)层两种的两种实现方法驱动层一般都用微软统一驱动程序(UniDrv)。

通过打印测试页可以了解安装的打印驱动的各个方面:驱动程序、端口等。也可以通过打印机的属性查看。

ImagePrinter是用的自定义端口的形式实现虚拟打印。

虚拟打印机驱动ImagePrinter的开发:

ImagePrinter是在Port监视器端的虚拟打印机。

(1)在系统开机时,顺序调用以下函数:DllMain--->InitializePrintMonitor--->iEnumPorts(2次,后一次参数都是NULL)--->iOpenPort;

(2)在打印文档时,顺序调用以下函数:iStartDocPort--->iWritePort(很多次)--->iEndDocPort。

以下是DDK的翻译(根据对代码的理解,有删减):

(1)初始化打印监视器

当spooler调用LoadLibrary来加载的打印监视器DLL,系统立即调用DLL的DllEntryPoint函数。可以在此时LisableThreadLibraryCalls,这样创建和删除线程时,不必非得这个通知DLL。

每一个DLL都导出一个初始化函数,可以供spooler在调用LoadLibrary后调用。Language monitor DLL和port monitor server DLL导出InitializePrintMonitor2函数。port monitor UI DLL的导出InitializePrintMonitorUI函数。(总共有3中Monitor)。

这两个初始化函数的作用是返回其他函数(EnumPorts,OpenPort,StartDocPort等所有以下用的函数)的指针,这样spooler就可以调用它们了。初始化函数也可以执行load time的初始化操作。

InitializePrintMonitor2函数返回一个监视器实例句柄。monitor应分配本地内存来存储自定义的一些信息,并以此句柄为标识来分配内存。

当spooler第一次启动时(一般是开机时,如果你开机启动了spooler服务的话),它会载入所有已安装的monitor DLL的。所有Monitor的初始化函数调用后,打印后台处理程序调用每个port monitor的EnumPorts函数,其中列举了monitor支持的端口。monitor支持一个端口,如果端口已被添加到monitor的数据库。然后打开每个支持的端口。

(2)打开和关闭端口

spooler 通过调用language monitor的OpenPortEx函数打开端口;相对应的Port monitor调用OpenPort函数,language monitor只返回从Port monitor的OpenPort获得的句柄。如果没有language monitor,就直接调Port monitor的OpenPort函数。打开一个端口后不关闭的话,不能再打开。

端口一经打开,打印后台处理程序就可以调用其他函数来打印作业了。这些函数使用OpenPort返回的句柄作为输入。什么时候端口关闭呢:系统关机,没打印任务....

(3)打印打印作业

每个打印作业以StartDocPort开始,以EndDocPort结束。当print processor 调用的spooler的StartDocPrinter EndDocPrinter的函数时,这两个函数被调用。在这两个函数调用中间,不定量的WritePort, ReadPort, and GetPrinterDataFromPort函数被调用。

这些函数都需要用到OpenPortEx(或OpenPort)返回的句柄( port handle)作为输入参数。

当spooler调用language monitor 的WritePort函数,以将数据流发送到端口时,这些函数一般只增加一些特定的语言信息到接收到的数据流上,如PJL命令然后将它传递给相关的port monitor的WritePort功能。

ReadPort函数是用于获取双向打印机硬件的状态信息。Language monitor 通过调用SetPort将信息发送到spooler,获得状态信息。spooler不能调用ReadPort的函数。

如果打印硬件是双向的,language monitor和port monitor 都应该实现GetPrinterDataFromPort函数。language monitor的GetPrinterDataFromPort函数以注册表值的名称为输入,获得该名称的值(通常由调用相关的端口监视器的WritePort和ReadPort功能),并返回值给调用者。port monitor 的GetPrinterDataFromPort函数应该接受一个I / O控制代码作为输入,调用DeviceIoControl返回控制代码给port driver,并返回结果。

php_printer.dll 打印 jpg 图片,文档打印成图片(ImagePrinter)相关推荐

  1. pdf文档转化成图片

    代码如下: using System.Configuration; using System.Drawing; using System.IO; using System.Runtime.Intero ...

  2. java word导出图片格式_用java怎么将word文档转成图片格式

    展开全部 使用 java 操作 openoffice 实现格式转换 辛苦了几天. 不敢独享成果 首先,要安装 openoffice (废话- -) 创建JAVA项目的时候 需要323131333532 ...

  3. jxr怎么变成jpg_怎么将DWG文档转成图片格式

    用Auto CAD时想要将CAD图形转换成jpg其实很简单,CAD可以直接输出BMP格式的图像,再用画图工具转换一下就可以了.这样做会比窗口截图要清晰的多,接下来小编教大家怎么做. 方法/步骤 1 首 ...

  4. java 把pdf图片文档和文章文档转成文字的方法(此方法不好用,转换成文字可以,转成pdf不行)

    java 提供了一些库和工具可以用来把 PDF 文档和图片文档转成文本. Apache PDFBox:这是一个开源的 PDF 库,可以用来提取 PDF 文件中的文本内容. iText:这是一个用于创建 ...

  5. 【方法】PDF文档可以转图片吗?如何操作?

    需要把PDF文档转换成图片,你会怎么做呢? 有些小伙伴可能会直接截图保存,确实是一个快捷的方法,但这种方法容易造成图片质量的损失,也可能遇到无法截图整个页面的情况,或者文档页面多,截图耗费很多时间. ...

  6. doPDF虚拟打印机-把任何文档转换成pdf的利器

    doPDF是一个完全免费的软件,安装完成之后,它会化身为系统中的虚拟打印机.不管是什么格式的文档还是图片,只要能够被打印,就可以轻松被转换成pdf文档,从此扫描仪的使用频率会大大降低,除了节省之间之外 ...

  7. word doc怎么显示base64图片_win10系统word文档打印不出图片怎么办

    word文档帮助用户更好排版和保存文字,白领都经常用到此软件,可以说是电脑必不可少的一款办公软件.Win10系统编辑好Word文档后准备打印,发现在打印预览里也没有图片 ,真实打印word文档也没图片 ...

  8. html虚拟打印转为pdf,Doro PDF Writer 虚拟打印机 – 可将任何格式图片/文档/文件转换成 PDF格式...

    在办公领域经常要用到 PDF 格式文档,因此常常有图片.表格.Word 等各种不同格式的文档转换成 PDF 格式的需求.虽然网上有很多在线转换网站或 PDF 转换软件,不过今天推荐的是通用性更强的软件 ...

  9. xps文档打印后winform界面文字丢失

    xps文档打印后winform界面文字丢失 原文:xps文档打印后winform界面文字丢失 最近做的xps文档打印功能,绝对的一波三折,一开始开发的时候,始终用的是xps writer 虚拟打印机, ...

最新文章

  1. VS如何将核心函数封装成dll、lib,并供给第三方调用?
  2. 对于C#里面的this与base
  3. 外部导入方式添加背景图_在PS中如何添加灯光效果
  4. linux 下ab压力测试
  5. 设计模式(三):观察者模式与发布/订阅模式区别
  6. CF1088F Ehab and a weird weight formula(树上最优性问题、贪心+倍增)
  7. Linux C 函数指针应用---回调函数
  8. Git版本控制:Git查阅、撤销文件修改和撤销文件追踪
  9. date java format_java-DateFormat
  10. uniapp项目使用mescroll中mescroll-body组件记录
  11. 真正福建电信笔试题(专业对口请进)(转载)
  12. 高斯光强matlab,光强分布MATLAB
  13. Java 入门 之 无法解析包
  14. 2020美容师(初级)考试及美容师(初级)证考试
  15. PMP学习群沙龙+抽奖活动
  16. HTML5网页设计基础——音乐盒的制作
  17. 混合式开发APP项目——幸福到App
  18. mysql连接 xorm_golang 使用xorm操作mysql
  19. Android之BroadcastReceiver使用
  20. 【PHP】走进 PHP 第一课 PHP 介绍 环境安装

热门文章

  1. 互联网公司的手机梦为什么总是破灭?
  2. 2022 IDC报告出炉 思腾合力一举拿下全国服务器市场双项榜单
  3. 为什么JDK 1.8中不再有永久代(permanent generation)
  4. 谷歌TPU研究论文:专注神经网络专用处理器
  5. Instagram 5位传奇工程师背后的技术揭秘(PPT)
  6. 大数据项目之数据采集总结(三)
  7. 《我在风衣里藏了把刀》—— 转
  8. 《C语言程序设计》课程建设标准,《C语言程序设计》精品课程建设刍议
  9. 天龙八部ol卡彩色名字分析
  10. 学生教育云平台登录入口_国家中小学网络云平台登录入口_国家中小学网络云平台网...