有没有办法在 C# 中使用 XPS 文档填写表单?
5 回答
这不是一个理想的解决方案。原因是 XPS 中的文本由Glyphs表示,其中字符(粗略地说)被指定为特定字体的字符形状表的索引,而不是像 Unicode 这样方便的东西。并且Glyphs
必须专门定位,每个字符都从字符串原点偏移。如果一个字符串必须换成多行,则必须通过放入许多单独的Glyphs
对象来完成,所有对象都是单独定位的。它不是一种逻辑格式,而是一种物理格式,并且在生成后并不特别适合更改。
最好将模板文档定义为FlowDocument。这是一种逻辑上更易于操作的格式,而不是物理“冻结”格式。(XPS 文档在技术上是FixedDocument)。然后,您可以将 a 冻结FlowDocument
为 aFixedDocument
以将其导出为 XPS,当它已被填写时。
这是你如何做到的。
首先,您创建一个对象(POCO 很好),其中包含您希望用户填写表单的表单字段。接下来,您将表单创建为 FixedDocument。它应该具有对您的 POCO 起作用的绑定。然后,您创建一个窗口,以便用户可以为这些字段输入值。
将 POCO(普通的旧 CLR 对象)绑定到窗口中的文本框。用户输入表单数据后,获取您现在填写的对象并将其设置为 FixedDocument 的 DataContext。创建一个 XpsWriter 并将您的 FixedDocument 写入您的输出(文件、打印机等)。
我会给你代码,但因为我实际上是在做这个(或相对类似的)工作,所以我认为我做不到。我可以告诉你,最难的部分是处理 XPS 文档。你可以根据你在那里的经历来判断。
如果您想填写 XPS 表格,可以。XPS 是 XML,因此您可以更改它。
修改 XPS 肯定是可能的,这在一定程度上取决于您希望它如何工作以及您愿意进行的编程量(但这可能适用于每个编程问题;-))。
无论如何:请随时在 info-at-nixps-dot-com 上直接给我发电子邮件。
我从来没有找到一个非常好的解决方案,所以我做了一个。查看 www.flexsoftinc.com 以查看我的程序 XPS Express。