CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  网络通信/分布式开发

虚拟网络打印机(答者有分,好方案送300----分次)

楼主qstn_nsw(答案)2006-03-18 16:53:45 在 Delphi / 网络通信/分布式开发 提问

如何使一台服务器变成一个虚拟网络打印机?  
  1、该服务器安装两台打印机;  
  2、网络中的所有用户只用安装该虚拟打印机,打印数据会被自动分流到实际的打印机上;  
   
  问题点数:100、回复次数:17Top

1 楼qstn_nsw(答案)回复于 2006-03-18 19:06:03 得分 0

有人会写逻辑打印机的驱动吗?Top

2 楼tfp(tfp)回复于 2006-03-18 19:10:03 得分 5

逻辑打印机?  
   
  我会写虚拟的打印机Top

3 楼clasj(★知我☆)回复于 2006-03-18 20:22:16 得分 75

打印机不是可以共享吗?  
  为什么要这么麻烦?Top

4 楼qstn_nsw(答案)回复于 2006-03-19 20:08:24 得分 0

to   tfp  
  虚拟打印机也可以呀,可以交流一下  
   
  to   clasj  
  我想实现所谓的集群打印  
  所有用户的打印任务发送到一个逻辑(虚拟)的打印机,  
  由我的程序决定发送到哪一个实际打印机Top

5 楼tfp(tfp)回复于 2006-03-19 21:06:05 得分 0

道理是一样的,   只要把打印的数据得到,就可以做到输出到任意台打印机上去。  
   
  Top

6 楼clasj(★知我☆)回复于 2006-03-19 23:01:37 得分 0

如果是这个需求,连虚拟打印机都不需要。。。  
  可以用Standard   TCP/IP   Port实现。  
   
  在服务器上面执行如下步骤:  
  点击“添加打印机”,选择“本地打印机”(底下那个CheckBox不要选中),下一步  
  选择“创建新端口”,类型选择“Standard   TCP/IP   Port”,下一步  
  点击弹出窗口的下一步  
  打印机名或IP地址填入127.0.0.1,下一步(这个地方有点慢)  
  选择“自定义”,然后点击“配置”,可以看到一些参数,可以适当修改,但是为了配合我后面的步骤,先不要修改  
  点击“完成”  
  接下来选择打印驱动,这个地方选择的驱动要跟你实际打印机的驱动一致,为了配合我后面的步骤,选择Apple的Apple   LaserWriter   16/600   PS,下一步  
  下一步  
  下一步  
  下一步  
  选中“共享为”,下一步  
  下一步  
  下一步  
  完成  
   
  ok,打印机安装完毕  
   
  现在写一个程序运行在服务器上面,通过它来获得打印数据,我写了个简单的测试程序:  
   
  program   Project1;  
   
  {$APPTYPE   CONSOLE}  
   
  uses  
      SysUtils,   Classes,   IdTCPServer;  
   
  type  
      TDummy   =   class  
          class   procedure   OnConnect(AThread:   TIdPeerThread);  
          class   procedure   OnDisconnect(AThread:   TIdPeerThread);  
          class   procedure   OnExecute(AThread:   TIdPeerThread);  
      end;  
   
  class   procedure   TDummy.OnConnect(AThread:   TIdPeerThread);  
  begin  
      WriteLn('Begin');  
  end;  
   
  class   procedure   TDummy.OnDisconnect(AThread:   TIdPeerThread);  
  begin  
      WriteLn('End');  
  end;  
   
  class   procedure   TDummy.OnExecute(AThread:   TIdPeerThread);  
  var  
      Count:   Integer;  
      Stream:   TFileStream;  
      i:   Integer;  
  begin  
      Stream:=TFileStream.Create('1.ps',   fmCreate);  
      try  
          repeat  
              Count:=AThread.Connection.ReadFromStack(false);  
              if   Count=0   then   Break;  
              AThread.Connection.ReadStream(Stream,   Count);  
              for   i:=0   to   Count   div   1024   do  
                  Write('*');  
          until   false;  
          WriteLn;  
      finally  
          Stream.Free;  
      end;  
  end;  
   
  var  
      TCPServer:   TIdTCPServer;  
  begin  
      TCPServer:=TIdTCPServer.Create(nil);  
      TCPServer.OnConnect:=TDummy.OnConnect;  
      TCPServer.OnDisconnect:=TDummy.OnDisconnect;  
      TCPServer.OnExecute:=TDummy.OnExecute;  
      TCPServer.DefaultPort:=9100;  
      TCPServer.Active:=true;  
      ReadLn;  
      TCPServer.Active:=false;  
      TCPServer.Free;  
  end.  
   
  ok,将程序运行起来,然后用刚才安装的打印机打印一个文档  
  程序运行目录下会生成一个1.ps文件,这个文件里面的数据就是你要提交到真实打印机的数据  
  当然,你获得数据后就可以做很多处理了。。。Top

7 楼qstn_nsw(答案)回复于 2006-03-20 10:47:56 得分 0

首先感谢clasj   和tfp两位兄弟(应该是吧:))  
   
  我有个问题是:  
          如果我连接的实际打印机是不同厂商的不同型号的打印机如何处理;  
          而我让用户只知道共享的虚拟打印机,这如何实现?Top

8 楼clasj(★知我☆)回复于 2006-03-20 11:32:46 得分 0

1.虚拟打印机尽量选择标准点的驱动,比如打印成ps文档。  
  然后把ps文件直接用实际打印机打印,不管实际打印机是什么驱动,标准的文档都是可以处理的。  
   
  2.你只共享虚拟打印机。Top

9 楼qstn_nsw(答案)回复于 2006-03-20 11:56:33 得分 0

有道理。有道理。  
   
  我先试一下。  
   
  好心人啊!!!  
  Top

10 楼qstn_nsw(答案)回复于 2006-03-20 16:38:33 得分 0

谁有标准的postscript打印驱动Top

11 楼zoologist(王朝)回复于 2006-03-20 16:53:38 得分 20

http://www.mabuse.de/vprinter.mhtmlTop

12 楼qstn_nsw(答案)回复于 2006-03-20 17:00:29 得分 0

多谢!Top

13 楼qstn_nsw(答案)回复于 2006-03-20 17:27:16 得分 0

再讨教:  
  clasj建议使用网络接口,然后在9100端口监听并接受数据,我很赞同,也实现了。  
  但是能否从PS文件中读取打印的页数和分数?不知兄弟们是否做过。  
   
  王朝兄弟给我的资源,我正在试用中……  
  Top

14 楼clasj(★知我☆)回复于 2006-03-20 19:00:17 得分 0

用Ghostscript解释ps文件。。。  
   
  随便一搜就有介绍:  
  http://zhidao.baidu.com/question/4643601.html  
   
  我以前用过一点点,功能很强大,有sdk和文档,不过接口是c语言描述的,不过还算好用。Top

15 楼qstn_nsw(答案)回复于 2006-03-27 15:12:54 得分 0

再请教clasj:  
          是否当前PostScript打印机驱动是否通用?帮我确认一下;  
           
  另外,我要结贴,请关注新的贴子,我将兑现了。Top

16 楼clasj(★知我☆)回复于 2006-03-27 18:00:22 得分 0

我觉得Apple的Apple   LaserWriter   16/600   PS就已经非常通用了:)  
  发新帖后记得给我发个小纸条。。。Top

17 楼qstn_nsw(答案)回复于 2006-03-27 23:04:01 得分 0

谢谢各位!Top

相关问题

  • 要虚拟打印机软件
  • 如何实现虚拟打印机???
  • 请教高手,如何开发2000下的虚拟打印机驱动程序?(分数不够可以再加)
  • 什么软件可以虚拟打印机?
  • 怎样实现一个“虚拟打印机”?
  • 如何安装Adobe reader 7.0的虚拟打印机?
  • 请教虚拟打印机的问题,给点思路。
  • 我想用DELIPH做一个虚拟打印机!直接可以把要打印的东西打印成WORD或EXCEL文件等!提点意思!重给分
  • 获得打印机的分辨率
  • 打印机控制(全部的分!!!)

关键词

  • tcp/ip
  • 虚拟
  • 驱动
  • 打印
  • 选择
  • 服务器
  • 文档
  • 逻辑
  • ps
  • apple

得分解答快速导航

  • 帖主:qstn_nsw
  • tfp
  • clasj
  • zoologist

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo