File: rtf2doc.pl

package info (click to toggle)
openjade 1.4devel1-13
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 6,020 kB
  • ctags: 11,087
  • sloc: cpp: 72,782; sh: 10,361; ansic: 2,365; lisp: 894; perl: 604; makefile: 436; sed: 93
file content (49 lines) | stat: -rw-r--r-- 1,164 bytes parent folder | download | duplicates (15)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#! /usr/bin/perl -w 
# Copyright (C) 1999 Avi Kivity

sub usage
{
    print <<__USAGE__;
Usage: rtf2doc.pl FILE...
  Converts one or more MS .rtf FILEs to MS Word .doc files.
  Requires MS Word 97 or above, plus correct phase of moon.
__USAGE__
}

usage(), exit 0 
    if ($#ARGV < 0) || ($ARGV[0] =~ /^((-h)|(--help))$/);

use Cwd;
use Win32::OLE;
use Win32::OLE::Const 'Microsoft Word';

$cwd = cwd();

@storytypes = ( 4, 3, 8, 6, 11, 10, 2, 1, 9, 7, 5 );
my $Word = Win32::OLE->new('Word.Application', 'Quit');
die "Cannot open MS Word\n" unless $Word;

foreach (@ARGV) {
    my $src = $_;
    $src = "$cwd\\$src"
        unless $src =~ /^(.:\\)/;
    my $tgt = "$src.doc";
    my $Doc = $Word->Documents->Open($src);
    die "Cannot open $src\n" unless $Doc;
    $Doc->Repaginate();
    $Stories = $Doc->StoryRanges;
    for $s (@storytypes) {
        eval {            
            local $SIG{__WARN__} = {};    
            $Story = $Stories->Item($s);
            if ($Story) {
                $Story->Fields->Update();
                $Story->Fields->Unlink();
            }
        };
    }
    $Doc->SaveAs($tgt, 0);
    $Doc->Close();
}

$Word->Quit();