【发布时间】:2016-08-23 08:36:25
【问题描述】:
我们的医疗仪器会生成患者数据和图像。医院希望收到包含患者详细信息和图像的 PDF 文档,格式非常特定 - A4 页面、特定位置的条形码、特定页边距等。
我不想在代码中从空白画布逐行组装此 PDF,因为如果这样做,我将不得不编写数千行代码,而且当我们有不同的客户需要不同的格式时那么我们需要再次重写这数千行代码。而且,如果客户想要对格式进行小幅更改,我们需要发布新版本。
我想以“邮件合并”的方式进行:我创建了一个报告模板、一个包含条码、页眉和页脚以及所有其他静态内容的完整文档。模板中有患者详细信息和图像的特殊占位符,例如“[@PatinetFirstName@]”、“[@PatientLastName@]”、“[@PatientPreviousVisitsTable@]”……然后,对于每个患者,我的代码会复制这个模板,找到那些特殊的占位符,并用真实的数据或图像替换它们。这样,如果不同的客户想要不同的格式,我只需要编辑这个模板,我的代码保持不变。
这意味着我需要能够使用此库在现有 PDF 中进行搜索和替换,在任何位置插入段落、表格和图像,并能够指定段落和表格的格式以及大小和图像的分辨率。
我该怎么做?我的意思是,是否有允许我这样做的 C# API?
【问题讨论】:
-
请记住,PDF 是一种排版格式,并不是真正为轻松处理文本而设计的。您可能需要考虑使用中间格式(例如 DOCX),以该格式进行替换,然后将生成的文档发送到外部 PDF 转换器(可以是打印机驱动程序或独立程序,尽管后者通常是专有的并且许可费用昂贵)。
-
我同意布拉德利的观点,这实际上是这类任务的典型完成方式。您以流文档类型(如 DOCX 或 HTML 或 ...)创建输入模板文档,并在处理后将其转换为固定文档类型(如 PDF 或 XPS 或 ...)。如果您有兴趣,GemBox.Document 库可以让您轻松加载输入模板,对其执行邮件合并并将其保存为生成的 PDF 文件,如 example 所示。