Как открыть 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");
}
вам нужно преобразовать ресурс в формат, приемлемый для программы, которая должна потреблять ваш файл.
один из способов сделать это, чтобы записать содержимое ресурса в файл (временный файл), а затем запустить программу, указывая на файл.
возможность подачи ресурса непосредственно в программу зависит от программы. Я не уверен, что это можно сделать с помощью 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 );
}