【问题标题】:Custom page size output in XPS from WPF report来自 WPF 报告的 XPS 中的自定义页面大小输出
【发布时间】:2013-07-26 19:08:06
【问题描述】:

我有一个 WPF 报告,它以自定义页面大小绘制报告内容(我们可以将其视为 A4,问题是一样的),如果我将输出发送到打印机(物理或虚拟,如 PDFCreator)我为每个页面正确保留自定义页面大小。

但是当我将其输出为 XPS 格式时,页面会适应 Letter 页面大小。

将 WPF 报告输出到 XPS 时如何保留我的自定义页面大小?

我的最终目标:从 WPF 获得 PDF,我的方法是使用 PDFSharper 将 XPS 转换为 PDF。转换效果很好,但 XPS 输出损坏了我的自定义页面大小。欢迎使用其他方法,但无论如何我想了解和控制 XPS 输出页面大小。

示例项目:Test_WpfToPDF_withXpsCorruptingPageSizeToLetter.zip

【问题讨论】:

  • 能否请您向我们展示一些您用于从 XPS 转换为 PDF 的代码?
  • 你说的WPF报告到底是什么意思?这是 custom 组件,还是您只是使用 some approach 打印任意 WPF 控件或其他东西?
  • XPS 转 PDF 不是问题,PDFSharper 有效。我的问题是当 WPF 打印为 XPS 时。即使使用 XPS 查看器,页面也会“损坏”,所以问题不在于 PDFSharper。但我会尝试在这里留下一个示例项目以供下载。 [无论如何你应该看到:msdn.microsoft.com/en-us/library/ms742418.aspx]
  • Luciano,谢谢 - 示例项目可能会有所帮助。
  • @Sevenate:有示例项目,感谢您的帮助。

标签: wpf pdf-generation xpsviewer xps-generation


【解决方案1】:

当您将用户控件(报表)包装在另一个元素中时,它似乎可以工作,同时提供实际大小并且不要忘记放置背景。 我不知道具体原因,但背景和大小似乎都起到了作用。

public override DocumentPage GetPage(int pageNumber) {
    var page = new MyUserControl();

    Border wrapper = new Border();
    wrapper.Width = this.PageSize.Width;
    wrapper.Height = this.PageSize.Height;
    wrapper.Background = Brushes.White;

    wrapper.Child = page;

    wrapper.Measure(this.PageSize);
    wrapper.Arrange(new Rect(new Point(0, 0), this.PageSize));
    wrapper.UpdateLayout();

    return new DocumentPage(wrapper);
}

【讨论】:

    猜你喜欢
    • 2023-03-27
    • 2011-12-14
    • 2021-01-16
    • 1970-01-01
    • 2020-07-29
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多