создание документа XPS из FlowDocument и прикрепление его на лету - PullRequest
7 голосов
/ 23 июля 2011

У меня есть FlowDocument, который я хочу преобразовать в документ XPS, прикрепить к электронному письму и отправить все вместе.Я использую этот код

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

Затем я присоединяю его, используя этот код:

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

где FD - FlowDocument, который я хочу преобразовать, я получаю XPS размером 0,0 КБфайл прикреплен, и его нельзя открыть с помощью программы просмотра XPS, чего мне здесь не хватает?

РЕДАКТИРОВАТЬ: окончательный код, который работал, см. Комментарии

Заранее спасибо

1 Ответ

3 голосов
/ 28 июля 2011

Решено, см. Комментарии под постом с вопросом и редактирование, уже выполненное на самом посте

...