如何修复从参考资料加载PDF文件?

时间:2019-06-25 15:28:36

标签: c# winforms

我正在使用c#和Visual Studio2017。我在Windows窗体应用程序中有一个Web浏览器视图。我正在尝试在Web浏览器视图中查看PDF文件,但无法从资源文件夹中加载它。我不想在本地存储文件,因为我希望能够在另一台PC上使用它。

在Resources.resx中,单击“添加资源”-“添加现有文件”-选择我的PDF“ test.pdf”,然后在属性中,将文件设置为“嵌入式资源”和“始终复制”

我正在尝试像这样加载文件:

public void loadPDF()
    {
   string file = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,   @"projectPDF\projectPDF\Resources\test.pdf");           
            this.webView.Navigate(file);           


    }

,然后在这样的按钮单击事件上调用它:loadPDF();

目前,当我单击按钮时,该文件未显示在Web浏览器视图中。我要去哪里错了?

1 个答案:

答案 0 :(得分:1)

嵌入的资源没有存储在魔术的“文件夹”中,它实际上是嵌入到EXE本身中的,因此在您的程序生成后无法更改。

复制到您的解决方案中的文件仅仅是您选择嵌入的文件的副本,在构建程序集时,它使用该副本进行嵌入,因为原始文件可能不再位于您先前指定的路径中,尤其是当在不同的计算机上以团队方式工作。

“始终复制”标志对于嵌入式资源没有意义,仅是向Visual Studio指示在程序生成时(使用“调试”配置)应将文件复制到“ bin / Debug”文件夹中。 。

您可以按照以下步骤进行操作,以将PDF存储在临时文件中,然后显示它:

var pdfBytes = Properties.Resources.MY_PDF; // Where "MY_PDF" is the name of your resource
var fileTempPath = Path.GetTempFileName(); // Get a temp file path
File.WriteAllBytes(fileTempPath, pdfBytes); // Write the temp file with PDF contents
webView.Navigate(fileTempPath); // navigate to the temp file

使用pdf完成操作后,别忘了清理临时文件!