2012-08-22 70 views
2

我正在尝试使用FixedDocument保存XPS文档。到目前为止,我没有改变页面大小。 如何将其更改为自定义尺寸?如何设置Xps文档的页面大小?

我已经根据我的the first answer to this question代码,更具体地说,我使用此代码:

 if (File.Exists(filename)) { 
      File.Delete(filename); 
     } 

     var oldParent = LogicalTreeHelper.GetParent(this) as ContentControl; 
     try { 
      oldParent.Content = null; 

      FixedDocument doc = new FixedDocument(); 

      PageContent pageCnt = new PageContent(); 
      FixedPage page = new FixedPage(); 

      page.Children.Add(this); 
      try { 
       ((System.Windows.Markup.IAddChild)pageCnt).AddChild(page); 
       doc.Pages.Add(pageCnt); 

       XpsDocument xpsDoc = new XpsDocument(filename, FileAccess.ReadWrite); 
       try { 
        var writer = XpsDocument.CreateXpsDocumentWriter(xpsDoc); 
        writer.Write(doc); 
       } 
       finally { 
        xpsDoc.Close(); 
       } 
      } 
      finally { 
       page.Children.Clear(); 
      } 
     } 
     finally { 
      ((ContentControl)oldParent).Content = this; 
     } 

它复制的用户控件到一个XPS文档,就像我说的做得很成功,但是,用途默认的纸张尺寸。

我试图使用DocumentPaginator.PageSize属性来设置新的页面大小(在实例化FixedDocument后),但是我分配给该属性的任何东西似乎都被忽略;生成的XPS文档中的页面将保留其默认纸张尺寸。

当逐步执行时,我可以看到PageSize属性的值真的发生了变化,所以它不像DocumentPaginator不接受新值。

我发现各种在线资源,其中没有一个解决了我的问题尚未:

  • This forum posting at MS Social坚持认为,设置PageSize性质的作品,但它并不至于我可以告诉。
  • The docs声称设置PageSize属性起作用,并提供一个与我所尝试的相同的示例。 (除此之外,根据这个文档页我甚至不能告诉单位使用的数字。)
  • 该文档也指向DocumentPage.Size property,但该属性不能公开更改。在将页面添加到文档之前,是否真的必须重写某些页面类才能获得不同的页面大小?
  • This forum posting描述了同样的问题,但答案似乎对我来说毫无意义。我一次只使用DocumentPaginator属性,所以没有“再次调用(...)。DocumentPaginator”,为此我可以保存一个实例。
  • This question听起来很有希望,但它实际上不是关于页面大小,而是关于给定页面上图像的大小。
  • 除了上述PageSize属性(设置为似乎是默认大小反正在这里),this tutorial使用FixedPageWidthHeight性能。但是,为这些快速测试分配一些正的随机值会导致我的XPS文档显然已损坏,并且XPS Viewer在打开时显示错误消息。
+0

为downvote任何解释? –

回答

0

我相信一个FixedDocument将只打印其页面的大小。即使将FixedDocument加载到DocumentViewer中,当您单击打印按钮时更改打印机设置的页面大小也不会产生任何影响。 FixedDocument的定义完全保留了其内容的保真度。

修改它的唯一方法是创建派生的DocumentPaginator,它在内部调用FixedDocument.DocumentPaginator的函数并相应地修改返回值。

1

FixedDocuments有固定页面。 FixedPage的高度和宽度可以控制。有些这样的:

 FixedPage pageOne = new FixedPage(); 
     pageOne.Height = 20; 
     pageOne.Width = 10; 

或XAML:

高度= “20” 宽度= “10”