gyn

Win32下的Perl,无用的select,停滞的Tk,结束吧....

在Perl中使用打印机打印格式化文档

不得不说的是   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   就是布尔值了。


posted on 2008-09-06 14:29 gyn_tadao 阅读(696) 评论(0)  编辑 收藏 引用 所属分类: perl

只有注册用户登录后才能发表评论。
<2008年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

导航

统计

常用链接

留言簿(14)

随笔分类(126)

随笔档案(108)

相册

搜索

最新评论

阅读排行榜

评论排行榜