2013-05-31 12 views
5

Kann mir bitte jemand mitteilen, wie Sie die folgenden Microsoft-Präsentationsobjekteigenschaften in Perl verwenden können?Kennwortgeschützte PPT-Dateien mit Perl

http://msdn.microsoft.com/en-us/library/office/bb251459(v=office.12).aspx

Grundsätzlich möchte ich Password-Eigenschaft verwenden, um die Präsentation zu schützen.

+2

Im Allgemeinen können Sie nicht. PPT-Dateien sind sehr proprietär und ich kenne keine Module, die von Perl auf diese Dateien zugreifen. Wenn Sie PowerPoint auf dem gleichen Computer installiert haben, können Sie PowerPoint von Perl aus mit Win32 :: Ole automatisieren (schauen Sie unter http://www.perlmonks.org/?node_id=922835 nach, um ein paar Tipps zu erhalten) – FtLie

Antwort

1

Dieses Skript basiert auf dem Artikel perlmonks von angiehope wie der Kommentar von @FtLie oben. Ich habe dies mit Office 2010 getestet. Das Skript erstellt eine Datei mit dem Namen ppt_test.ppt in der gleichen Datei wie das Skript und legt ein Kennwort "geheim" für das gespeicherte Dokument fest.

use strict; 
use warnings; 
use v5.10; 

use Try::Tiny; 
use Data::Dumper; 
use Carp; 

use FindBin qw ($Bin); 

use Win32::OLE qw(in CP_UTF8); 
Win32::OLE->Option(CP => CP_UTF8); 
$Win32::OLE::Warn = 3; 
my $filename = "$Bin/ppt_test.ppt"; 
unlink $filename if (-e $filename); 

print("Starting Powerpoint Object\n"); 
my $power = Win32::OLE->GetActiveObject('Powerpoint.Application') || 
    Win32::OLE->new('Powerpoint.Application', 'Quit'); 

my $ppt = $power->Presentations->Add(); 
# 12 = blank layout 
my $slide = $ppt->Slides->Add(1,12); 
# 1 = text in horizontal direction, the next two numbers describe the position 
# and the last numbers the width and height of the box 
my $new_textbox = $slide->Shapes->AddTextbox(1,30,30,600,200); 
my $text_frame = $new_textbox->TextFrame; 
my $text_range = $text_frame->TextRange; 
$text_range->{Text} = "Please print \x{03B1},\x{03B2},\x{03B3}"; 

# Now set the password 
my $password = 'secret'; 
$ppt->{Password} = $password; 

$ppt->SaveAs($filename); 
$ppt->Close();