【发布时间】:2014-06-06 13:36:45
【问题描述】:
我正在开发一个需要与 PDF 交互的 WPF 4.5 应用程序,但遇到如下问题:
我将模板 pdf 存储在特定位置。根据要求,创建模板 pdf 的副本。此 pdf 具有某些字段,包括文本框、下拉列表等。其中一些字段需要像下拉值一样预先填充。 准备好后,我需要打开它,让用户填写表格。完成后,用户保存文件并关闭它。
现在我需要读取文件并将更新的数据发送到数据库。通过在单独的进程中启动 PDF 并处理 Exited 事件,我能够使用 iTextSharp 完成所有这些工作。现在,我面临的问题是,如果用户使用 SaveAs 选项更改打开文件的名称或位置,此解决方案将不起作用。
我认为是否可以禁用“保存”选项并在表单上添加一个单击按钮,该按钮会自动保存表单并在预期位置关闭它是一个可能的解决方案。
我的问题是:
1) 是否可以使用 Exited 事件处理程序的参数来找出保存的文件名和位置?一旦用户使用不同的名称保存文件,阅读器的标题就会更新为当前文件名。所以我假设当前进程正在使用最新的文件。
2) 是否可以使用 Adobe SDK(JavaScript 或插件或 API)禁用“另存为”和“保存文件”选项并在单击表单中的按钮时关闭文件?
3) 如果我使用 Adobe SDK,是否所有安装该应用程序的系统都需要有 Adobe Acrobat 的许可版本?
如果上述选项不可行,那么我们将不得不使用动态表单来解决。我们想尝试使用 PDF,因为它易于创建,并且支持图像注释,如果上述选项不可行,我们可能需要为此开发单独的解决方案。
我知道这不是一个非常具体的编程问题,但我需要帮助才能弄清楚我可以走哪条路来实现目标。
如果它是重复的,请用指向另一个 SO 问题的链接标记重复,因为我无法找出一个。
希望得到答案,以及指向特定于所提问题的 SO 上其他帖子的链接。
请避免基于意见的答案。
任何帮助将不胜感激。
也欢迎任何建设性的批评。
【问题讨论】:
-
1) 没有。2) 不确定。 3) 是的。 4) 为什么你不能接受在你的应用程序中的输入?您可以使用模板 PDF 作为该表单的模板,如果 PDF 是您获得该模板的唯一方法。
-
2) 不,最终用户始终可以保存 PDF 文件。您不能禁用另存为。
-
在某些条件下(用户安装了应用程序级 JavaScript),可能会在 willSave 事件中更改目标文件名。 (这是猜测;我没有测试过)。如果有什么可以改变的,那就是 willSave 事件。 …再想一想,您也许可以在 willSave 事件中运行 this.closeDoc(true) 。此命令有可能优先于 saveAs。
-
感谢大家的cmets。我猜PDF不是最好的选择。我不想失去对表单的控制以获得易用性/易于编码。我想我会坚持我们正在开发的动态表单。
-
@AndrewBarber - 另一种方法是将动态表单模板存储在数据库中并按需加载。但是创建 XAML 表单有点过于繁琐,因为我们必须创建超过 200 个表单。我想采用 PDF 路线只是为了避免设计 200 多种表单的工作量,因为创建 PDF 要容易得多。不过,我不明白您所说的“使用 teamplate PDF 作为该表单的模板”是什么意思。
标签: c# javascript wpf pdf itextsharp