我是WPF的新手,我正在尝试将PDF查看器添加到我的WPF应用程序中,但似乎无法解决如何做到这一点...我已经尝试过以下几个教程/示例在网上发现,但由于各种原因它们似乎不适合我...
例如,我尝试按照以下教程进行操作:https://documentation.devexpress.com/#WPF/CustomDocument114328 在设计时添加PDF查看器 - 它说
从DX.15.2中拖动PdfViewerControl:数据& “分析工具箱”选项卡并将其拖放到主窗口
但是,我似乎在工具箱中没有Data & Analytics
标签...有一个Data
标签,但是它只有指针,图表,ListView等项目。有吗我需要做些什么才能在Visual Studio中添加/启用Data & Analytics
工具栏?
我尝试了以下教程: https://documentation.devexpress.com/#WPF/CustomDocument114329通过代码添加PDF查看器 - 它说
打开Solution Explorer,右键单击References并选择Add Reference ...以添加PDF Viewer Library。
然后,找到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 PDF Reader”(这会将AcroPDF.DLL添加到工具箱中)。
但我似乎找不到它所说的Choose Toolbox Items
或COM Components
......
有人能指出一个更清晰的教程,或者解释如何在我的WPF应用程序中添加PDF查看器吗?我正在使用Visual Studio 2015。
修改
我试图通过执行以下操作在我的应用程序窗口中显示PDF文件:
添加<Grid>
以在XAML中将PDF显示到GUI:
<StackPanel>
<Grid x:Name="browserHost" Height="300" Width="525" Margin="0,0,0,0"></Grid>
</StackPanel>
将WebBrowser
添加到C#中的<Grid>
,并将其指向我想要显示的PDF的位置:
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
以外的其他内容吗?
答案 0 :(得分:9)
正如@NawedNabiZada已经提出的,一种经过验证的直接方法是使用嵌入式InternetExplorer来显示Adobe PDF Reader
ActiveX控件。因此,它假设您在Windows上运行并安装了Adobe PDF Reader
。
然后创建一个包含以下控件的用户控件,窗口等:
<WebBrowser x:Name="pdfWebViewer"></WebBrowser>
在构造函数中导航到空白页面:
dfWebViewer.Navigate(new Uri("about:blank"));
要将PDF文档加载到该控件,请使用以下简单代码:
pdfWebViewer.Navigate(fullPathToPDF);
许多Windows软件不仅使用WPF应用程序(包括SAP客户端)使用此方法,而且存在隐藏问题,请参阅this question。
必须启用Internet Explorer中的Adobe PDF Reader Addon才能使其正常工作。 Acrobat Reader XI存在各种问题,最好使用DC版本。要启用Adobe PDF,请转到IE设置,附加组件并查找Adobe PDF Reader并启用它(AR XI及更高版本)。
对我而言,与您链接的代码项目文章相比,这是首选方式。
答案 1 :(得分:4)
对于任何绊脚石的人来说,需要比WebBrowser更多的控制:使用Windows 10 API制作自己的PDF查看器非常容易。我写了blog如何做到这一点。您可以轻松地向其添加其他功能,例如在其顶部绘制(签名)等。
该代码可在github上找到。
但是对于超级高级功能,您可能需要其中一个昂贵的库。
答案 2 :(得分:2)
答案 3 :(得分:0)
对于WPF pdf查看器,您可以使用http://pdfprinting.net/
答案 4 :(得分:0)
@LanderV 的回答效果很好。唯一的挑战是他在 github 上的解决方案使用 VS2014 和 .NET Framwork 4.7.1,而我使用的是 Visual Studio 2019 和 .NET 5。我花了一天时间才让 Framwork 4.7 解决方案在我的PC,但让它在 .NET 5 下运行非常容易。我在这里解释了这两种配置的步骤。
.NET 5
如果您想知道发生了什么,请阅读docs.microsoft.com: modernize desktop to uwp。
在 VS 中创建一个新的 WPF .Net 5 解决方案。
在WPF项目文件中,更改
<TargetFramework>net5.0-windows</TargetFramework>
到
<TargetFramework>net5.0-windows10.0.19041.0</TargetFramework>
如果您 PC 上的 Windows 是不同版本,请相应地更改 19041。您可能会收到关于 .json 文件不正确的错误消息,但请清理解决方案,重新构建它,应该不会再有错误了。
现在只需从 Githup 复制源代码:
主窗口.xaml
主窗口.xaml.cs
PdfViewer.xaml
PdfViewer.xaml.cs
现在您应该可以运行应用程序了。
.NET 框架 4.7.1
如果可以,请使用 .NET 5 或更高版本,如上所述,会容易得多。要按原样运行 Github 代码,我必须执行以下步骤:
从 https://github.com/LanderVe/WPF_PDFDocument 克隆
下载 .NET Framework 4.7.1,开发包 https://dotnet.microsoft.com/download/dotnet-framework/net471
阅读帮助https://docs.microsoft.com/en-us/windows/apps/desktop/modernize/desktop-to-uwp-enhance
使用 NuGet 包管理器安装 Microsoft.Windows.SDK.Contracts
将出现关于 .dll 安装两次的错误消息。保持一个 在 nuget 位置,删除存储在 .NET 中的 References 下的那个 框架位置。
项目应该编译并运行
从引用中删除 Windows,它无法找到并且是没有 需要更长的时间。