2012-03-09 118 views
1

我实现了这个解决方案,它为我工作: Can multiple xps documents be merged to one in WPF?合并XPS横向

我的问题是,我要合并的页面在横向方向。当添加ContainerVisual时,它默认创建一个垂直方向的页面。我如何将方向更改为ContainerVisual?

private void AddXPSDocument(string sourceDocument, SerializerWriterCollator vxpsd) 
    { 
     XpsDocument xpsOld = new XpsDocument(sourceDocument, FileAccess.Read); 
     FixedDocumentSequence seqOld = xpsOld.GetFixedDocumentSequence(); 
     foreach (DocumentReference r in seqOld.References) 
     { 
      FixedDocument d = r.GetDocument(false); 
      foreach (PageContent pc in d.Pages) 
      { 
       FixedPage fixedPage = pc.GetPageRoot(false); 
       double width = fixedPage.Width; 
       double height = fixedPage.Height; 

       Size sz = new Size(width, height); 
       fixedPage.Width = width; 
       fixedPage.Height = height; 
       fixedPage.Measure(sz); 

       fixedPage.Arrange(new Rect(new Point(), sz)); 


       //fixedPage.UpdateLayout(); 

       ContainerVisual newPage = new ContainerVisual(); 
       newPage.Children.Add(fixedPage); 

       vxpsd.Write(newPage); 

      } 
     } 
     xpsOld.Close(); 
    } 

回答

1

你需要一个RotateTransform添加到页面的视觉。

Visual originalPage = Paginator.GetPage(pageNumber).Visual; 

var pageContentVisual = new ContainerVisual(); 

TransformGroup group = new TransformGroup(); 
group.Children.Add(new RotateTransform { Angle = 90.0 }); 

pageContentVisual.Transform = group; 
pageContentVisual.Children.Add(originalPage); 

注:以上是从自定义DocumentPaginator复制,但是你应该能够运用它的情况。

+0

谢谢,它的工作原理! – Sergio 2012-03-09 12:39:27