2011-12-22 16 views
6

मेरे पास एक पीडीएफ फाइल है जिसे मैंने अपनी परियोजना में संसाधन के रूप में आयात किया है। फ़ाइल एक सहायता दस्तावेज़ है इसलिए मैं इसे प्रत्येक तैनाती के साथ शामिल करने में सक्षम होना चाहता हूं। मैं इस फ़ाइल को एक बटन के क्लिक पर खोलने में सक्षम होना चाहता हूं।एक पीडीएफ फाइल कैसे खोलें जो एक परियोजना संसाधन भी है?

मैंने "एंबेडेड संसाधन" में बिल्ड एक्शन सेट किया है। तो अब मैं इसे खोलने में सक्षम होना चाहता हूँ। हालांकि, जब मैं संसाधन तक पहुंचने का प्रयास करता हूं - My.Resources.HelpFile - यह एक बाइट सरणी है। अगर मैं जानता हूं कि अंतिम उपयोगकर्ता के पास पीडीएफ दस्तावेज़ खोलने के लिए उपयुक्त प्रोग्राम है तो मैं इसे खोलने के बारे में कैसे जाउंगा?

यदि मुझे पिछले प्रश्न से चूक गया तो कृपया मुझे सही दिशा में इंगित करें। मुझे के भीतर एक पीडीएफ खोलने के बारे में कई प्रश्न मिले हैं, लेकिन मुझे कोई परवाह नहीं है कि एडोब रीडर अलग-अलग खुलता है या नहीं।

उत्तर

5

एक नई प्रक्रिया बनाएं:

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

आदेश में इस के लिए काम करने के लिए, दृश्य Copy to Output Directory की स्थापना स्टूडियो पीडीएफ फाइल के लिए Copy Always करने के लिए सेट किया जाना है।

+0

डाउनवोट के लिए कोई कारण? यह मेरे लिए काम करता है ... – Adam

+0

मैं इस से अपनी संसाधन फ़ाइल कैसे एक्सेस करूं? मुझे नहीं पता कि उपयोगकर्ता मेरा एप्लिकेशन इंस्टॉल करने जा रहा है, इसलिए मुझे यकीन नहीं है कि फाइल कहां होगी। और खेद है, मैं डाउनवॉटेड क्योंकि आपने मूल रूप से केवल मुझे दिखाया कि एक नई एडोब रीडर प्रक्रिया कैसे खोलें। –

+0

प्रश्न पाठक लॉन्च करने के बारे में नहीं थे, बल्कि संसाधन – mfeingold

0

आपको संसाधन को अपनी फ़ाइल का उपभोग करने वाले कार्यक्रम के लिए स्वीकार्य प्रारूप में रूपांतरित करने की आवश्यकता है।

ऐसा करने का एक तरीका संसाधन की सामग्री को एक फ़ाइल (एक अस्थायी फ़ाइल) में लिखना है और फिर इसे फ़ाइल में इंगित करने वाला प्रोग्राम लॉन्च करना है।

चाहे कार्यक्रम में सीधे संसाधन को खिलाना संभव हो, कार्यक्रम पर निर्भर करता है। मुझे यकीन नहीं है कि यह एडोब रीडर के साथ किया जा सकता है या नहीं।

एक फाइल करने के लिए संसाधन सामग्री लिखने के लिए आपको MemoryStream वर्ग का एक उदाहरण बना सकते हैं और

0

यह मदद करनी चाहिए इसके निर्माता के लिए अपने बाइट सरणी पारित कर सकते हैं - मैं अक्सर खोलने के लिए विभिन्न निष्पादन, दस्तावेज, आदि इस कोड का उपयोग ... जिसे मैंने संसाधन के रूप में एम्बेड किया है।

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

+1

' स्ट्रीम' के साथ शुभकामनाएं शून्य है –

+0

इसे नामस्थान की आवश्यकता है - संपादित उपरोक्त कोड और एक स्क्रीनशॉट संलग्न। ठीक काम करता है ... उम्मीद है कि यह मदद करता है :) –

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

पीडीएफ का केवल बिंदु एक पीडीएफ रीडर द्वारा खोला जा रहा है, एक संसाधन के रूप में यह एम्बेड न करें। इसके बजाए, अपनी स्थापना को इसे एक उचित स्थान पर कॉपी करें (आप इसे कहां रख सकते हैं जहां EXE स्थित है), और इसे वहां से चलाएं। इसे बार-बार कॉपी करने में कोई बात नहीं है।

+0

क्या होगा अगर सहायता फ़ाइल को लगातार अद्यतन किया जा रहा है? –

+0

फिर आप एप्लिकेशन में इसे एक लिंक डाल दें, और जब भी आप उपयोगकर्ता को इसे पढ़ना चाहते हैं तो इसे सर्वर से खोलें। – zmbq

12

संसाधन से पीडीएफ फ़ाइल खोलने के लिए इसे आसान बनाएं।

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);    
    } 
+0

+1 आश्चर्यचकित कोई भी इस पर टिप्पणी नहीं की। मैं इसे एम्बेडेड पीडीएफ के साथ हर समय करता हूं ताकि मैं अभी भी एक ही निष्पादन योग्य हो सकूं। –

+0

मेरे लिए भी काम किया। UserControls को वितरित करते समय जहां स्थानीय ड्राइव में सहायता फ़ाइलों की प्रतिलिपि बनाने के लिए इंस्टॉलर की आवश्यकता नहीं होती है, यह एक उपयोगी समाधान है। मेरे द्वारा किए गए एकमात्र परिवर्तन को मौजूदा उपयोगकर्ता के लिए TEMP फ़ोल्डर का विवरण प्राप्त करने के लिए पर्यावरण का उपयोग कर रहा था। GETEnvironmentVariable() विधि। – IsolatedStorage

+1

मुझे लगता है कि यह इस प्रश्न के लिए सही जवाब है। हालांकि मैं उस 'ओपनपीडीएफफ़ाइल' पथ के बजाय, "स्ट्रिंग ओपनपीडीएफफ़ाइल = पर्यावरण। गेटफोल्डरपाथ (पर्यावरण। विशेष फ़ोल्डर। MyDocuments) + @" \ fileName.pdf "उदाहरण के लिए सिस्टम पथ का उपयोग करता हूं। –

1

"संदर्भगुइड" पीडीएफ फ़ाइल का नाम है जिसे मैंने अपने संसाधनों में जोड़ा है।

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"); 
    } 
संबंधित मुद्दे