在Perl中通过Win32::OLE使用打印机打印格式化文档

本文提供了一种使用Perl在Windows环境下进行文档打印的方法。通过利用Win32::OLE模块操作Word应用程序,可以将数据导入并直接打印,尽管存在一些局限性和不足之处。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不得不说的是google上搜索出来的竟然都是《perl在win32平台上直接操作打印机》,这是 非常令人抱歉的文章。很显然是初学者写的,如果连这个都不知道,我还真是佩服他怎么学perl的了,这不是单指win32下的打印办法,哪里都一样。但是 这太简陋了,不是我想要的。
当然了,在avtivePerl中你可以使用ppm下载Printer来打印,但是当你看见那可怜的文档后,也许会打 消这个念头,或者打印一些text是再好不过了。或者使用cpan安装Win32::Word::Writer来打印,我想它是非常好的,但前提是你能装 的上它,而我在win32下装不上。
这个问题事实上困扰了我很久,因为很多时候你写的tk界面脚本,需要将分析的数据打印出来,如果不将这个功能 集成进脚本,便不得不求助于其他的工具,比方说先生成一个文档,然后用openoffice或者其他打开它,最后在其中实现打印,这非常麻烦,而且也不容 易让使用者接受。
既然没有特别好的针对性工具,我变依照上面的流程模拟这个过程,但这一切都是在内存中实现的,因此对于用户,不会知道里面的实现 细节,这样很好。首先我用Win32::OLE打开一个文档,要保证它是不被visiable。之后将需要打印的文档按照其中的格式,打入到这个文档中。 最后打印出来。不过可能是OLE的bug,这样做会在内存中保留一个到该文档的句柄,在关机的时候不有提示出错,而且如果在程序中直接使用close的 话,会弹出对话框询问是否保存,这就做不到隔离使用者的效果了。所以,使用saveas将文档存到disk里,这算是一个无奈的妥协。下面是我在集群文档 编辑系统中的用于打印的一个函数:
#---------------------------------------------
sub  file_print {
    
my   $cur_style    =   ' a ' ;
    
my   $word         =
       Win32
:: OLE -> new( ' Word.Application ' ,   ' Quit ' ) or  die  $ ! ;
    
$word -> { ' Visible ' =   0 ;
    
my   $document     =   $word -> Documents -> Add;
    
my   $selection    =   $word -> Selection;
    
my   $style        =   $document -> Styles -> Add( $cur_style );
    
my   $style_font   =   $style -> {Font};
    
$style_font -> {Name}                          =   $family ;
    
$style_font -> {Size}                          =   $size ;
    
$style_font -> {Bold}                          =   $weight ;
    
$style_font -> {Italic}                        =   $slant  eq  ' italic '   ?   1   :   0 ;
    
$style_font -> {Underline}                     =   $underline ;
    
$document -> ActiveWindow -> Selection -> {Style}  =   $cur_style ;
    
$selection -> TypeText(  $textundo -> get(  ' 1.0 ' ,   ' end '  ) );
    
$word -> ActiveDocument -> PrintOut;
    
$document -> SaveAs( ' printout.doc ' );
    
$document -> Close ;
    
$word -> Quit;
}

#---------------------------------------------
因为tk下的font和word中的有些不兼容,所以做了一些变换,比如说对于slant,tk是用‘italic’和‘roman’的,相对于word就是布尔值了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值