2011-07-23 1 views
7

J'ai un FlowDocument que je veux convertir en document XPS et l'attacher à un e-mail et l'envoyer tous ensemble. J'utilise ce codecréer un document XPS à partir d'un document FlowDocument et l'attacher à la volée

public static MemoryStream FlowDocumentToXPS(FlowDocument flowDocument, int width, int height) 
    { 
     MemoryStream stream = new MemoryStream(); 
     using (Package package = Package.Open(stream, FileMode.Create, FileAccess.ReadWrite)) 
     { 
      using (XpsDocument xpsDoc = new XpsDocument(package, CompressionOption.Maximum)) 
      {     
       XpsSerializationManager rsm = new XpsSerializationManager(new XpsPackagingPolicy(xpsDoc), false); 
       DocumentPaginator paginator = ((IDocumentPaginatorSource)flowDocument).DocumentPaginator; 
       paginator.PageSize = new System.Windows.Size(width, height); 
       rsm.SaveAsXaml(paginator); 
       rsm.Commit();     
      } 
     } 
     stream.Position = 0; 
     Console.WriteLine(stream.Length); 
     Console.WriteLine(stream.Position); 
     return stream; 
    } 

Je joins à l'aide de ce code:

Attachment xps = new Attachment(FlowDocumentToXPS(FD, 768, 676), "FileName.xps", "application/vnd.ms-xpsdocument"); 

où FD est le FlowDocument Je veux convertir, je reçois fichier taille 0.0KB XPS joint et ne peut pas être ouvert avec le XPS Viewer, ce qui me manque ici?

EDIT: Le code final qui a fonctionné, voir les commentaires

Merci à l'avance

+0

Êtes-vous sûr tu n'as pas avalé une exception quelque part? Je ne pense pas que vous devez ajouter la FixedSequence. –

+0

peut-être le flux est fermé à la sortie du bloc – kenny

+0

@Henk Holterman, j'ai vérifié la sortie aucune exception, et vous avez raison, j'essayais différentes choses qui ont amené cette FixedSequence, j'ai enlevé mais le problème toujours là – Musaab

Répondre

3

Résolu, voir les commentaires sous le poste de question et le montage déjà fait sur le poste lui-même

Questions connexes