如何将现有的PDF查看器添加到我的WPF项目中?

时间:2016-05-25 13:17:25

标签: c# wpf pdf open-source reader

我有一个我在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,或者当我尝试使用“加载文件”函数加载它时为什么会出现异常?

1 个答案:

答案 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个项目,您只需要MouseKeyboardActivityMonitorMoonPdfLib

MoonPdf是一个WPF应用程序,您可以将其作为示例来研究如何实现它,但不是必需的。

3:编译/构建MoonPdfLib,即使它给出了错误,它仍然在创建必要的DLL。

4:查看BIN/RELEASEBIN/DEBUG文件夹中应该有一些DLL的

5:将这些复制到您的项目并引用MoonPdfLib.dll

编辑编辑:

以下是二进制文件:https://sourceforge.net/projects/moonpdf/

您不必自己编译/构建项目。