如何在Windows窗体上显示office和/或pdf内容?

我们有一个应用程序,pipe理员可以为他们的下属添加内容来查看。 他们的要求是它应该能够以不可编辑的方式显示Word,Excel,PowerPoint和PDF文档。

我发现这样做的一个select是将内容加载到Web浏览器组件中。 缺点是它会提示用户打开/保存/取消。 我们担心的是,大部分是电脑文盲的下属,在这样的文档上打开文档都会遇到麻烦。

使用上述方法还意味着需要在将运行该应用程序的所有机器上安装Microsoft Office和Adobe Acrobat(或另一个启用了IE的PDF阅读器),这意味着昂贵的许可费用。

有没有更好的方式让这个内容显示在我的表单在C#中?

可能也有趣:

将文档保存到使用Microsoft Office 2007的XPS(或将其打印到XPS打印机)。

您可以使用XPS查看器组件显示只读XPS文档,也可以逐页显示为PNG或JPEG图像。 使用.NET 3.5 / WPF可以很容易地实现这种渲染。

XpsDocument xpsDoc = new XpsDocument(xpsFileName, System.IO.FileAccess.Read); FixedDocumentSequence docSeq = xpsDoc.GetFixedDocumentSequence(); const double scaleFactor = 0.8; for (int pageNum = 0; pageNum < docSeq.DocumentPaginator.PageCount; pageNum++) { DocumentPage docPage = docSeq.DocumentPaginator.GetPage(pageNum); // FIX: calling GetPage without calling UpdateLayout causes a memory leak ((FixedPage)docPage.Visual).UpdateLayout(); RenderTargetBitmap renderTarget = new RenderTargetBitmap((int)Math.Round(scaleFactor * docPage.Size.Width), (int)Math.Round(scaleFactor * docPage.Size.Height), (int)Math.Round(scaleFactor * 96), (int)Math.Round(scaleFactor * 96), PixelFormats.Default); renderTarget.Render(docPage.Visual); JpegBitmapEncoder encoder = new JpegBitmapEncoder(); encoder.QualityLevel = 75; // Choose type here ie: JpegBitmapEncoder, etc //BitmapEncoder encoder = new PngBitmapEncoder(); // Choose type here ie: JpegBitmapEncoder, etc encoder.Frames.Add(BitmapFrame.Create(renderTarget)); string pageImageFileName = string.Format("{0}-{1}.jpg", Path.Combine(Path.GetDirectoryName(xpsFileName), Path.GetFileNameWithoutExtension(xpsFileName)), pageNum); using (FileStream pageOutStream = new FileStream(pageImageFileName, FileMode.Create, FileAccess.Write)) { encoder.Save(pageOutStream); } } 

此代码需要对PresentationCore,PresentationFramework和ReachFramework程序集的引用。

编辑:上面的代码包含内存泄漏(请参阅在.net中打开XPS文档导致内存泄漏 )。 该示例中已经插入了解决方法。

SpreadsheetGear for .NET有一个Excel兼容的Windows窗体控件 ,它将显示你的Excel工作簿(如果你愿意的话,它会做很多事情)。 你可以看看人们说了什么 , 下载免费试用版,如果你想试试看。

如果您需要生成图像以显示在网页中,SpreasheetGear还可以从图表和单元格范围创build图像 。

你看过Microsoft Word 9.0对象库吗? 可能不可能仅显示原始数据,但是,您可以在这里做些什么,如何在内存中打印临时pdf并显示它?

这是如何显示与C#的PDF

所有这些都是特定于Windows的。

如果您希望在不依赖任何本地安装的情况下在客户端机器上显示某些内容,则必须全面负责渲染,方法是:

  1. 提供一些在客户端运行的非侵入式库,并知道如何渲染它
  2. 使用“正确的”工具/库在服务器上将其渲染到内存映像中,并将该映像发送到客户端。 在您的服务器上运行速度慢,计算量非常大,并且不会为您的客户提供“文档”界面。

苏门答腊是完全免费和开源的。 它不需要任何forms的安装,因此将它包含在你的应用程序中作为一个二进制文件安装在一个子文件夹中,然后直接去掉那个来显示PDF文件就可以正常工作(可以访问pdf IDSnetworking,所以就像执行一样简单

 SumatraPDF.exe {path-to-file} 

如果不是networking可访问的,则将其在后台下载到临时位置,然后按上述方式执行。

办公室文件有点棘手,因为他们都需要本地安装。 这是一个(过时的) 列表请注意,许多下载链接将指向您推荐的最新版本。

另一种方法是使用OpenOffice.org的“便携式”版本,它可以在不需要安装的情况下运行(因此,您可以像苏门答腊文的方法那样放置它),但是在您的系统中有很多缺陷因为它仍然需要安装java,所产生的结果将是可编辑的(除非你对OpenOffice版本进行了修改,这很可能是复杂的),你可能不会得到非常好的显示效果。

如果您有任何安装应用程序的能力来运行任意程序安装查看器可能是最好的,他们是完全免费和可再发行的。

如果您有权访问SharePoint,则可以尝试一种完全不同的方法,即通过Web应用程序完成这一切。 Sharepoint插件将允许直接在浏览器中托pipe文档的视图。 请注意,这几乎需要Internet Explorer才能完全使用。

免责声明,我来自Atalasoft

如果你想在任何种类的.NET GUI(Winforms,ASP.NET,Silverlight,WPF)中显示PDF,我们的带有PDF Reader插件的 DotImage支持它。 它不使用Adobe,也不需要在客户机或服务器上安装任何东西(只是我们的程序集)。