2013-08-21 7 views
4

у меня есть:Как преобразовать FlowDocument в FixedDocument с помощью DocumentDagment документа DocumentocumentPageinator DocumentDocument?

DocumentPaginator dp = ((IDocumentPaginatorSource)document).DocumentPaginator; 

и:

FlowDocument document = new FlowDocument(); 
// create a flow document... 

Как сделать Преобразовать FlowDocument к FixedDocument с помощью DocumentPaginator? Я не могу понять, как это сделать. Все сайты, которые я смотрел на использование XpsWriter как в:

XpsDocumentWriter writer = XpsDocument.CreateXpsDocumentWriter(xpsDoc); 
DocumentPaginator dp = ((IDocumentPaginatorSource)document).DocumentPaginator; 
writer.Write(dp); 

Я мог бы написать XPS, а затем получить обратно FixedDocument но должно быть лучше?

ответ

6

Нет, кажется, нет лучшего способа. Но вам не нужно сохранять его на диск:

var paginator = ((IDocumentPaginatorSource)flowDocument).DocumentPaginator; 
var package = Package.Open(new MemoryStream(), FileMode.Create, FileAccess.ReadWrite); 
var packUri = new Uri("pack://temp.xps"); 
PackageStore.RemovePackage(packUri); 
PackageStore.AddPackage(packUri, package); 
var xps = new XpsDocument(package, CompressionOption.NotCompressed, packUri.ToString()); 
XpsDocument.CreateXpsDocumentWriter(xps).Write(paginator); 
FixedDocument doc = xps.GetFixedDocumentSequence().References[0].GetDocument(true);