如何将现有的 PDF 查看器添加到我的 WPF 项目?
How to add an existing PDF viewer to my WPF project?
我有一个用 WPF 和 C# 开发的应用程序。我目前正在考虑添加能够在我的应用程序中加载和查看 PDF 文件(以及具有自定义扩展名的文件)的功能。
我已经设法让 PDF 文件显示在我的应用程序中,使用 System.Windows.Controls.WebBrowser
来显示文档,但是,这并没有给我想要的对文档的控制...
例如,当使用WebBrowser
查看文档时,用户可以保存/打印文档,或者select复制这些文档中的文本等,但是由于我要正在使用它来显示一些机密信息,我想 'disable' 我正在显示的文档上的这些功能。
基本上,我想在我的应用程序中在屏幕上显示文档,但不允许用户与文档进行任何其他交互。
我知道这不会阻止用户截取内容的屏幕截图/照片,但至少我会尽我所能确保信息保密。
然而,通过使用 WebBrowser
显示 PDF 文件,就像我已经做的那样,用户自动拥有 WebBrowser
提供的内置功能(保存、打印,突出显示文本,复制),我找不到禁用这些功能的方法。
我似乎想使用 PDF 查看器控件来显示 PDF,而不是 Web 浏览器,因此我决定尝试使用一种名为 PDFSharp (https://sourceforge.net/projects/pdfsharp/?source=typ_redirect) 的开源控件。我已经下载了 MoonPDF 的源代码,但我不确定现在如何将其整合到我的应用程序中...?
我已经下载了源文件,但似乎没有 .sln
文件,所以我无法自行构建/ 运行 PDF 查看器...我将如何在我的应用程序中使用它?我不想 'create an instance' 的 PDF 查看器在我的应用程序中使用 - 这样我就可以 'add it as an object' 我的应用程序的 GUI - 我该怎么做?
编辑
我更改了我的应用程序以使用 MoonPdf 查看器 - 构建了 MoonPdf,并将 DLL 复制到我的项目中,我编辑了我的 XAML 以使用库:
<Window ...
xmlns:mpp="clr-namespace:MoonPdfLib;assembly=MoonPdfLib"
...>
<DockPanel>
...
<Grid x:Name="host" DockPanel.Dock="Top" Margin="0,0,0,0">
<mpp:MoonPdfPanel x:Name="PdfPanel" ... />
</Grid>
</DockPanel>
</Window>
而我的.cs文件如下:
public partial class MainWindow:Window{
String docFP = "C:\...\abc.pdf";
public MainWindow(){
InitializeComponent();
try{
host.Children.Add(PdfPanel);
host.Opacity = 200;
PdfPanel.OpenFile(docFP, null);
}catch(Exception e){
Console.WriteLine("browser is visible/ not: " + host.Visibility);
}
}
private void Window_Loaded_1(object sender, RoutedEventArgs e){
host.Children.Add(PdfPanel);
}
private void openFileMenuItem_click(object sender, RoutedEventArgs e){
// Working code for opening an 'open file' dialog, selecting the file, and loading it.
}
...
但是,当我当前 运行 我的代码时,应用程序打开,但是应该直接在我的代码中打开和显示的 PDF 没有显示,如果我尝试加载一个,使用调用 openFileMenuItem_click(...)
函数的菜单项,我的代码中断,我得到一个 BadImageFormatException ,上面写着:
BadImageFormatException was unhandled
An unhandled exception of type 'System.BadImageFormatException' occurred in MoonPdfLib.dll
但我知道我尝试打开的文件没有任何问题,因为我可以在 Adobe 中毫无问题地打开和查看它...
为什么应用程序没有自动加载和显示我在代码中引用的 PDF,或者为什么当我尝试使用我的 'load file' 函数加载它时出现异常?
.sln 文件只是解决方案。您可以创建自己的解决方案。或者您可以从 here 获取 moonPDF 并构建它。在您自己的项目中,您必须引用它。
一旦它被引用,您就可以像这样将它添加到您的 window 中:
<Window xmlns:mpp="clr-namespace:MoonPdfLib;assembly=MoonPdfLib" ...>
<mpp:MoonPdfPanel Background="LightGray" ViewType="SinglePage" PageDisplay="ContinuousPages" PageMargin="0,2,4,2" AllowDrop="True"/>
</Window>
编辑:
下载 MOONPDF:https://github.com/reliak/moonpdf
1: 转到 src 文件夹并打开 MoonPdf.sln
2:解决方案包含3个项目,你只需要MouseKeyboardActivityMonitor
和MoonPdfLib
MoonPdf
是一个 WPF 应用程序,您可以将其用作示例来研究应如何实现它,但这不是必需的。
3: Compile/Build MoonPdfLib
,即使出现错误,它仍然会创建必要的 DLL。
4: 查看BIN/RELEASE
或BIN/DEBUG
文件夹应该有一些DLL的
5:将它们复制到您的项目并引用 MoonPdfLib.dll
编辑编辑:
这是二进制文件:https://sourceforge.net/projects/moonpdf/
您不必自己 compile/build 项目。
我有一个用 WPF 和 C# 开发的应用程序。我目前正在考虑添加能够在我的应用程序中加载和查看 PDF 文件(以及具有自定义扩展名的文件)的功能。
我已经设法让 PDF 文件显示在我的应用程序中,使用 System.Windows.Controls.WebBrowser
来显示文档,但是,这并没有给我想要的对文档的控制...
例如,当使用WebBrowser
查看文档时,用户可以保存/打印文档,或者select复制这些文档中的文本等,但是由于我要正在使用它来显示一些机密信息,我想 'disable' 我正在显示的文档上的这些功能。
基本上,我想在我的应用程序中在屏幕上显示文档,但不允许用户与文档进行任何其他交互。
我知道这不会阻止用户截取内容的屏幕截图/照片,但至少我会尽我所能确保信息保密。
然而,通过使用 WebBrowser
显示 PDF 文件,就像我已经做的那样,用户自动拥有 WebBrowser
提供的内置功能(保存、打印,突出显示文本,复制),我找不到禁用这些功能的方法。
我似乎想使用 PDF 查看器控件来显示 PDF,而不是 Web 浏览器,因此我决定尝试使用一种名为 PDFSharp (https://sourceforge.net/projects/pdfsharp/?source=typ_redirect) 的开源控件。我已经下载了 MoonPDF 的源代码,但我不确定现在如何将其整合到我的应用程序中...?
我已经下载了源文件,但似乎没有 .sln
文件,所以我无法自行构建/ 运行 PDF 查看器...我将如何在我的应用程序中使用它?我不想 'create an instance' 的 PDF 查看器在我的应用程序中使用 - 这样我就可以 'add it as an object' 我的应用程序的 GUI - 我该怎么做?
编辑
我更改了我的应用程序以使用 MoonPdf 查看器 - 构建了 MoonPdf,并将 DLL 复制到我的项目中,我编辑了我的 XAML 以使用库:
<Window ...
xmlns:mpp="clr-namespace:MoonPdfLib;assembly=MoonPdfLib"
...>
<DockPanel>
...
<Grid x:Name="host" DockPanel.Dock="Top" Margin="0,0,0,0">
<mpp:MoonPdfPanel x:Name="PdfPanel" ... />
</Grid>
</DockPanel>
</Window>
而我的.cs文件如下:
public partial class MainWindow:Window{
String docFP = "C:\...\abc.pdf";
public MainWindow(){
InitializeComponent();
try{
host.Children.Add(PdfPanel);
host.Opacity = 200;
PdfPanel.OpenFile(docFP, null);
}catch(Exception e){
Console.WriteLine("browser is visible/ not: " + host.Visibility);
}
}
private void Window_Loaded_1(object sender, RoutedEventArgs e){
host.Children.Add(PdfPanel);
}
private void openFileMenuItem_click(object sender, RoutedEventArgs e){
// Working code for opening an 'open file' dialog, selecting the file, and loading it.
}
...
但是,当我当前 运行 我的代码时,应用程序打开,但是应该直接在我的代码中打开和显示的 PDF 没有显示,如果我尝试加载一个,使用调用 openFileMenuItem_click(...)
函数的菜单项,我的代码中断,我得到一个 BadImageFormatException ,上面写着:
BadImageFormatException was unhandled
An unhandled exception of type 'System.BadImageFormatException' occurred in MoonPdfLib.dll
但我知道我尝试打开的文件没有任何问题,因为我可以在 Adobe 中毫无问题地打开和查看它...
为什么应用程序没有自动加载和显示我在代码中引用的 PDF,或者为什么当我尝试使用我的 'load file' 函数加载它时出现异常?
.sln 文件只是解决方案。您可以创建自己的解决方案。或者您可以从 here 获取 moonPDF 并构建它。在您自己的项目中,您必须引用它。 一旦它被引用,您就可以像这样将它添加到您的 window 中:
<Window xmlns:mpp="clr-namespace:MoonPdfLib;assembly=MoonPdfLib" ...>
<mpp:MoonPdfPanel Background="LightGray" ViewType="SinglePage" PageDisplay="ContinuousPages" PageMargin="0,2,4,2" AllowDrop="True"/>
</Window>
编辑:
下载 MOONPDF:https://github.com/reliak/moonpdf
1: 转到 src 文件夹并打开 MoonPdf.sln
2:解决方案包含3个项目,你只需要MouseKeyboardActivityMonitor
和MoonPdfLib
MoonPdf
是一个 WPF 应用程序,您可以将其用作示例来研究应如何实现它,但这不是必需的。
3: Compile/Build MoonPdfLib
,即使出现错误,它仍然会创建必要的 DLL。
4: 查看BIN/RELEASE
或BIN/DEBUG
文件夹应该有一些DLL的
5:将它们复制到您的项目并引用 MoonPdfLib.dll
编辑编辑:
这是二进制文件:https://sourceforge.net/projects/moonpdf/
您不必自己 compile/build 项目。