2010-04-16 18 views
5

Tôi có một ứng dụng web ASP.NET 2.0 sẽ tải lên tệp ppt và sau đó trích xuất trang trình bày của nó thành hình ảnh. Cho rằng tôi đã nhập khẩu office.dll và Microsoft.Office.Interop.PowerPoint.dll hội và viết đoạn mã sauCác sự cố với tự động hóa văn phòng trong asp.net. Tôi có thể sử dụng các lựa chọn thay thế như văn phòng mở, nếu tôi biết cách

public static int ExtractImages(string ppt, string targetPath, int width, int height) 
    { 
     var pptApplication = new ApplicationClass(); 

     var pptPresentation = pptApplication.Presentations.Open(ppt, MsoTriState.msoTrue, MsoTriState.msoFalse, MsoTriState.msoFalse); 

     var slides = new List<string>(); 

     for (var i = 1; i <= pptPresentation.Slides.Count; i++) 
     { 
      var target = string.Format(targetPath, i); 
      pptPresentation.Slides[i].Export(target, "jpg", width, height); 
      slides.Add(new FileInfo(target).Name); 
     } 

     pptPresentation.Close(); 

     return slides.Count; 
} 

Nếu tôi chạy mã này trong máy tính cục bộ của tôi, trong asp.net hoặc thực thi, nó chạy hoàn hảo. Nhưng nếu tôi cố gắng chạy nó trong máy chủ sản xuất, tôi nhận được lỗi sau:

System.Runtime.InteropServices.COMException (0x80004005): PowerPoint could not open the file. at Microsoft.Office.Interop.PowerPoint.Presentations.Open(String FileName, MsoTriState ReadOnly, MsoTriState Untitled, MsoTriState WithWindow) at PPTImageExtractor.PptConversor.ExtractImages(String caminhoPpt, String caminhoDestino, Int32 largura, Int32 altura, String caminhoThumbs, Int32 larguraThumb, Int32 alturaThumb, Boolean geraXml) at Upload.ProcessRequest(HttpContext context)

Quá trình này đang chạy với người sử dụng NT AUTHORITY \ NETWORK SERVICE. IIS được cấu hình để sử dụng xác thực ẩn danh. Người dùng nặc danh là một quản trị viên, tôi thiết lập nó như thế này để cho phép ứng dụng chạy mà không phải lo lắng về các điều khoản.

Trong máy phát triển của tôi, tôi có văn phòng 2010 beta1. Tôi đã thử nghiệm với thực thi trong một máy tính với văn phòng 2007 là tốt. Và nếu tôi chạy mã từ thực thi trong máy chủ, với văn phòng 2003 được cài đặt, nó chạy hoàn hảo.

Để đảm bảo rằng sẽ không có bất kỳ vấn đề nào với quyền, mọi người trong máy chủ đều có quyền truy cập đầy đủ vào trang web. Trang web đang chạy trong IIS7 và Chế độ cổ điển.

Tôi cũng nghe nói rằng Open-office có API có thể thực hiện việc này, nhưng tôi không thể tìm thấy bất kỳ điều gì về nó. Tôi không nhớ bằng cách sử dụng DLLImport để làm những gì tôi phải làm và tôi có thể cài đặt mở văn phòng trên máy chủ web. Đừng lo lắng về việc viết lại phương thức này, miễn là các tham số đều giống nhau, mọi thứ sẽ hoạt động.

Tôi đánh giá cao sự trợ giúp của bạn.

+0

Đừng bao giờ sử dụng Office Interop từ một ứng dụng ASP.NET. Xem [Cân nhắc cho Tự động hóa phía máy chủ của Office] (http://support.microsoft.com/kb/257757) –

Trả lời

0

Thư viện Interop yêu cầu phải cài đặt ứng dụng được đề cập trên máy mà từ đó chúng đang chạy. Tức là, để làm việc trên máy chủ sản xuất của bạn, bạn sẽ cần phải cài đặt Office trên máy chủ đó. Đây thường là một ý tưởng khủng khiếp. Có nhiều vấn đề với loại thiết lập như mỗi lần ai đó đưa ra yêu cầu, một phiên bản mới của ứng dụng được đề cập (trong trường hợp của bạn PowerPoint) được khởi chạy.

Nếu bạn muốn phân tích cú pháp tệp PowerPoint trên máy chủ trung tâm, thì bạn nên sử dụng thư viện đọc tệp PowerPoint. Tôi biết rằng Aspose làm cho sản phẩm như vậy (Aspose.Slides) nhưng cũng có những sản phẩm khác.

Nếu tài liệu trong PowerPoint 2007, bạn có thể phân tích cú pháp Open Office XML cho dữ liệu bạn muốn. Xem Introducing the Office (2007) Open XML File FormatsOpen XML SDK 2.0 for Microsoft Office để biết thêm.

+0

các liên kết tốt để mở nội dung văn phòng ... không cần thư viện bên ngoài để xử lý các tệp văn phòng 2007+, mặc dù họ có thể làm cho nó dễ dàng hơn. – Jon

+0

máy chủ đã cài đặt Office 2003 và chúng tôi chỉ chấp nhận tải lên tệp ppt chứ không phải pptx. Đó là lý do tại sao tôi đang cân nhắc sử dụng Open-Office. –

+0

vâng, bạn sẽ không muốn mỗi yêu cầu gọi interop/com. Bạn muốn sử dụng dịch vụ nền như thư mục "xem" để không có tai nạn giao thông. – FlavorScape

0

Tôi có thể sai, bắt đầu tìm kiếm một điều tương tự gần đây. Nhưng bạn không cần phải cài đặt văn phòng trên máy để tạo hoặc chỉnh sửa các tệp Office 2007+. Về cơ bản, chúng là các tệp zip có phần mở rộng khác nhau. Nếu bạn đổi tên thành .zip, bạn sẽ thấy tất cả các tệp và có thể chỉnh sửa chúng trực tiếp.

Sau đó, nó có thể được giải nén và tất cả các tệp đều có sẵn cho bạn. Bạn có thể tạo tệp mới theo cách tương tự

+0

Đọc các tệp xml không thực sự giúp xuất các trang dưới dạng hình ảnh, trừ khi bạn có thể tạo chúng theo cùng cách – cjk

1

Khi xem xét sử dụng Tự động hóa văn phòng trên máy chủ, bạn có thể muốn đọc qua thông tin trong bài viết KB sau.

http://support.microsoft.com/kb/257757

Một cụm từ quan trọng từ các liên kết ở trên

Microsoft hiện không khuyên, và không hỗ trợ, Tự động hóa các ứng dụng Microsoft Office từ bất kỳ, ứng dụng client không tương tác không cần giám sát hoặc một thành phần (bao gồm cả ASP, ASP.NET, DCOM và NT Services), vì Office có thể biểu hiện hành vi không ổn định và/hoặc bế tắc khi Office được chạy trong môi trường này.

Và tôi có thể khẳng định rằng ở trên là rất đúng, và không chỉ MS cố gắng ngăn cản bạn ...

+0

vâng, nếu bạn tự động hóa chúng trực tiếp, bạn có thể xem xét quá trình giữ trẻ để khởi động lại crap văn phòng khi không thành công. – FlavorScape

10

Đừng bao giờ sử dụng Office Interop từ một ứng dụng ASP.NET. Xem Considerations for server-side Automation of Office.

Tuy nhiên, nếu bạn không có sự thay thế, trên Windows Server 2008 bạn cần phải tạo ra các thư mục sau đây để có được điều này để làm việc:

Windows 2008 Server x64: C: \ Windows \ SysWOW64 \ config \ systemprofile \ Desktop Windows 2008 Server x86: C: \ Windows \ System32 \ config \ systemprofile \ Desktop

+0

Điều này phù hợp với tôi! –

+1

Bạn không biết mức độ thất vọng mà vấn đề này đã gây ra cho chúng tôi. Tôi muốn mua cho bạn một ly bia nếu bạn đã từng ở khu vực Denver. Cảm ơn. – sarumont

+0

Cảm ơn bạn rất nhiều :). – Zafer

0

Đừng bao giờ sử dụng Office Interop từ ứng dụng ASP.NET. Xem Considerations for server-side Automation of Office.

Tuy nhiên, tôi chỉ muốn lưu ý ở đây rằng tôi đã phải sửa chữa được mô tả bởi Murthy Pantham trên máy Windows 64 Professional 64 bit với Office 2010. Đã làm không có Windows 7 Service Pack 1 hoặc Office 2010 Service Gói 3 đã được cài đặt. Vì vậy, bài học ở đây rõ ràng là sửa chữa không giới hạn ở Server 2008. Hy vọng điều này sẽ giúp một ai đó.

+0

Bản chỉnh sửa có thay đổi ý nghĩa phản hồi của tôi không? Bạn không chắc chắn tại sao cần thêm "Không bao giờ sử dụng Office Interop từ một ứng dụng ASP.NET. Hãy xem các cân nhắc cho Tự động hóa phía máy chủ của văn phòng". – ptrc

1

Trong trường hợp của tôi (chuyển đổi bài thuyết trình video, và tôi có vấn đề rất giống với các công cụ mở) này giúp:

Tạo các thư mục sau:

C: \ Windows \ SysWOW64 \ config \ systemprofile \ Desktop

C: \ Windows \ System32 \ config \ systemprofile \ Desktop (tôi không có điều này)

hệ điều hành của tôi Windows server 2012 R2 Standard

Các vấn đề liên quan