在Winform中打开PDF文件而无需外部依赖的.NET实现

16

是否有免费的库可以让我在winform项目中打开PDF并显示?我知道我可以在Adobe Reader或其他类似软件中打开它,但对我来说它总是显得非常臃肿,并且我要依赖于其是否已安装。是否有一个漂亮的轻量级替代品,我可以只需在我的项目中包含一个dll或类似物,避免外部依赖。

我不需要太多功能,只需要查看、更改页面缩放等。

我见过一些库,但它们似乎是关于创建PDF而不是查看。


1
2018年,Google终于免费提供了完整的PDF解决方案pdfium。同时还提供了PDF查看器控件。详情请参见此处:第二个答案:https://dev59.com/eXRB5IYBdhLWcg3wxZ7Y。 - bh_earth0
9个回答

9
我不确定您如何称呼“依赖项”,因为您总是需要依赖一些外部代码来渲染PDF,除非您将整个PDF渲染源代码捆绑到项目中。
有一些商业渲染器和极少数免费的渲染器。
如果您想避免无法捆绑的依赖项,那么也许您可以查看SumatraPDF源代码,这是一个用于Windows的开源PDF查看器,它使用MuPDF
还有Poppler,它使用Xpdf作为渲染引擎。 所有这些都很好,但它们需要相当多的承诺来使其工作并与.Net接口。
大多数其他开源库仅用于创建和管理PDF页面,我不知道有任何一个实际进行呈现的库;这是一个非常难解决的问题。您可能仍然希望考虑使用GhostScript作为解释器,因为呈现页面是一个相当简单的过程。
缺点是您需要重新打包它以将其安装到您的应用程序中,或者将其作为先决条件(或至少是安装过程的一部分)。这并不是一个大挑战,肯定比将其他呈现引擎转换为.Net要容易得多。
看一下我今天回答的这个SO问题
其中包含一些更多信息和我几个月前在另一个论坛上发布的一些工作的.Net代码的链接。

7

首先需要引用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可能会被遗留在那里。

你能否使用你所描述的库处理PDF中的文本,并在打开的PDF文件中将其高亮显示? - Yoda
4
添加引用后拖动的控件名称是什么? - Yoda

5
我建议您考虑使用轻量级的替代Adobe Reader软件,Foxit Reader可能是一个很好的选择。它只包含一个.exe文件,可以与您的应用程序一起捆绑使用,因此不需要安装。根据其最终用户许可协议(EULA),只要您的应用程序未安装在移动设备上,这是被允许的。您所需做的就是启动读取器作为新进程,指向适当的PDF文件。显然,这种方法的缺点是它无法集成到您的应用程序界面中。

2

2

安装了Acrobat Reader的ActiveX控件应该可以使用,可以通过设计器将其拖入或使用此类工具

这需要在客户端安装相应版本的阅读器,但由于您表示您可以自己启动阅读器,所以这不应该是一个问题。 阅读器


是的,但正如我所说,目前这不是一个问题,但我宁愿不要有依赖关系,因为事情很快就会改变。 - PeteT
同意,这不应该是解决方案,因为OP说“没有依赖关系”... Renaud的答案更加完整。 - Losbear

0

将WebBrowser控件放置在您的表单上。 strPdfFile =“C:\ SomeFile.pdf” webBrowser.Url = new Uri(strPdfFile);

这在我们尝试Win7-64位系统之前效果很好。现在需要进行一些调试。


1
那个 webBrowser 控件仍需要某种 PDF 阅读器插件。 - JohnSaps
浏览器还不够强大,难道吗? - gumuruh

0

有一个免费的PDF库。它主要用于编辑内容,但可能会有所帮助。


0

这是一个猜测。

浏览器使用插件来渲染 PDF 的方式。我不确定是否需要安装应用程序。

您可以使用 Foxit Reader 或 Sumatra PDF。
另外,您可以在 Windows 窗体上托管浏览器控件。


0
你可以从Nuget使用Spire.PDFViewer。请参见此处

这不是一个免费的库。 - viraptor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接