Hello Rata,
thank you for your answer but it did not helped me much :( seems pretty similar to what i did (or did not). I tried this:
#!/usr/bin/perl
use strict;
use warnings;
use Win32::OLE::Const 'Microsoft Word';
#$Win32::OLE::CP = CP_UTF8;
binmode STDOUT, 'encoding(utf8)';
# OPEN FILE SPECIFIED AS FIRST ARGUMENT
my $fname=$ARGV[0];
my $fnameFullPath = `cygpath.exe -wa $fname`;
$fnameFullPath =~ s/\\/\\\\/g;
$fnameFullPath =~ s/\s*$//;
unless (-e $fnameFullPath) { print "Error: File did not exists\n"; exi
+t 1;}
my $Word = Win32::OLE->GetActiveObject('Word.Application')
|| Win32::OLE->new('Word.Application','Quit')
or die Win32::OLE->LastError();
$Word->{'Visible'} = 0;
my $doc = $Word->Documents->Open($fnameFullPath);
my $paragraphs = $doc->Paragraphs() ;
my $enumerate = new Win32::OLE::Enum($paragraphs);
my $oldFont = $Word->Selection->Font; # add
+ed line
while(defined(my $paragraph = $enumerate->Next())) {
my $text = $paragraph->{Range}->{Text};
my $sel = $Word->Selection;
my $font = $sel->Font;
if (!defined($font)) { $font = $oldFont; } # use the old f
+ont instead
else { $oldFont = $font; } # use this font
+ for future paragraphs
if ($font->{Size} == 18){
print "Text: ", $text, "\n";
print "Font Bold: ", $font->{Bold}, "\n";
print "Font Italic: ", $font->{Italic}, "\n";
print "Font Name: ", $font->{Name}, "\n";
print "Font Size: ", $font->{Size}, "\n";
print "=========\n";
}
}
$Word->ActiveDocument->Close ;
$Word->Quit;
Here is output:
Text: This is a doc file containing different fonts and size, document
+ also contain header and footer (Font: TNR, Size: 18)
Font Bold: 0
Font Italic: 0
Font Name: Times New Roman
Font Size: 18
=========
Text: This is a Perl example (Font TNR, Size: 12)
Font Bold: 0
Font Italic: 0
Font Name: Times New Roman
Font Size: 18
=========
Text: This is a Python example(Font: Courier New, Size: 10)
Font Bold: 0
Font Italic: 0
Font Name: Times New Roman
Font Size: 18
=========
As you can see in output everywhere is Font Size 18 even if in original document are different sizes (Also font name is not updated). This brings me to assumption that $font is set only once in 1st paragraph which is processed. Thus the following condition
if ($font->{Size} == 18)
is only evaluated in 1st processed paragraph. This also supports fact that if I change condition to following (Match 2nd paragraph):
if ($font->{Size} == 12)
the output is nothing. Because first paragraph is 18 not 12 and thus the condition is false, $font is not updated any more so it wont never be true.
What I am doing wrong ? Many thanks |