سؤال

أحتاج إلى استيراد مستند RTF إلى FlowDocument لمزيد من التحليل.لكن عندي مشكلة غريبة جداً:

public string ConvertRTF(byte[] bytes)
{
    if (bytes == null)
    {
        throw new ArgumentNullException();
    }

    FlowDocument document = new FlowDocument();

    // open the file for reading
    using (MemoryStream stream = new MemoryStream(bytes, true))
    {
        // create a TextRange around the entire document
        TextRange documentTextRange = new TextRange(document.ContentStart, document.ContentEnd);
        if (documentTextRange.CanLoad(DataFormats.Rtf))
            documentTextRange.Load(stream, DataFormats.Rtf);
    }

    return XamlWriter.Save(document);

}

لقد اختبرت هذه الطريقة في ثلاثة مشاريع مختلفة:

  • تطبيق Wpf المستقل:لا يعطيني أي مشاكل على الإطلاق، ولكن للأسف، لا أستطيع استخدام هذا النوع من التطبيقات.
  • تطبيق وحدة التحكم:غالبًا ما يعمل، لكنه ينكسر على المستندات التي تحتوي على صور من وقت لآخر، ولا أستطيع أن أتحرك عندما ينكسر ولماذا...الخطأ الذي أتلقاه موجود في طريقة التحميل الخاصة بـ TextRange:"بنية غير معروفة في تنسيق البيانات 'Rich Text Format'.اسم المعلمة:تدفق"
  • تطبيق اكس باب:لا حتى يتجاوز طريقة CanLoad ...:( لذلك أعطاني جاك ما اسمه نتيجة لذلك ...

الشيء الغريب هو أنه عندما اختبرته باستخدام تطبيق وحدة التحكم، فإنه يعمل بدون أخطاء في البناء التالي:

[STAThread]
static void Main(string[] args)
{
    OpenFileDialog dialog = new OpenFileDialog
    {
        Filter = "import files (*.rtf)|*.rtf"
    };

    if (dialog.ShowDialog() != DialogResult.OK)
        return;


    byte[] data;
    using (Stream filestream = dialog.OpenFile())
    {
        int offset = 0;
        data = new byte[filestream.Length];
        int remaining = data.Length;
        while (remaining > 0)
        {
            int read = filestream.Read(data, offset, remaining);
            if (read <= 0)
                throw new EndOfStreamException
                    (String.Format("End of stream reached with {0} bytes left to read", remaining));
            remaining -= read;
            offset += read;
        }
    }

    FlowDocument document = new FlowDocument();

    using (MemoryStream stream = new MemoryStream(data))
    {
        // create a TextRange around the entire document
        TextRange documentTextRange = new TextRange(document.ContentStart, document.ContentEnd);
        documentTextRange.Load(stream, DataFormats.Rtf);
    }

    Console.WriteLine("test ok");
}

الأمر الذي يجعلني جاهلًا، لأن هذا هو بالضبط ما أفعله ولكن بعد ذلك يتم تنفيذه على خطوتين ...قم أولاً باسترداد البتات، ثم استخدم تدفق الذاكرة لتحويلها إلى RTF...:(

هل يمكن أن يكون هناك تعارض في بعض إصدارات dll بطريقة أو بأخرى؟نحن نستخدم 3.5 SP1 لمشروعنا...

هل يمكن لأي شخص مساعدتي في إيجاد حل لواحد من الاحتمالين الأخيرين المذكورين أعلاه؟

شكرًا

هل كانت مفيدة؟

المحلول 2

لا يمكن القيام به على ما يبدو.

ما انتهينا إليه هو إرسال rtf إلى الخادم الذي يتمتع بامتيازات أكبر، وإرسال النتيجة مرة أخرى إلى العميل.سيئة، لكنه يعمل.

نصائح أخرى

من المحتمل أن يكون لديك مشاكل في مستوى الثقة.تطبيقات الإنترنت Xbap افتراضية للثقة الجزئية.يمكنك استخدام الشهادة للسماح بالثقة الكاملة مع تطبيقات الإنترنت xpab.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top