2010-05-08 10 views
6

मैं फाइल सिस्टम के लिए एक WPF FlowDocument बचत कर रहा हूँ, इस कोड को और एक XPS विस्तार के साथ एक फ़ाइल नाम का उपयोग करते हुए:XPS व्यूअर के साथ एक्सपीएस दस्तावेज़ के रूप में सहेजा गया FlowDocument खोलना?

// Save FlowDocument to file system as XPS document 
using (var fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite)) 
{ 
    var textRange = new TextRange(m_Text.ContentStart, m_Text.ContentEnd); 
    textRange.Save(fs, DataFormats.XamlPackage); 
} 

मेरा ऐप इस कोड का उपयोग दस्तावेज़ को फिर से लोड कर सकते हैं:

// Load file 
using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read)) 
{ 
    m_Text = new FlowDocument(); 
    var textRange = new TextRange(m_Text.ContentStart, m_Text.ContentEnd); 
    textRange.Load(fs, DataFormats.XamlPackage); 
} 

हालांकि, एक्सपीएस व्यूअर जो विंडोज 7 के साथ जहाजों को फाइल नहीं खोल सकता है। सहेजी गई एक्सपीएस फाइलें एक्सपीएस आइकन प्रदर्शित करती हैं, लेकिन जब मैं एक को डबल क्लिक करता हूं, तो एक्सपीएस दर्शक इसे खोलने में विफल रहता है। त्रुटि संदेश पढ़ता है "एक्सपीएस व्यूअर इस दस्तावेज़ को नहीं खोल सकता है।"

एक्सपीएस व्यूअर द्वारा इसे खोलने योग्य बनाने के लिए मुझे अपने एक्सपीएस दस्तावेज़ में क्या करने की ज़रूरत है? आपकी सहायता के लिए धन्यवाद.

+3

एक्सपीएस दस्तावेज़ XAML पैकेज के समान नहीं है। –

उत्तर

6

जैसा कि माइकल ने टिप्पणी की, फ्लो डॉक्यूमेंट एक एक्सपीएस दस्तावेज़ के समान नहीं है। फ्लो डॉक्यूमेंट्स ऑन-स्क्रीन रीडिंग के लिए हैं और विंडो आकार बदलते समय स्वचालित रूप से रीफ्लो हो जाएंगे, जबकि एक्सपीएस दस्तावेज़ का लेआउट तय किया जाएगा।

XPS दस्तावेज़ लिखने के लिए आपको जिस कक्षा की आवश्यकता है उसे XpsDocument कहा जाता है। इसका उपयोग करने के लिए आपको ReachFramework.dll असेंबली का संदर्भ देना होगा।

using System.IO; 
using System.IO.Packaging; 
using System.Windows.Documents; 
using System.Windows.Xps.Packaging; 
using System.Windows.Xps.Serialization; 

namespace XpsConversion 
{ 
    public static class FlowToXps 
    { 
     public static void SaveAsXps(string path, FlowDocument document) 
     { 
      using (Package package = Package.Open(path, FileMode.Create)) 
      { 
       using (var xpsDoc = new XpsDocument(
        package, System.IO.Packaging.CompressionOption.Maximum)) 
       { 
        var xpsSm = new XpsSerializationManager(
         new XpsPackagingPolicy(xpsDoc), false); 
        DocumentPaginator dp = 
         ((IDocumentPaginatorSource)document).DocumentPaginator; 
        xpsSm.SaveAsXaml(dp); 
       } 
      } 
     } 
    } 
}

Feng Yuan has a larger example on his blog (शीर्षलेख और पादलेख जोड़ सकते हैं और उत्पादन rescale करने के तरीके सहित): यहाँ एक विधि है कि एक एक्सपीएस दस्तावेज़ में FlowDocument की बचत होती है की एक छोटी सी उदाहरण है।

संबंधित मुद्दे