我有一个我在WPF和C#中开发的应用程序。我目前正在考虑添加功能,以便能够在我的应用程序中加载和查看PDF文件(以及带有自定义扩展名的文件)。
我设法在我的应用程序中显示PDF文件,使用System.Windows.Controls.WebBrowser
来显示文档,但是,这并不能让我对文档有所控制...
例如,使用WebBrowser
查看文档时,用户可以保存/打印文档,或选择&在这些文档上复制文本等,但由于我将使用它来显示一些机密信息,我想在我正在显示的文档上“禁用”这些功能。
基本上,我想在我的应用程序中在屏幕上显示文档,但不允许用户与文档进行任何其他交互。
我知道这不会阻止用户截取内容的截图/照片,但至少我正在尽我所能确保信息保密。
但是,通过使用WebBrowser
显示PDF文件,我已经使用WebBrowser
自动拥有内置功能(保存,打印,突出显示)文本,副本),我找不到禁用这些功能的方法。
似乎我想使用PDF Viewer控件来显示PDF而不是Web浏览器,我决定尝试使用名为PDFSharp(https://sourceforge.net/projects/pdfsharp/?source=typ_redirect)的开源软件。我已经下载了MoonPDF的源代码,但我不确定我现在如何将它合并到我的应用程序中......?
我已经下载了源文件,但是在任何地方似乎都没有.sln
文件,所以我无法自己构建/运行PDF查看器...我如何在里面使用它我的应用程序?我不能“创建PDF查看器的实例”以在我的应用程序中使用 - 这样我就可以“将它作为对象添加到我的应用程序的GUI中 - 我将如何解决这个问题?” p>
修改
我已经对我的应用程序进行了更改以使用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,如果我尝试加载一个,则使用调用{的菜单项{1}}函数,我的代码断了,我得到一个BadImageFormatException,它说:
BadImageFormatException未处理
MoonPdfLib.dll中发生未处理的“System.BadImageFormatException”类型异常
但我知道我试图打开的文件没有任何问题,因为我可以在Adobe中打开并查看它没有问题...
为什么应用程序没有自动加载和显示我在代码中引用的PDF,或者当我尝试使用“加载文件”函数加载它时为什么会出现异常?
答案 0 :(得分:1)
.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/
您不必自己编译/构建项目。