【问题标题】:How to add an existing PDF viewer to my WPF project?如何将现有的 PDF 查看器添加到我的 WPF 项目?
【发布时间】:2016-09-23 03:13:00
【问题描述】:

我有一个正在 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,如果我尝试加载一个,请使用调用 @ 的菜单项987654329@ 函数,我的代码中断,我得到一个 BadImageFormatException ,它说:

BadImageFormatException 未处理

MoonPdfLib.dll 中出现“System.BadImageFormatException”类型的未处理异常

但我知道我尝试打开的文件没有任何问题,因为我可以在 Adob​​e 中打开并查看它没有任何问题...

任何想法为什么应用程序没有自动加载和显示我在代码中引用的 PDF,或者为什么我在尝试使用“加载文件”功能加载它时遇到异常?

【问题讨论】:

  • PDFSharp 有 WPF 查看器控件吗?

标签: c# wpf pdf open-source reader


【解决方案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>

编辑:

下载月亮PDF: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/

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

【讨论】:

  • 感谢您的建议 - 我已经尝试过了,但目前我的 XAML 中的 &lt;mpp:MoonPdfPanel ... /&gt; 行出现编译错误,它表示 the name 'MoonPdfPanel' does not exist in the namespace 'mpp'.. . 当我尝试运行应用程序时,我得到一个XamlParseException- 如果我在那个异常上“查看详细信息”,InnerException 说“无法加载文件或程序集 MoonPdfLib... 或其依赖项之一。尝试加载格式不正确的程序。”...任何想法为什么会这样?我该如何解决这个问题?
  • 我在尝试运行应用程序时得到的 XamlParseException 与编译错误不在同一行 - 它在我用于 MoonPdfPanel 的程序集引用上 - 行:xmlns:mpp="clr-namespace:MoonPdfLib;assembly=MoonPdfLib".
  • 你必须编译另一个项目并在你的.当您在项目中引用它时,请确保所有 .DLL 都与您发布的程序一起复制。
  • 您可以手动进行,也可以在引用的属性中选择复制。
  • 我从sourceforge.net/projects/moonpdf 下载了MoonPdf 项目的源代码,但是当我尝试构建它时,我收到一条错误消息:Severity Code Description Project File Line Suppression State Error The command "xcopy C:\...\moonpdf\src\..\bin\MuLib\AnyCPU\libmupdf.dll C:\...\MoonPdf\bin\Debug\ /Y" exited with code 4.。如果我只是尝试运行它,弹出窗口会显示错误:A project with an Output Type of Class Library cannot be started directly. In order to debug this project, add an executable project to this solution which references the library project.
猜你喜欢
  • 2016-09-21
  • 1970-01-01
  • 2013-02-10
  • 2019-09-23
  • 2021-07-07
  • 2011-06-23
  • 2019-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多