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



我正在尝试用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;
        }

它将用户控件复制到XPS文档中并成功地做到了这一点,但正如我所说,它使用了默认的纸张大小。

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

当逐步执行时,我可以看到PageSize属性的值确实发生了变化,所以新值不会以某种方式不被DocumentPaginator接受。

我找到了各种在线资源,但都没有解决我的问题:

  • MS Social上的这个论坛帖子坚持认为设置PageSize属性是有效的,但据我所知,这并不是有效的
  • 文档声称设置PageSize属性是有效的,并提供了一个与我尝试的相同的示例。(除此之外,基于这个文档页面,我甚至无法说出要使用的数字单位。)
  • 文档还指向DocumentPage.Size属性,但是该属性不能公开更改。在将页面添加到文档之前,我真的必须覆盖某些页面类才能获得不同的页面大小吗
  • 这个论坛帖子描述了同样的问题,但答案对我来说似乎毫无意义。我只使用过一次DocumentPaginator属性,所以没有"再次调用(…).DocumentPaginator"可以保存一个实例
  • 这个问题听起来很有希望,但实际上不是关于页面大小,而是关于给定页面上图像的比例
  • 除了前面提到的PageSize属性(在这里它似乎被设置为默认大小)之外,本教程还使用了FixedPageWidthHeight属性。然而,为这些值分配一些正随机值以进行快速测试会导致我的XPS文档明显损坏,并且XPS Viewer在打开它时显示错误消息
FixedDocuments有固定的页面。FixedPage的高度和宽度可以控制。有点像这样:
        FixedPage pageOne = new FixedPage();
        pageOne.Height = 20;
        pageOne.Width = 10;

或在XAML中:

Height="20"Width="10"

我相信FixedDocument只会按页面大小打印。即使在将FixedDocument加载到DocumentViewer中时,单击打印按钮时更改打印机设置的页面大小也不会有任何效果。FixedDocument根据其定义,可以准确地保持其内容的保真度。

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

相关内容

  • 没有找到相关文章

最新更新