Как исправить загрузку PDF-файла из Ресурсов? - PullRequest
0 голосов
/ 25 июня 2019

Я использую c # и visual studio 2017. У меня есть веб-браузер в моем приложении Windows Form. Я пытаюсь просмотреть файл PDF в представлении веб-браузера, но не могу загрузить его из папки ресурсов. Я не хочу хранить файл локально, так как хочу иметь возможность использовать его на другом ПК.

В 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 ();

В данный момент файл не отображается в представлении веб-браузера, когда я нажимаю кнопку. Куда я иду не так?

1 Ответ

1 голос
/ 25 июня 2019

Встроенные ресурсы не хранятся в волшебной «Папке», они буквально встраиваются в сам EXE и поэтому не могут быть изменены после сборки вашей программы.

Файл, который копируется в ваше решение, является просто копией файла, выбранного для встраивания, при сборке сборки он использует эту копию для встраивания, поскольку исходный файл может больше не находиться по пути, указанному вами ранее, особенно когда работая в командах на разных компьютерах.

Флаг «Копировать всегда» не имеет значения для встроенных ресурсов, он просто указывает Visual Studio, что файл должен быть скопирован в папку «bin / Debug» при сборке программы (с использованием конфигурации «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!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...