2013-10-30 52 views
0

我試圖將FlowDocument另存爲XPS。我使用.Net 4.0。 的FlowDocument的包含以下元素:當我顯示我的WPF應用程序內的FlowDocument創建XPS時,FlowDocument與InlineUIContainer(圖像,數據網格)問題

<Paragraph> 
    <InlineUIContainer BaselineAlignment="Center"> 
     <Image Source="/MyNamespace;component/Images/logo.png"/> 
    </InlineUIContainer> 
</Paragraph> 

    <Paragraph> 
    <Run Text="{Binding Path=TextBinding, FallbackValue='Oups, binding did not work'}"></Run> 
</Paragraph> 

<InlineUIContainer> 
     <DataGrid ItemsSource="{Binding Path=Items}" AutoGenerateColumns="False" 
        CanUserAddRows="False" RowHeaderWidth="0"> 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="Item Number" 
            Binding="{Binding Path=Id}" Width="100" /> 
       <DataGridTextColumn Header="Description" 
            Binding="{Binding Path=ItemDescription}" Width="200" /> 
      </DataGrid.Columns> 
     </DataGrid> 
    </InlineUIContainer> 

一切工作就好了。

現在,我需要將其轉換爲服務器上的XPS文件(我希望批量打印!)。

所以我用下面的代碼:

flowDocument.DataContext = myViewModel; 

      Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.SystemIdle, 
               new DispatcherOperationCallback(arg => null), null); 

string xpsFilePath = String.Concat(@"c:\temp\", Guid.NewGuid(), ".xps"); 

     using (FileStream outputFile = new FileStream(xpsFilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite)) 
     using (Package package = Package.Open(outputFile, 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; 
      rsm.SaveAsXaml(paginator); 
      rsm.Commit(); 
     } 

你猜怎麼着? 1)圖像丟失 2)DataGrid的空,雖然線被描繪 =>只有運行正常顯示

我試過各種在網絡上找到的組合,但它只是從來沒有出來propertly 。 而任何非自動化的解決方案是如此不可能!

我不能等待別人來拯救我! 在此先感謝

回答