在Silverlight中显示Office文档

时间:2011-07-14 18:02:59

标签: silverlight ms-office xps

我需要在基于浏览器的Silverlight应用程序中显示Office文档。我现在所拥有的解决方案涉及使用Office Automation将各种Office文档转换为XPS,然后使用FirstFloor Document Toolkit for Silverlight在Silverlight中显示生成的XPS文件。

这样可行,但速度很慢,并且有相当数量的活动部件。最值得注意的是,出于所有已知和显而易见的原因,Office Automation部件特别不稳定。

我能想出的最佳选择是购买Aspose.Total之类的东西来处理文档> XPS转换件。但Aspose相当昂贵(至少我们的场景只需8,000美元),主要是因为它带有很多我不需要的功能。如果必须,我会支付,但在此之前,我想检查是否有其他人有更好的想法。

关于如何实现这一目标的建议?基本上,我需要允许用户将Word / Excel / Powerpoint文档上传到服务器,并在基于浏览器的Silverlight应用程序中显示它们(只读很好)。我错过了哪些解决方案?

  • 编辑:看起来Electric Rain有一个PPT-to-XAML转换器,至少可能值得调查PPT文件。

  • 编辑:FirstFloor文档工具包的另一种替代方案看起来是PDFTron SilverDox产品。看起来它的服务器组件使用Office Automation,但是一旦你将文档导入XPS,看起来它的客户端Silverlight查看器就可以工作了。

2 个答案:

答案 0 :(得分:1)

Rainbow PDF的服务器解决方案价格为2000美元http://rainbowpdf.com/server-based-solutions

:)

答案 1 :(得分:1)

我有这个问题,所以我以编程方式将Word文档转换为PDF。我现在需要在浏览器中调用同名PDF文件。 (Doc1.docx到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();
        }
    }
}