Windows虚拟打印与打印体系结构简析
从全局架构的角度分析一下,Windows打印体系和打印机驱动的关系。
下面是Windows打印体系结构图:
带方框的部分都是可以编写安装的。
所谓的微软统一驱动,就是系统默认的驱动,而迷你驱动就是在此基础上进行个性化定制。
迷你驱动包括GPD文件和资源DLL,GPD文件就是一个脚本,定义了“打印机首选项”中将出现那些设置,有哪些选项可选,资源DLL就是一个仅仅包含Resource的DLL,提供给GPD使用其中的资源。
- 打印处理器负责SPL文件操作 EMF/RAW 文件操作等
- Render-Plugin则可以对渲染绘制过程进行特殊的处理
- UI-Plugin 就是在“打印机首选项”中定义一些特殊的设置页面
因此,虚拟打印机有两种方式可以实现:
第一种,在打印处理器中做手脚,截取SPL缓冲文件,解析分解成EMF文件
第二种,在Render-Plugin中做处理,在进行图形渲染的时候将图像绘制到其他地方,例如一个BMP文件。
下面是Windows 打印体系结构MFC示例代码
1.获得打印机设备描述表
应用程序使用默认的打印机,则使用下面方法来创建设备描述表。
CDC dc;
CPrintDialog dlg(FALSE);
dlg.GetDefaults();
dc.Attach(dlg.GetPrinterDC);
2.标记打印开始
DOCINFO di;
::ZeroMemory(&di, sizeof(DOCINFO));
di.cbSize = sizeof(DOCINFO);
di.lpszDocName = _T("Budget Figures for the Current Fiscall Year");
dc.StarDco(&di):
3.打印
for(int i = 0; i <= nPageCount; i++)
{
dc.StartPage();
//
//Print page i
//
dc.EndPage();
}
4.结束打印
dc.EndDoc();
if(dc.StartDco(&di))
{
BOOL bContinue = TRUE;
for(int i = 1; i <= nPageCount && bContinue; i++)
{
dc.StartPage();
//initialize the device context
//print page i;
if(dc.EndPage() <= 0)
bContinue = FALSE;
}
if(bContinue)
dc.EndDoc();
else
dc.AbortDoc();
}
版权声明:
作者:驱动外包
链接:http://www.51qudong.net/59.html
来源:算法优化_驱动外包_直播算法优化_MAC驱动开发_Linux驱动开发_usb驱动移植外包
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论