是否有免费的图书馆允许我打开PDF并在winform项目上显示它。我知道我可以在adobe reader或者其他东西中打开它,但它总是让我感到臃肿,我会依赖它安装。有一个很好的轻量级替代方案,我可以在我的项目中包含一个DLL或类似的避免外部依赖。
我不需要太多功能,只需查看,更改页面缩放..
我见过几个库,但它们似乎是关于创建PDF而不是查看。
答案 0 :(得分:8)
我不确定你所谓的'依赖',因为除非你将整个PDF渲染源捆绑在你的项目中,否则你将不得不依赖一些外部代码来渲染PDF。
有一些商业渲染器和极少数免费渲染器。
如果您想避免无法捆绑的依赖项,那么您可以查看source code的SumatraPDF,这是一个使用MuPDF的Windows的OpenSource PDF查看器。
还有Poppler,一个使用Xpdf作为渲染引擎的渲染引擎。
所有这些都很棒,但它们需要相当多的承诺才能使它们与.Net一起工作和接口。
大多数其他开源库仅用于创建和管理PDF页面,我不知道实际上是否有任何渲染;这是一个难以解决的难题。
您可能仍然希望考虑使用GhostScript作为解释器,因为渲染页面是一个相当简单的过程 缺点是您需要重新打包以将其与您的应用程序一起安装,或者将其作为先决条件(或至少是安装过程的一部分)。 这不是一个很大的挑战,而且比将其他渲染引擎按入.Net更容易。
看看今天我回答的this SO question 它包含更多信息以及几个月前我在另一个论坛上发布的working .Net code的链接。
答案 1 :(得分:5)
我会将Foxit Reader视为Adobe Reader的轻量级替代品。它由一个.exe文件组成,您可以将其与应用程序捆绑在一起,因此不需要任何安装。根据他们的EULA,只要您的应用程序未安装在移动设备上,就允许这样做。您所要做的就是将读取器作为一个新进程启动,指向相应的pdf。显然,这种方法的缺点是它不会集成到应用程序的界面中。
答案 2 :(得分:5)
首先,您需要参考Adobe Reader ActiveX控件
Adobe Acrobat浏览器控件类型库1.0
%programfiles& \ Common Files \ Adobe \ Acrobat \ ActiveX \ AcroPDF.dll
然后,您只需从工具箱中将其拖到Windows窗体中即可。
并使用这样的代码来初始化ActiveX控件。
private void InitializeAdobe(string filePath)
{
try
{
this.axAcroPDF1.LoadFile(filePath);
this.axAcroPDF1.src = filePath;
this.axAcroPDF1.setShowToolbar(false);
this.axAcroPDF1.setView("FitH");
this.axAcroPDF1.setLayoutMode("SinglePage");
this.axAcroPDF1.Show();
}
catch (Exception ex)
{
throw;
}
}
确保表单关闭后您处置ActiveX控件
this.axAcroPDF1.Dispose();
this.axAcroPDF1 = null;
否则Acrobat可能会被遗弃。
答案 3 :(得分:3)
与acrobat reader一起安装的ActiveX控件应该可以使用,可以通过设计器将其删除,也可以使用this之类的内容。
这将要求在客户端上安装相关版本的阅读器,但由于您表明无论如何都可以启动它,这应该不是问题。读取器
答案 4 :(得分:1)
看看这个。它需要相当多的库(包括GhostScript),所以它的重量不是很轻。但所有依赖项都包括PDF的原生阅读。它在VB中 - 但如果你需要C#,可以翻译:
http://www.codeproject.com/Articles/37458/PDF-Viewer-Control-Without-Acrobat-Reader-Installe
答案 5 :(得分:1)
您可以使用Nuget的Spire.PDFViewer。见here
答案 6 :(得分:0)
有免费PDF library。它主要是编辑内容,但它可能有所帮助。
答案 7 :(得分:0)
这是猜测。
浏览器使用插件在其中呈现PDF的方式。我不确定是否需要安装应用程序。
您可以使用福昕阅读器或苏门答腊PDF 并且,您可以在winform上托管浏览器控件。
答案 8 :(得分:0)
在表单上放置webBrowser控件。 strPdfFile =" C:\ SomeFile.pdf" webBrowser.Url = new Uri(strPdfFile);
这对我们有用,直到尝试使用Win7-64bit系统。现在需要做一些调试。