我要寻找一个代码片段,不只是这一点,最好在C#中甚至Perl。
我希望这不是一个大的任务;)
我要寻找一个代码片段,不只是这一点,最好在C#中甚至Perl。
我希望这不是一个大的任务;)
下面将打开C:\presentation1.ppt
并保存幻灯片为C:\Presentation1\slide1.jpg
等。
如果你需要得到互操作程序集,它是根据在办公室“工具”可用的安装程序,或者你可以下载它从这里(办公室2003) 。 你应该能够找到从没有其他版本的链接,如果你有办公室的新版本。
using Microsoft.Office.Core;
using PowerPoint = Microsoft.Office.Interop.PowerPoint;
namespace PPInterop
{
class Program
{
static void Main(string[] args)
{
var app = new PowerPoint.Application();
var pres = app.Presentations;
var file = pres.Open(@"C:\Presentation1.ppt", MsoTriState.msoTrue, MsoTriState.msoTrue, MsoTriState.msoFalse);
file.SaveCopyAs(@"C:\presentation1.jpg", Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType.ppSaveAsJPG, MsoTriState.msoTrue);
}
}
}
编辑: 思南的版本使用出口看起来是一个好一点的选择,因为你可以指定一个输出分辨率。 对于C#,更改上面的最后一行:
file.Export(@"C:\presentation1.jpg", "JPG", 1024, 768);
由于千电子伏指出,不要在Web服务器上使用。 但是,下面的Perl脚本是脱机文件转换等完美的罚款:
#!/usr/bin/perl
use strict;
use warnings;
use Win32::OLE;
use Win32::OLE::Const 'Microsoft PowerPoint';
$Win32::OLE::Warn = 3;
use File::Basename;
use File::Spec::Functions qw( catfile );
my $EXPORT_DIR = catfile $ENV{TEMP}, 'ppt';
my ($ppt) = @ARGV;
defined $ppt or do {
my $progname = fileparse $0;
warn "Usage: $progname output_filename\n";
exit 1;
};
my $app = get_powerpoint();
$app->{Visible} = 1;
my $presentation = $app->Presentations->Open($ppt);
die "Could not open '$ppt'\n" unless $presentation;
$presentation->Export(
catfile( $EXPORT_DIR, basename $ppt ),
'JPG',
1024,
768,
);
sub get_powerpoint {
my $app;
eval { $app = Win32::OLE->GetActiveObject('PowerPoint.Application') };
die "$@\n" if $@;
unless(defined $app) {
$app = Win32::OLE->new('PowerPoint.Application',
sub { $_[0]->Quit }
) or die sprintf(
"Cannot start PowerPoint: '%s'\n", Win32::OLE->LastError
);
}
return $app;
}