结论: 如何将 DOC(X) 转换为 PDF 并保留 CustomDocumentProperties和字段 - 这样我就可以通过编程更新自定义属性和通过 Windows 服务打印 PDF?
!TLDR
我们有一个自定义的内部应用程序,它将 DOCX 创建与字段更新和打印配对。该应用程序本身是一个基于 Windows 窗体的程序,可以运行,但需要从用户 shell 运行。我想升级此程序以从 Windows 服务运行。
这Windows 服务中的 DOCX 问题在于打印。必须在服务器上安装 Word。Word 在用户 shell 之外无法正常播放 - 模式对话框、用户提示(是否要恢复其中一个?是否要启用对此文档的编辑?等等)、所需的注册表项等。
我正在探索调整我们的工作流程以适应服务器上的 PDF。
工作流
DOC(X) 准备/创建(手动,不在程序中):
- 导入/运行 VBScript:
- 从数据库中获取表/视图列。
- 每列都进入一个自定义文档属性。
- 将字段放入文档中以获得所需的自定义属性。
因此CustomerName
,,,AddressLine1
等City
被添加为 CustomDocumentProperties……然后字段被放置在表单上的正确位置,以便在自动化程序中自动打印。
DOCX 使用(自动,在程序中):
- 从同一张表中提取行
- 将正确的数据放入每个 CustomDocumentPropertyField 中
- 更新字段(替换
CustomerName
为Doe, John
、替换City
为Whoville
等) - 将文档打印到正确的打印机
期望的改变
我正在寻找
a. 将 DOC(X) 转换为 PDF,这样自定义属性的传输以及替换字段的能力就保持不变。 将是 1) 创建 DOCX(目前存在许多此类文件,并且是当前的工作流程),2) 转换为 PDF,3) 更新/打印 PDF。 优点:继续使用客户满意/受过培训的 Word 产品。 缺点:中间可能需要复杂的 docx/pdf 转换,以换取在 Windows 服务内更轻松的 PDF 打印。
b. 完全取代 DOC(X),改用 PDF 创建工具。优点:相同的两步流程。缺点:用户习惯于 DOC(X) 创建。可能需要额外的软件/培训。许多文档需要转换。
c. 将 DOCX 作为一种服务来处理,并在服务内部进行打印。
这个问题正在探索a
- DOC(X) conversion to PDF
。给定一个 Word 文档,文档上放置了自定义文档属性和字段...当我通过Save As PDF
Word 转换为 PDF 时,我似乎丢失了这些属性,并且字段被替换为当前值。还有哪些其他可行的选项可以转换为 PDF - 保留该信息以供步骤使用2) DOCX Usage/Printing
。
答案1
使用pdfsharp,它是一个开源库。您可以像这样设置pdf的自定义属性:
PdfDocument document = PdfReader.Open("c:\\Test.pdf");
document.Info.Elements.Add(
new KeyValuePair<String, PdfItem>("/MyKey", new PdfString("MyValue")));
document.Save("c:\\test.pdf");