Отображение документов Office в Silverlight - PullRequest
1 голос
/ 14 июля 2011

Мне нужно отобразить документы Office в браузерном приложении Silverlight.Решение, которое у меня есть на данный момент, включает в себя использование автоматизации Office для преобразования различных документов Office в XPS, а затем отображение полученных файлов XPS в Silverlight с помощью FirstFloor Document Toolkit для Silverlight .

Это работает, но медленно, и имеет достаточное количество движущихся частей.В частности, компонент Office Automation особенно нестабилен по всем известным и очевидным причинам.

Лучшая альтернатива, которую я могу придумать, - это купить что-то вроде Aspose.Total для обработкиdocument-> XPS конвертация.Но Aspose довольно дорогой (по крайней мере, $ 8K для нашего сценария), в основном потому, что он поставляется с большим количеством функциональных возможностей, которые мне действительно не нужны.Я заплачу, если мне придется, но прежде чем я это сделаю, я хочу проверить, есть ли у кого-нибудь еще лучшие идеи.

Предложения о том, как этого добиться?По сути, мне нужно разрешить пользователям загружать документы Word / Excel / Powerpoint на сервер и отображать их (нормально только для чтения) в браузерном приложении Silverlight.Какие-нибудь решения, которые я пропустил?

  • Редактировать: Похоже, что Electric Rain имеет конвертер PPT-XAML, который, возможно, стоит изучить для PPTфайлов не менее.

  • Редактировать: Еще одной альтернативой FirstFloor Document Toolkit выглядит продукт PDFTron SilverDox .Похоже, что его серверный компонент использует Office Automation, но как только вы загрузите документ в XPS, похоже, что его средство просмотра Silverlight на стороне клиента будет работать.

Ответы [ 2 ]

1 голос
/ 13 октября 2011

У меня была эта проблема, поэтому я преобразовал Word Word в PDF программно. Теперь мне нужно вызвать одноименный файл PDF в браузере. (Doc1.docx to Doc1.pdf) Вы можете использовать переменные для вызова документов. Это бэкэнд-код на C #, который прекрасно справляется с задачей. Также не забудьте добавить ссылку на библиотеку объектов Microsoft Word 12.0. Вызовите этот метод или сделайте его классом. Затем позвоните документу после этого.

using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using Microsoft.Office.Interop.Word;

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        ApplicationClass wordApplication = new ApplicationClass();
        Document wordDocument = null;

        object paramSourceDocPath = @"D:\Websites\Docs\Doc1.docx";
        object paramMissing = Type.Missing;
        string paramExportFilePath = @"D:\Websites\Docs\Doc1.pdf";
        WdExportFormat paramExportFormat = WdExportFormat.wdExportFormatPDF;

        bool paramOpenAfterExport = false;
        WdExportOptimizeFor paramExportOptimizeFor = WdExportOptimizeFor.wdExportOptimizeForPrint;
        WdExportRange paramExportRange = WdExportRange.wdExportAllDocument;

        int paramStartPage = 0;
        int paramEndPage = 0;
        WdExportItem paramExportItem = WdExportItem.wdExportDocumentContent;

        bool paramIncludeDocProps = true;
        bool paramKeepIRM = true;
        WdExportCreateBookmarks paramCreateBookmarks = WdExportCreateBookmarks.wdExportCreateWordBookmarks;

        bool paramDocStructureTags = true;
        bool paramBitmapMissingFonts = true;
        bool paramUseISO19005_1 = false;

        try
        {
            // Open the source document.
            wordDocument = wordApplication.Documents.Open(
                ref paramSourceDocPath,
                ref paramMissing,
                ref paramMissing,
                ref paramMissing,
                ref paramMissing,
                ref paramMissing,
                ref paramMissing,
                ref paramMissing,
                ref paramMissing,
                ref paramMissing,
                ref paramMissing,
                ref paramMissing,
                ref paramMissing,
                ref paramMissing, 
                ref paramMissing,
                ref paramMissing);

            // Export it in the specified format.
            if (wordDocument != null)
                wordDocument.ExportAsFixedFormat(
                    paramExportFilePath, 
                    paramExportFormat,
                    paramOpenAfterExport,
                    paramExportOptimizeFor, 
                    paramExportRange,
                    paramStartPage,
                    paramEndPage, 
                    paramExportItem,
                    paramIncludeDocProps,
                    paramKeepIRM, 
                    paramCreateBookmarks,
                    paramDocStructureTags,
                    paramBitmapMissingFonts,
                    paramUseISO19005_1,
                    ref paramMissing);
        }
        catch (Exception ex)
        {
            // Respond to the error
        }
        finally
        {
            // Close and release the Document object.
            if (wordDocument != null)
            {
                wordDocument.Close(ref paramMissing, ref paramMissing, ref paramMissing);
                wordDocument = null;
            }

            // Quit Word and release the ApplicationClass object.
            if (wordApplication != null)
            {
                wordApplication.Quit(ref paramMissing, ref paramMissing, ref paramMissing);
                wordApplication = null;
            }

            GC.Collect();
            GC.WaitForPendingFinalizers();
            GC.Collect();
            GC.WaitForPendingFinalizers();
        }
    }
}
1 голос
/ 15 июля 2011

Rainbow PDF предлагает серверное решение за 2000 http://rainbowpdf.com/server-based-solutions

:)

...