c# - 如何使用 Winforms 或 WPF 构建表单完成/文档合并应用程序?

标签 c# wpf winforms ms-word office-automation

我需要构建一个应用程序来接受用户输入数据(例如姓名、地址、金额等),然后将其与预加载的文档模板(订单)合并,然后打印合并后的文档。我可以为此项目使用 Windows 窗体或 WPF。

关于如何最好地解决这个问题有什么建议吗?我有 Winforms 开发经验,但不知道如何处理将数据合并到文档以进行打印。

最佳答案

WPF 对此非常有用。

您可以从 WPF UI 元素(如页面或用户控件)创建文档模板。像在 VS 设计器中设置任何 UI 一样设置模板。确定您的数据将存储在什么形状中(这将是您的 DataContext),然后绑定(bind)到它的公共(public)属性。然后,您可以将合并的模板放入 FixedPage 并将其添加到 XPS 文档。您可以非常轻松地打印它或将其保存到磁盘。

简化算法:

  • 创建数据输入表单。
  • 创建一个类型来保存表单中的数据(将此类型称为 Foo)
  • 创建一个绑定(bind) Foo 的页面模板(当 Foo 实例是 DataContext 时)
  • 将表单绑定(bind)到 Foo 的实例
  • 让用户填写表单(以及 Foo 的实例)
  • 创建模板实例(假设它是一个页面)
  • 设置 Page.DataContext = fooInstance;
  • 将页面添加到固定页面,然后将其添加到固定文档
  • 将 FixedDocument 保存为 XPS 文档
  • 保存 XPS 文档或将其发送到 PrintQueue

我正在做类似的事情并且效果很好。只需转到我的个人资料并阅读我所有的问题。它们涵盖了整个过程的大部分难点。

关于c# - 如何使用 Winforms 或 WPF 构建表单完成/文档合并应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2507102/

相关文章:

c# - 为什么我的 C# 标签文本值不更新?

c# - 从 C# 调用托管 C++ 函数

c# - 查找两个列表中的属性差异

c# - 如何在 ASP.NET C# 上处理 UpdateProgress 后触发 JavaScript 事件?

c# - 分页后 TableCell 拆分 : remainder split part loses original cell properties

C# - 组件引用 - Dispacher.CheckAccess()

wpf - 将项目类型从类库更改为WPF用户控件库

winforms - 禁用 Windows 窗体中的关闭按钮

winforms - 什么会导致.NET WInForms中的64位Vista而不是32位重新绘制问题?

c# - 从 int 到短字符串的 2 路加密