Как открыть PDF-файл, который также является ресурсом проекта?

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

Я установил действие сборки в "Embedd Resource". Так что теперь я хочу иметь возможность открыть его. Однако, когда я пытаюсь получить доступ к ресурсу - My.Resources.HelpFile - это массив байтов. Как бы я открыл это, если бы я знаю что конечный пользователь не имеет программа подходит для открытия PDF документов?

Если я пропустил предыдущий вопрос, пожалуйста, мне точку в правильном направлении. Я нашел несколько вопросов об открытии PDF внутри приложение, но мне все равно, если Adobe Reader открывается отдельно.

7 ответов


создать новый процесс:

string path = Path.Combine(Directory.GetCurrentDirectory(), "PDF-FILE.pdf");
Process P = new Process {
    StartInfo = {FileName = "AcroRd32.exe", Arguments = path}
};
P.Start();

чтобы это работало, настройка Visual Studio Copy to Output Directory должна быть Copy Always для файла PDF.


проверьте это легко открыть pdf-файл из ресурса.

private void btnHelp_Click(object sender, EventArgs e)
    {            
        String openPDFFile = @"c:\temp\pdfName.pdf";
        System.IO.File.WriteAllBytes(openPDFFile, global::ProjectName.Properties.Resources.resourcePdfFileName);            
        System.Diagnostics.Process.Start(openPDFFile);             
    }   

Если единственная точка PDF должна быть открыта читателем PDF, не вставляйте ее в качестве ресурса. Вместо этого скопируйте его в разумное место (вы можете поместить его туда, где находится EXE), и запустите его оттуда. Нет смысла копировать его снова и снова.


"ReferenceGuide" - это имя файла pdf, который я добавил в свои ресурсы.

using System.IO;
using System.Diagnostics;

    private void OpenPdfButtonClick(object sender, EventArgs e)
    {
        //Convert The resource Data into Byte[] 
        byte[] PDF = Properties.Resources.ReferenceGuide;

        MemoryStream ms = new MemoryStream(PDF);

        //Create PDF File From Binary of resources folders helpFile.pdf
        FileStream f = new FileStream("helpFile.pdf", FileMode.OpenOrCreate);

        //Write Bytes into Our Created helpFile.pdf
        ms.WriteTo(f);
        f.Close();
        ms.Close();

        // Finally Show the Created PDF from resources 
        Process.Start("helpFile.pdf");
    }

File.Create("temp path");
File.WriteAllBytes("temp path", Resource.PDFFile)

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

один из способов сделать это, чтобы записать содержимое ресурса в файл (временный файл), а затем запустить программу, указывая на файл.

возможность подачи ресурса непосредственно в программу зависит от программы. Я не уверен, что это можно сделать с помощью Adobe Reader.

чтобы записать содержимое ресурса в файл, вы можно создать экземпляр потоке MemoryStream class и передайте свой массив байтов своему конструктору


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

private void button1_Click(object sender, EventArgs e)
   {
    string openPDFfile =  @"c:\temp\pdfName.pdf";
    ExtractResource("WindowsFormsApplication1.pdfName.pdf", openPDFfile);
    Process.Start(openPDFfile);
   }

     void ExtractResource( string resource, string path )
            {
                Stream stream = GetType().Assembly.GetManifestResourceStream( resource );
                byte[] bytes = new byte[(int)stream.Length];
                stream.Read( bytes, 0, bytes.Length );
                File.WriteAllBytes( path, bytes );
            }

enter image description here