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

O. *_*per 5 c# fixeddocument .net-3.5 documentpaginator

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

我的代码基于对该问题的第一个答案,更具体地说,我正在使用以下代码:

        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;
        }
Run Code Online (Sandbox Code Playgroud)

它可以将用户控件复制到XPS文档中,并且可以成功完成复制,但是正如我所说,它使用默认的纸张尺寸。

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

当逐步执行时,我可以看到该PageSize属性的值确实发生了变化,所以这并不意味着新的值不会被接受DocumentPaginator

我发现了各种在线资源,但没有一个能解决我的问题:

  • 在MS Social上的该论坛帖子中坚持设置该PageSize属性有效,但据我所知,它不起作用。
  • 文档声称设置该PageSize属性有效,并提供了与我尝试过的示例相同的示例。(除此之外,基于此文档页面,我什至无法告诉要使用的数字单位。)
  • 文档还指向DocumentPage.Size属性,但是该属性不能公开更改。在将页面添加到文档中以获取不同的页面大小之前,我是否真的必须重写某些页面类?
  • 该论坛帖子描述了相同的问题,但答案对我而言似乎很荒谬。我DocumentPaginator仅一次使用过该属性,因此没有可以为其保存实例的“再次调用(...)。DocumentPaginator”。
  • 这个问题听起来很有希望,但实际上与页面大小无关,而与给定页面上图像的大小有关。
  • 除了上述PageSize属性(此属性在这里仍然设置为默认大小)之外,本教程还使用的WidthHeight属性FixedPage。但是,为它们分配一些正随机值以进行快速测试会导致我的XPS文档显然被损坏,并且XPS Viewer打开它时会显示错误消息。

Mon*_*eur 1

我相信固定文档只会以其页面大小打印。即使将固定文档加载到文档查看器中,单击打印按钮时更改打印机设置的页面大小也不会产生任何效果。固定文档根据其定义准确地保留了其内容的保真度。

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