2009-06-24 13 views
7

Tôi đang tìm đoạn mã thực hiện điều này, tốt nhất là trong C# hoặc thậm chí là Perl.Làm cách nào tôi có thể mở và lưu một bản trình bày PowerPoint dưới dạng HTML/JPEG trong C# hoặc Perl?

Tôi hy vọng điều này không phải là một nhiệm vụ lớn;)

+0

Tôi nghĩ rằng đặt cược tốt nhất của bạn sẽ là một số C# và hội đồng Interop PowerPoint ... có thể thử nghiên cứu điều đó. –

+1

Máy tính có chạy chương trình có cài đặt PowerPoint không? –

Trả lời

6

Như Kev điểm ra, không sử dụng này trên một máy chủ web. Tuy nhiên, kịch bản Perl Sau đây là hoàn toàn tốt đẹp cho chuyển đổi ngoại tuyến tập tin vv:

#!/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 "[email protected]\n" if [email protected]; 

    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; 
} 
22

Sau đây sẽ mở C:\presentation1.ppt và lưu các slide như C:\Presentation1\slide1.jpg, vv

Nếu bạn cần phải nhận được Interop Assembly, nó là có sẵn trong 'Công cụ' trong chương trình cài đặt Office hoặc bạn có thể tải xuống từ here (office 2003). Bạn sẽ có thể tìm thấy các liên kết cho các phiên bản khác từ đó nếu bạn có phiên bản mới hơn của văn phòng.

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); 
    } 
    } 
} 

Edit: Sinan's version sử dụng xuất khẩu có vẻ là lựa chọn tốt hơn một chút vì bạn có thể chỉ định một độ phân giải đầu ra. Đối với C#, thay đổi dòng cuối cùng ở trên thành:

file.Export(@"C:\presentation1.jpg", "JPG", 1024, 768); 
+2

+1 cho giải pháp C# (khi tôi có thể bỏ phiếu một lần nữa mà phải ở trong tám giờ nữa ;-) –

+1

Điều này thật tuyệt vời. Đối với tất cả người dùng của văn phòng năm 2010 trở lên, thư viện 'Microsoft.Office.Core' [lib thực sự là một thư viện COM] (http://stackoverflow.com/questions/5932794/microsoft-office-core-reference-missing), không phải là tiện ích mở rộng cần được tải. –