如何设置Xps文档的页面大小?

时间:2012-08-22 11:25:02

标签: c# .net-3.5 fixeddocument documentpaginator

我正在尝试使用FixedDocument保存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使用了WidthHeight属性FixedPage。但是,为这些快速测试分配一些正的随机值会导致我的XPS文档显然已损坏,并且XPS Viewer在打开时会显示错误消息。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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

或在XAML中:

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