首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将PDF查看器添加到WPF应用程序中

将PDF查看器添加到WPF应用程序中
EN

Stack Overflow用户
提问于 2016-05-24 12:39:31
回答 5查看 63K关注 0票数 18

我对WPF很陌生,并且试图在我的WPF应用程序中添加一个PDF查看器,但似乎无法想出如何实现它……我尝试了几个教程/例子,我在网上发现,但它们似乎不适合我,因为不同的原因.

例如,我试着按照教程at:https://documentation.devexpress.com/#WPF/CustomDocument114328在设计时添加一个PDF它说

从DX.15.2: Data & Analytics工具箱选项卡中拖动PdfViewerControl并将其拖放到主窗口

然而,我似乎在工具箱中没有Data & Analytics选项卡.有一个Data选项卡,但只有指针、图表、ListView等项。在Visual中添加/启用Data & Analytics工具栏需要做些什么吗?

我试着按照教程at:https://documentation.devexpress.com/#WPF/CustomDocument114329通过代码添加一个PDF它说

打开解决方案资源管理器,右键单击引用并选择添加引用.若要添加PDF查看器库,请执行以下操作。 然后,定位DevExpress.Data.v15.2、DevExpress.Pdf.v15.2.Core、DevExpress.Xpf.DocumentViewer.v15.2.Core和DevExpress.Xpf.PdfViewer.v15.2程序集并激活它们的复选框。

但是当我去Add Reference时,我找不到它在任何地方提到的程序集,如果我‘搜索’它们,就找不到任何项目.

我是不是缺少了一个include,还是需要从某个地方导入一些库来使用这些库?

我试过的另一个例子是:http://www.codeproject.com/Articles/380019/Using-Adobe-Reader-in-a-WPF-app,它说:

将此控件添加到项目中后,Windows窗体设计器应使用空白画布打开。您需要打开工具箱(CTRL + W,X)。作为第一步,为自定义控件添加一个新的选项卡是个好主意--这是工具箱上上下文菜单中的一个选项。展开此新选项卡后,从上下文菜单中选择“选择项”。当出现“选择工具箱项”对话框时,选择COM组件选项卡并选择Adobe (这将将AcroPDF.DLL添加到工具箱中)。

但我似乎找不到它谈论的Choose Toolbox ItemsCOM Components .

有人能告诉我一个更清晰的教程,或者解释我如何在我的WPF应用程序中添加一个PDF查看器吗?我正在使用2015。

编辑

通过执行以下操作,我尝试在应用程序窗口中显示PDF文件:

添加一个<Grid>以将PDF显示到XAML中的GUI中:

代码语言:javascript
复制
<StackPanel>
    <Grid x:Name="browserHost" Height="300" Width="525" Margin="0,0,0,0"></Grid>
</StackPanel>

WebBrowser添加到<Grid>中的C#中,并将其指向要显示的PDF的位置:

代码语言:javascript
复制
        System.Windows.Controls.WebBrowser browser = new System.Windows.Controls.WebBrowser();

public MainWindow()
    {
        InitializeComponent();

        try
        {
            //browser.Navigate("C:\\...\\sample.pdf");
            browserHost.Children.Add(browser);

            //browser.Visible = true;
            browser.Navigate("C:\\...\\sample.pdf");
            browserHost.Opacity = 200;
        }catch(Exception e)
        {
            Console.WriteLine("browser is visible/ not: " + browserHost.Visibility);
        }
    }

    private void Window_Loaded_1(object sender, RoutedEventArgs e)
    {
        /*Create the interop host control */
        //System.Windows.Forms.Integration.WindowsFormsHost host = new System.Windows.Forms.Integration.WindowFormsHost();

        /*Create the MaskedTextBox control */
        //browser.Navigate("C:\\...\\sample.pdf");
        //host.Child = browser;
        browserHost.Children.Add(browser);
    }

但是目前,当我运行我的应用程序时,一旦它加载,我添加到它的browser就会显示一个页面,上面写着:

到网页的导航被取消

然后弹出一个对话框,询问我是否要打开或保存文件(sample.pdf -我试图在浏览器中显示的文件).

为什么它要下载文件而不是显示它呢?如何让browser显示文件而不是试图下载它呢?还是应该在这里使用System.Windows.Controls.WebBrowser以外的其他东西?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-05-24 13:15:59

正如@NawedNabiZada所建议的那样,一种尝试而直接的方法是使用嵌入式InternetExplorer来显示Adobe PDF Reader ActiveX控件。因此,它假定您正在Windows上运行,并安装了Adobe PDF Reader

然后创建包含以下控件的用户控件、窗口等:

代码语言:javascript
复制
<WebBrowser x:Name="pdfWebViewer"></WebBrowser>

在构造函数中导航到空白页:

代码语言:javascript
复制
pdfWebViewer.Navigate(new Uri("about:blank"));

要将PDF文档加载到该控件,请使用以下简单代码:

代码语言:javascript
复制
pdfWebViewer.Navigate(fullPathToPDF);

许多Windows软件都使用这种方法,不仅包括WPF应用程序(包括SAP ),而且还有一个隐藏的问题,参见这个问题

必须启用中的插件才能使其工作。有各种问题,最好使用DC版本。要使Adobe转到IE设置,添加并找到并启用它(AR及以上版本)。

对我来说,与您链接的代码项目文章相比,这是首选的方法。

票数 17
EN

Stack Overflow用户

发布于 2018-02-02 11:29:36

对于任何无意中发现这一点的人来说,他们需要比WebBrowser更多的控制:用Windows10API制作自己的PDF查看器是相当容易的。我写了一个关于如何做它的博客。您可以很容易地向它添加其他特性,比如在上面绘图(签名)等等。

代码可在github上使用。

然而,对于超级高级特性,您可能需要一个昂贵的类库。

票数 17
EN

Stack Overflow用户

发布于 2021-06-21 11:04:20

@LanderV的回答很好。唯一的挑战是他在github上的解决方案使用VS2014和.NET Framwork 4.7.1,而我使用的是VisualStudio2019和.NET 5。我花了一天时间在我的PC上运行Framwork4.7解决方案,但让它在.NET 5下运行非常容易。我在这里解释这两种配置应该采取的步骤。

.NET 5

如果您想知道发生了什么,请阅读learn.microsoft.com:将桌面升级为uwp

在VS中创建一个新的WPF .Net 5解决方案。

在WPF项目文件中,更改

代码语言:javascript
复制
<TargetFramework>net5.0-windows</TargetFramework> 

代码语言:javascript
复制
<TargetFramework>net5.0-windows10.0.19041.0</TargetFramework>

如果您的PC上的Windows是一个不同的版本,相应地更改19041。您可能会收到关于不正确的.json文件的错误消息,但是清除解决方案,重新构建它,就不会有更多的错误。

现在只需复制Githup的源代码:

MainWindow.xaml

MainWindow.xaml.cs

PdfViewer.xaml

PdfViewer.xaml.cs

现在您应该能够运行应用程序了。

.NET框架4.7.1

如果可以的话,使用.NET 5或更高版本,就像上面描述的那样,它要容易得多。要运行Github代码,我必须执行以下步骤:

PDFDocument克隆

下载.NET框架4.7.1,developer pack https://dotnet.microsoft.com/download/dotnet-framework/net471

阅读帮助https://learn.microsoft.com/en-us/windows/apps/desktop/modernize/desktop-to-uwp-enhance

使用NuGet包管理器安装Microsoft.Windows.SDK.Contracts

将出现一条关于安装两次.dll的错误消息。将其保存在nuget位置,删除存储在.NET框架位置中的引用下的引用。

项目应该编译并运行。

从引用中删除Windows,将无法找到它,并且不再需要它。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37413861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档