Word 문서의 페이지 수가 Perl 및 Word VBA에서 다른 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/820348

  •  03-07-2019
  •  | 
  •  

문제

Perl에서 Win32 :: Ole을 사용하여 다양한 속성 (페이지 수, 저자 등)을 얻으려고하는 (S 세트) Word 문서가 있습니다.

print $MSWord->Documents->Open($name)->
BuiltInDocumentProperties->{"Number of pages"}->value . " \n";

이것은 4 페이지를 반환합니다. 그러나 문서의 실제 페이지 수는 9입니다. 첫 번째 섹션의 페이지 수는 4입니다. 문서의 총 페이지 수를 원합니다.

Word VBA 내에서 다음을 수행하는 경우 :

MsgBox ActiveDocument.BuiltInDocumentProperties("Number of pages")

9. 속성/통계 페이지에 표시된 페이지 수는 9입니다.

재 계산을 강요해야합니까? OLE 라이브러리에 재 계산을 강요하도록 요청하는 방법이 있습니까? 아니면 모든 섹션을 개별적으로 처리해야합니까?

저는 XP, Word 2007, ActivePerl v5.10.0에 있습니다.

도움이 되었습니까?

해결책

#!/usr/bin/perl

use strict;
use warnings;

use File::Spec::Functions qw( catfile );

use Win32::OLE;
use Win32::OLE::Const 'Microsoft Word';
$Win32::OLE::Warn = 3;

my $word = get_word();
$word->{Visible} = 1;

my $doc = $word->{Documents}->Open(catfile $ENV{TEMP}, 'test.doc');
$doc->Repaginate;

my $props = $doc->BuiltInDocumentProperties;
my $x = $props->Item(wdPropertyPages)->valof;
print "$x\n";

$doc->Close(0);

sub get_word {
    my $word;
    eval {
        $word = Win32::OLE->GetActiveObject('Word.Application');
    };

    die "$@\n" if $@;

    unless(defined $word) {
        $word = Win32::OLE->new('Word.Application', sub { $_[0]->Quit })
            or die "Oops, cannot start Word: ", 
                   Win32::OLE->LastError, "\n";
    }
    return $word;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top