【问题标题】:How to set the Page Size for an Xps Document?如何设置 Xps 文档的页面大小?
【发布时间】:2012-08-22 11:25:01
【问题描述】:

我正在尝试使用 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 查看器在打开它时会显示错误消息。

【问题讨论】:

  • 反对票有什么解释吗?

标签: c# .net-3.5 fixeddocument documentpaginator


【解决方案1】:

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

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

或在 XAML 中:

高度="20" 宽度="10"

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-02-28
      • 2011-08-30
      • 2016-01-07
      • 1970-01-01
      • 1970-01-01
      • 2011-09-10
      • 2011-07-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多