精华内容
下载资源
问答
  • pdf虚拟打印机驱动96dpi Excel中普通视图与打印预览内容显示不一致的解决方法工具
  • XPS虚拟打印机 驱动(Microsoft XPS Document Writer)

    千次下载 热门讨论 2014-05-23 10:42:18
    Microsoft XPS Document Writer 即:XPS虚拟打印机 软件开发打印测试的必备工具。 突然发现不能用了,缺少驱动什么的,删除了,没法再安装了。网上找了半天,得解,有人竟然要8分,做人要厚道,我只要1分。 适用...
  • 一个虚拟打印机驱动,可在基础上做二次开发,非常不错的源码-A virtual printer driver, can be done on the basis of secondary development, a very good source ~~~~~~~
  • 虚拟打印机驱动

    2013-01-10 10:54:34
    虚拟打印机 win7 xp可用 内有注册码,可打印成图片、pdf等
  • 虚拟打印机驱动

    2014-10-24 15:47:43
    虚拟打印机驱动
  • VipRiser是一款可扩展的Mac虚拟PDF打印机驱动程序,它可以帮助用户打印PDF文件,并提供友好的用户界面,同时还可以将这些文件共享到网络。 软件特点:友好的用户界面 完全可定制使用的Automator插件 支持AppleScript...
  • pdf虚拟打印机

    2018-01-02 14:20:03
    PDF虚拟打印机是一款操作简单、功能强大的PDF打印机软件。软件通过虚拟打印的方式,可快速将doc、txt、jpg等多种格式文档输出为PDF格式文件,帮助用户轻松解决文档转换难题。
  • 从Adobe Acrobat 9 PR分离出来的Adobe PDF 虚拟打印机绿色版,本人亲自安装过正常使用! 网上别的安装包和绿色版好多是不成功的,至少本人是没有遇到过。
  • 虚拟打印机源代码

    2016-11-15 10:47:26
    开源的虚拟打印机源码,共享出来大家一起学习
  • linux系统中通用打印机系统的实现源代码,通过631端口监听打印请求,电脑可以作为打印服务器。
  • 此Microsoft XPS 虚拟打印机共4个文件,自行安装使用于自己系统的XPS虚拟打印机, XPS虚拟打印机支持32位及64位的Windows Server 2003, Windows Vista, Windows XP
  • 虚拟打印机驱动源码(C DDK)

    热门讨论 2011-01-19 10:37:05
    虚拟打印机 驱动 源码 DDK 直接可用的,新手必看.
  • 一款不错的虚拟打印机软件,含注册码,兼容WIN10,可将各种格式的文件打印成一个PDF文件;
  • 安装pdf虚拟打印机驱动失败的解决办法(addprinterdriver找不到指定模块).docx
  • BullZip PDF Printer是一款虚拟打印机驱动程序,让你可以转换任何可打印的文档或者图像为PDF格式.该软件适用于所有提供了一个打印选项的应用软件,只需要简单地选择最近添加的BullZip PDF Printer而取代你通常使用的...
  • ImagePrinter是在Port监视器端的虚拟打印机。 (1)在系统开机时,顺序调用以下函数:DllMain--->InitializePrintMonitor--->iEnumPorts(2次,后一次参数都是NULL)--->iOpenPort; (2)在打印文档时,顺序调用...

    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,并返回结果。

    展开全文
  • 虚拟打印机开发.pdf

    2020-01-10 14:40:50
    虚拟打印机开发教程,指导Windows环境下如何开发一个完整的虚拟打印机,包含有驱动、配置等多个方面的知识,
  • TIF虚拟打印机

    2019-03-19 16:25:52
    TIF虚拟打印机,打开TIF文件。
  • WINDOWS下虚拟打印机驱动程序 完整源代码实现
  • 原创:个人学习虚拟打印机过程的总结,提供初学者快速入门通道
  • 虚拟打印机,福昕阅读器完美版,阅读器完美
  • 虚拟打印机源码+v1.0(完整源码)-C%2B%2B+build.rar
  • 讲解如何开发虚拟打印机的文档,有原理有实践,图文并茂,一共17页,百度上要5个下载券
  • 用于生成PDF文件的虚拟打印机,速度很快。汉化破解版
  • 由于项目需要在windwos系统中添加多台虚拟打印机(能够正常打印出纸),查找了一下系统函数。  使用 rundll32 printui.dll,PrintUIEntry,在CMD中运行,在弹出框中得到以下提示。  用法: rundll32 printui.dll,...
  • 虚拟打印机开发一

    千次阅读 2016-02-12 15:25:30
    由于需要研究开发虚拟打印机,以前没接触过...从需求出发,我们的目的是在电脑上提供一个虚拟打印机,然后让用户选择这个虚拟机打印时产生的中间文件被拦截下来,之后进行进一步处理后在执行真实的打印。 Window...

    由于需要研究开发虚拟打印机,以前没接触过相关打印机方面的知识,所以上网找了些资料,发现不少好文章,特来转载收藏下,本文转载http://www.cnblogs.com/monotone/,喜欢的朋友可以到原网站观看。

     

    需求

    从需求出发,我们的目的是在电脑上提供一个虚拟打印机,然后让用户选择这个虚拟机打印时产生的中间文件被拦截下来,之后进行进一步处理后在执行真实的打印。

    Windows打印体系

    首先附上查找Windows打印相关内容的链接,这个分类下包含了Windows打印的方方面面

    https://msdn.microsoft.com/en-us/library/windows/hardware/ff561035(v=vs.85).aspx

    Windows2000以后的打印体系结构都是由一个打印机假脱机程序(Spooler)和一系列的打印驱动组成。应用程序通过调用设备无关的函数,就能创建打印任务,并发送到打印设备中。包括激光打印机、矢量绘图机、光栅打印机和传真机。

    其中打印驱动包括一个渲染组件和一个配置组件。

    渲染组件负责将应用程序传来的每一页的绘制命令(GDI命令)转换成打印机用来渲染的命令数据(打印机才能识别的命令)发送到打印机中。

    配置组件又包含一个可以让用户进行打选项配置的用户接口组件和一个将打印机的配置和特征传递给应用程序的程序接口。

    当GDI程序执行打印时,通过调用API来传递GDI绘图指令到绘图引擎,绘图引擎要么和打印驱动一起合作来缓存这些绘制指定到一个EMF文件中,要么直接渲染成一个可打印的图片发送到spooler中。Spooler解释EMF文件,并将页面布局和作业控制指令信息插入到数据流中,然后发送这些数据里到序列化、并行化或者网络形式的打印机关联的端口上。(XPS设备会有一点不同,这里不进行介绍)。

    由于Spooler和打印驱动都是可以被单独取代,所以硬件厂商们可以很容易的增加对新硬件的支持。当需要增加对新款打印机的支持时,通常只需要创建根据微软所提供的打印驱动类型中相关联的数据类型就可以了。

    下图是Windows提供的内置打印驱动程序:

    image

     

    大致了解了Windows打印体系组成之后,来分别看一下Spooler和打印驱动。

    Spooler

    从Windows2000开始,打印假脱机程序由一系列的微软提供的和可选的渲染组件组成,他们的作用包括:

    1、检测是否打印任务是在本地处理还是跨网络处理。

    2、接受GDI和打印驱动为特定类型的打印机所提供的数据流。

    3、缓冲绘制数据到文件中。

    4、从逻辑打印队列中选出第一个有效的物理打印机。

    5、将缓冲的数据流(如EMF)转换成能呗打印机硬件所识别的格式(如PCL)。

    6、发送打印数据流到打印机硬件中。

    7、为假脱机组件和打印机的相关信息维护一个基于注册表的数据库

     

    Spooler主要组成结构如下图所示:

    image

    Application通过调用GDI函数来创建打印任务,通过调用Winspool.drv提供的API接口,将打印内容路由到PrintProvider中。

    PrintProvider负责管理本地打印和远程打印,同时要管理打印任务堆里的启动、停止和枚举打印队列。

    我们这里只讨论本地打印流程,它提供了下面的能力:

    1、打印任务缓冲和解析到打印队列

    2、为Win2000以后的操作系统的打印驱动体系提供支持。

    3、为厂商提供的打印处理器的提供支持

    4、为场上提供的打印监视器的提供支持

    下图提供了本地打印任务处理流程:

    imageimage

    如图所示,应用程序通过GDI接口创建打印任务后,不管是否需要输出为EMF,本地的PrintProvider任务创建API都会创建一个spool文件。然后,当任务被调度的时候,通过读取这个spool文件,如果是EMF格式的话,就让EMF打印处理器配合打印机的渲染驱动,将打印任务发送回去给GDI转换成RAW格式,最后和没有使用EMF格式的任务一样,将数据流传递到端口监视器中执行最终打印。

    我们通过定制自己的打印机,让整个打印流程走如上图中红线描述的路径,在打印处理器这一层拦截spool文件及其相关打印信息,来保留整个打印任务的相关数据,等待后续进行处理。

    Printer Driver

    Windows提供了三种类型的打印驱动,分别为:Universal Printer Driver、PostScript Printer Driver、Plotter Driver。原则上来说这三种类型的驱动已经能支持大多数打印机了,我们只需要简单的为新的打印机提供对应驱动的DataFile即可。我们这里只讨论Universal Printer Driver。

    Universal Printer Driver由三部分组成:

    1、Printer Graphics DLL: 负责和GDI一起渲染打印任务,并发送渲染数据流到打印假脱机程序中。

    2、Printer Interface DLL: 提供打印机参数配置接口和假脱机能调用的用于通知打印系统事件的接口。

    3、Printer Data Files:对于Universal Printer Driver而言,这个数据文件就是GPD文件,它用于创建UnidrvMiniDrivers,主要用于描述打印机的可选项配置。包括打印机属性、相关命令、特征、可选项、字体描述、环境状态等。

    上面三个模块对应的就是下图中红色矩形框住的部分。

    image

    由于我们不需要对打印渲染和用户接口做过多的定制,只需要使用标准的Windows打印首选项对话框,所以无需自定义渲染插件和用户接口插件。当然如果需要的话,也是能在https://msdn.microsoft.com/zh-cn/library/windows/hardware/ff547298(v=vs.85).aspx中找到这些插件重定义的方式。

    根据需求,我们只需要自己定制GPD文件,来实现对系统标准的打印机首选项对话框相关设置的定制。(这种方式应该就是UnidrvMiniDrivers)。

    解决方案

    综上所述,我们的虚拟打印机要自己定制的模块就只有打印处理器和GPD文件。

    打印处理器负责拦截打印生成的中间文件,GPD文件负责定制打印可选项。

    打印处理器定制文档:https://msdn.microsoft.com/zh-cn/library/windows/hardware/ff563807(v=vs.85).aspx

    GPD文件说明文档:https://msdn.microsoft.com/zh-cn/library/windows/hardware/ff551750(v=vs.85).aspx

    打印处理器

    WDK提供了支持相关示例,我们在这个示例的基础上直接更改,主要要更改的地方是在winprint.cpp中,PrintDocumentOnPrintProcessor函数的实现中。我们可以看到打印处理器对一个打印任务的处理流程如下:image

    由于我们这里的目的是拦截打印任务产生的中间文件保存下来,所以只需要调用GDI Functions in Print Processors,缓存好spool文件后直接返回(阻止传递数据流到spooler中去)。

    GPD文件

    前面介绍了,GPD文件是使用GPD语言去描述一台打印机,也就是说GPD文件有自己固定的格式,对应GPD语言也有固定的语法,其中主要包括下列信息:

    1、Printer attributes: 描述打印机特征

    2、Printer commands: 用于控制打印机的操作

    3、Printer features: 描述能被通用打印驱动所控制的能力

    4、Printer options: 呈现能用来设置Printer features值的状态。

    5、Printer font descriptions :描述和硬件相关连的字体

    6、Conditional statements: 描述Printer attributes 和 打印机的配置之间的依赖关系。

    此外,GPD语言也定义了一些用来控制一些操作的GPD文件设置,这种操作我们暂不需要。

     

    根据上面的描述,要完全自定义一个GPD文件相对来说是比较困难的,这里我们可以通过参考其他打印机中有使用GPD文件的部分,或者参考WDK目录下\src\print\mini中的GPD文件示例。然后根据需要去修改相应的部分更加简单。

    我这里只对自己所理解的部分进行阐述,更详细的信息请参考MSDN。

    首先GPD文件中最基本的值设置格式Entries,其格式为:image

    其中的EntryName都是GPD解析器预定义好的关键字(不然GPD解析器无法识别你写这么个关键字是要做什么),而EntryValue则只能是GPD所支持的值类型中的一种(不然GPD解析器无法判断你这个关键字对应的内容正不正确)。关于类型,请自行参考https://msdn.microsoft.com/zh-cn/library/windows/hardware/ff550568(v=vs.85).aspx

     

    下面拿我们的GPD文件作为参考进行描述。


    image

    如图所示,对于这种*AttributeName:AttributeValue格式的文本,都是前面描述的Printer Attribute,其中放在文件头部,又更细分为Root-Level-Only Attributes,其各部分含义可参见https://msdn.microsoft.com/zh-cn/library/windows/hardware/ff561989(v=vs.85).aspx


    image

    如图所示,上面*%的部分都是注释,后面的Attribute,则是细分在Printer Capability Attributes下的一些属性,详细描述参见https://msdn.microsoft.com/zh-cn/library/windows/hardware/ff560780(v=vs.85).aspx


     

    image

    如图所示,形如*Command:CommandName{CommandAttributes}的内容,则属于Printer Commands。前面描述过这类型是用于控制打印机的操作,其中CommandName都是预定义的命令名,具体这些命令名称的含义,参见https://msdn.microsoft.com/zh-cn/library/windows/hardware/ff546117(v=vs.85).aspx中各类别的描述。


    image

    如图所示,形如*Feature:FeatureName{FeatureAttributes}的内容,描述的便是我们打印机所提供的打印选项功能。Feature又分为标准类型和自定义类型,当然我们只需要提供标准的特征,所支持的标准特种参见https://msdn.microsoft.com/zh-cn/library/windows/hardware/ff562697(v=vs.85).aspx,如截图中所示即为标准特征中允许选择纸张方向的特征,这里不仅仅描述了这个特征的说明,而且描述了这个特征是不是必须的和支不支持自定义选项。image

    需要说明的是*rcNameID这个属性段,表述的是对应特征(或者可选项)显示在界面上的内容的ID,MSDN上也描述了可以使用*Name来直接指定内容。但是我们不需要自己指定。Unidrv驱动提供的stdname.gpd中包含了标准特征显示的文本的ID,我们只需要引用其中的就可以的。


    另外补充说明一下上面Feature中的Option,前面描述了Option对应的其实是Feature可以设置的选项的描述,对应的每一个选项也有固定的格式,可以参见https://msdn.microsoft.com/zh-cn/library/windows/hardware/ff559622(v=vs.85).aspx

    对应上面Feature描述的界面效果如下:

    image

    类似的对应的*Feature:PaperSize产生的界面效果如下:

    image


    至此,关于GPD文件的描述就结束了。具体需要添加某项特征选项时,可在MSDN上找到对应选项的关键字段,然后根据描述设置相应的属性即可。

    参考资料

    打印处理器缓冲spool文件相关资料http://www.undocprint.org/winspool/spool_files

     

    展开全文
  • 为Linux安装虚拟PDF打印机

    千次阅读 2020-04-12 07:02:07
    原文地址:https://lujun9972.github.io/blog/2020/04/11/为linux安装虚拟pdf打印机/index.html 今天发现一个 CUPS-PDF 项目,可以为 CUPS(Common Unix Printing System) 添加 PDF 打印机. 步骤非常简单: 安装...

    原文地址:https://lujun9972.github.io/blog/2020/04/11/为linux安装虚拟pdf打印机/index.html

    今天发现一个 CUPS-PDF 项目,可以为 CUPS(Common Unix Printing System) 添加 PDF 打印机.

    步骤非常简单:

    1. 安装 CPUS-PDF

      sudo apt install -y cups-pdf
      
    2. 根据 CPUS-PDF的文档说明, 需要设置 cups-pdf 的所有者为 root,且权限为 0700

      sudo chown root:root /usr/lib/cups/backend/cups-pdf
      sudo chmod 0700 /usr/lib/cups/backend/cups-pdf
      
    3. 重启CUPS服务

      sudo systemctl restart cups.service
      
    4. 可以通过修改 /etc/cups/cups-pdf.confOUT 参数来设置pdf的输出位置

      ### Key: Out (config)                                                        
      ##  CUPS-PDF output directory                                                
      ##  special qualifiers:                                                      
      ##     ${HOME} will be expanded to the user's home directory                 
      ##     ${USER} will be expanded to the user name                             
      ##  in case it is an NFS export make sure it is exported without             
      ##  root_squash!                                                             
      ##  on Ubuntu, the cupsd AppArmor profile needs to be updated                
      ##  to match the output path as per instructions in LP:147551                
      ### Default: /var/spool/cups-pdf/${USER}                                     
      
      Out ${HOME}/PDF                                                              
      
    5. 然后在CUPS的admin页面中就能看到一个PDF打印机了

      screenshot-73.png

      或者用 lpstat 来查看:

      lpstat -p -d
      
      printer PDF is idle.  enabled since Sat 11 Apr 2020 09:52:10 PM HKT
      system default destination: PDF
      
    6. 使用 lpr 打印一个文件试试

      lp ~/dead.letter
      
      request id is PDF-5 (1 file(s))
      
      ls ~/PDF
      
      dead.letter__2_PDF-job_5.pdf
      
    7. 最后要注意的是,根据 README 的说明,客户端选择打印机时,供应商应该选择 Postscript, model选择 Color Printer
    展开全文
  • 虚拟打印机

    2019-03-04 15:46:36
    安装 Linotrionic 虚拟打印机打印PRN文件直接添加打印机会提示驱动程序不是X64程序所以,我手动在驱动程序列表里添加了驱动,添加时选择X86,就添加上了但是,如何加入打印机呢?还有,删除掉上面的AGFA驱动,打印机...
  • A5下载站向大家推荐一款简单好用的虚拟打印机驱动程序——BullZip PDF Printer。软件,适用于所有提供了一个打印选项的应用,让用户有可以转换任何可打印的文档或者图像为 PDF 格式。软件界面美观简洁、使用方便,...
  • 使用MS提供的MSPLOT驱动源文件,可方便地进行自用的打印机驱动开发或虚拟打印机驱动的开发,以下是一个最简的完整的使用DDK编译MSPLOT打印驱动的步骤: 1、编译对应的工具(64bit驱动) 打开DDK的Win7 x64 ...

    使用MS提供的MSPLOT驱动源文件,可方便地进行自用的打印机驱动开发或虚拟打印机驱动的开发,以下是一个最简的完整的使用DDK编译MSPLOT打印驱动的步骤:

     

    1、编译对应的工具(64bit驱动)

    打开DDK的Win7 x64 Checked Build Environment定位至:

    D:\WinDDK\7600.16385.1\src\print\msplot ,输入命令build ,在msplot目录生成AMD64文件夹及在D:\WinDDK\7600.16385.1\src\print\msplot\tools\ntres\objchk_win7_amd64\amd64生成PlotGPC.exe应用程序,前者用于生成驱动的用户界面及接口,后者用于修改PCD文件;

     

    2、修改PCD文件

    微软绘图仪驱动程序的特定模型的小驱动程序,是由厂商提供的、从描述设备特征文本文件产生的二进制的.pcd文件。 为产生一个.pcd文件,必须首先创建一个采用PCD源文件格式的文本文件(此文件在DDK路径:WinDDK\7600.16385.1\src\print\msplot\mini)。

    使用Build Evironment定位至:

    D:\WinDDK\7600.16385.1\src\print\msplot\tools\ntres\objchk_win7_amd64\amd64,输入命令:PlotGPC source-file-path.txt traget-file-path.pcd(注意后缀名一致),在目标路径可生成traget-file-path.pcd文件;

     

    3、MSPLOT驱动的安装

    新建文件一个驱动安装文件夹PrintDrive,里面分别新建文件夹i386、mini,再将msplot\AMD64文件夹下面的已经编译好的plotter.dll与plotui.dll文件拷贝至PrintDrive里面的i386文件夹中,将步骤2中编译好的pcd文件放至mini文件夹中,如hp7550pl.pcd的路径应为PrintDrive\mini\hp7550pl。将msplot文件夹中的plotter.inf及plotui.hlp文件拷贝至PrintDrive文件夹中,则整个安装文件装备好,照一般inf安装方法安装该打印机即可。

     

    后注:

    x64 Win7系统的驱动安装需要数字认证签名,以上是使用DDK中微软提供的模板修改的打印机驱动,用户接口可以在其提供的源文件中修改,而打印机相关属性可在pcd上做手脚,但安装用的inf文件一旦作出修改系统将无法安装该驱动(使用其他编译环境则无此问题,可自行试验),请在安装时选好对应的打印驱动名称。

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,872
精华内容 7,948
关键字:

虚拟打印机驱动