我正在使用 WPF 和 C# 开发一个应用程序。我目前正在考虑添加功能,以便能够在我的应用程序中加载和查看 PDF 文件(以及具有自定义扩展名的文件)。
我已经设法在我的应用程序中显示 PDF 文件,使用
System.Windows.Controls.WebBrowser
显示文档,但是,这并没有让我对文档进行我想要的控制...
例如,当使用
WebBrowser
查看文档时,用户可以保存/打印文档,或者在这些文档上选择和复制文本等,但由于我将使用它来显示一些机密信息,所以我想要在我正在显示的文档上“禁用”这些功能。
基本上,我想在应用程序中在屏幕上显示文档,但不允许用户与文档进行任何其他交互。
我知道这不会阻止用户对内容进行屏幕截图/照片,但至少我会尽我所能确保信息保密。
但是,通过使用
WebBrowser
显示 PDF 文件(正如我已经完成的那样),用户会自动使用 WebBrowser
提供的内置功能(保存、打印、突出显示文本、复制),并且我找不到禁用这些功能的方法。
我似乎想使用 PDF 查看器控件来显示 PDF,而不是 Web 浏览器,并且我决定尝试使用名为 PDFSharp 的开源控件(https://sourceforge.net/projects/pdfsharp /?source=typ_redirect)。我已经下载了 MoonPDF 的源代码,但我不确定现在如何将其合并到我的应用程序中......?
我已经下载了源文件,但似乎在任何地方都没有
.sln
文件,因此我无法自行构建/运行 PDF 查看器...我将如何在我的应用程序中使用它?我不希望能够“创建 PDF 查看器的实例”以在我的应用程序中使用 - 以便我可以将其“作为对象添加”到我的应用程序的 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 不会显示,如果我尝试加载 PDF,请使用调用
openFileMenuItem_click(...)
的菜单项函数,我的代码崩溃了,我得到一个 BadImageFormatException ,上面写着:
BadImageFormatException 未处理
MoonPdfLib.dll 中发生“System.BadImageFormatException”类型的未处理异常
但我知道我尝试打开的文件没有任何问题,因为我可以在 Adobe 中毫无问题地打开和查看它...
有什么想法为什么应用程序不会自动加载和显示我在代码中引用的 PDF,或者为什么当我尝试使用“加载文件”功能加载它时遇到异常?
.sln 文件只是解决方案。您可以创建自己的解决方案。或者您可以从here获取moonPDF并构建它。在你自己的项目中你必须引用它。 一旦引用它,您就可以将其添加到您的窗口中,如下所示:
<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:编译/构建
MoonPdfLib
,即使它给出错误,它仍然会创建必要的DLL。
4:查看
BIN/RELEASE
或BIN/DEBUG
文件夹,应该有一些DLL的
5:将它们复制到您的项目中并引用 MoonPdfLib.dll
编辑编辑:
这是二进制文件:https://sourceforge.net/projects/moonpdf/
您不必自己编译/构建项目。
看看这个项目:
https://sourceforge.net/projects/laila-pdf/
它包括一个增强的 WPF PDF 查看器,具有平滑滚动、缩放、搜索功能、文本选择和复制以及基本 PDF 表单支持。它还包括一个 PDF 打印机对象。
但是,如果您愿意,您可以只向用户提供缩放工具,其余功能将保持隐藏。
它是免费且开源的,基于 Chrome Pdfium 库。