Aquí podría ser tu PUBLICIDAD


Importar RTF con imágenes en xbap

votos
1

Necesito importar un documento RTF en un FlowDocument para un análisis posterior ... Pero tengo un problema muy extraño:

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);

}

He probado este método en tres proyectos diferentes:

  • Aplicación independiente de Wpf : no me da ningún problema, pero no puedo usar este tipo de aplicación.
  • Aplicación de consola : a menudo funciona, pero se rompe en los documentos con imagen de vez en cuando, y no puedo mover el dedo cuando se rompe y por qué ... El error que estoy recibiendo está en el método Load de TextRange: No reconocido estructura en formato de datos 'Formato de texto enriquecido'. Nombre del parámetro: secuencia
  • Aplicación Xbap : ni siquiera supera el método CanLoad ... :( Así que me da el nombre Jack Whathisname ...

Lo sorprendente es que cuando lo pruebo con la aplicación de consola funciona sin errores en la siguiente construcción:

[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);
}

Lo cual simplemente me hace despistado, porque eso es exactamente lo que estoy haciendo, pero luego se dividió en dos pasos ... primero recupero los bits, luego uso el flujo de memoria para convertirlo en un RTF ... :(

¿Puede ser que pueda haber un conflicto en alguna versión dll de alguna manera? Estamos usando 3.5 SP1 para nuestro proyecto ...

¿Alguien puede ayudarme a encontrar una solución para una de las dos últimas posibilidades mencionadas anteriormente?

Gracias

Publicado el 12/03/2009 a las 17:08
fuente por usuario Arcturus
En otros idiomas...        العربية       

2 respuestas

votos
0

No se puede hacer parecer.

Lo que terminamos con el envío del rtf es al servidor que tiene más privilegios, y envía el resultado de vuelta al cliente. Desagradable, pero funciona.

Respondida el 21/12/2010 a las 02:02
fuente por usuario Arcturus


Aquí podría ser tu PUBLICIDAD


votos
0

Es posible que tenga problemas con el nivel de confianza. Aplicaciones de Internet XBAP valores predeterminados de confianza parcial. Usted puede utilizar el certificado para permitir la plena confianza con aplicaciones de internet XPAB.

Respondida el 28/09/2010 a las 07:25
fuente por usuario tolppa