在前文中描述了生信分析流程的整个设计、图形化、服务器端运行、批量运行与过程控制(手动停止,恢复运行、覆盖运行),本文尝试解决分析报告的模板定制与自动生成。
需求分析:
- 报告模板版式设计(视图):
- 分析流程的输出数据(数据):
- 通用信息:样本信息、患者信息、日期信息、检测项目、报告编号等等。
- 分析流程输出的数据:如肿瘤项目中的SNV,CNV,SV等;可以是一个标准数据集,也可以是多个。
下面是分析流程中SV的输出结果:根据项目需要定义,实际上还会加上各种关联的数据库的数据,也可以实现:
- 分析流程输出图表:分析流程输出的图表,图片;最终显示在报告上面。
报告的自动生成,就是将分析流程的输出数据用模版填充,并提供下载。
技术选型
这里可以选择的技术大致有两种:
- 使用Web端(即网页)格式:需要时候打印为PDF下载,这是最常用的方式。优点是下载之前可以预览报告,便于调整。缺点是,个性化定制能力稍差,调整范围不大。如果项目很多,则基本上共用一套模板,最多在颜色、字体上做些调整。就像某老板讲的从报告上一看就知道你用了哪套程序,同质化严重
- 使用Office Word格式:,由word设计模板版式,下载的时候填充数据,下载之后打开预览。优点是,毕竟word的使用门槛比设计web网页低得多。设计的灵活性大的多。而且,下载之后还可以人工修改、打印成PDF格式。缺点是,下载之前没有办法预览,没有web端显示那么直观。
经过反复比对,为了提高整个平台的灵活性,避免过度同质化,这里采用Office Word文件格式来实现报告模板的定制与报告生成。
技术实现
要将设计好的word格式文件,作为模板使用,就需要一套语法,将准备好的数据集用变量显示,生成报告的时候用实际数据替换变量得到报告。
这里举一个简单的例子:
如下图,年龄字段这里做了简单的逻辑判断,如果patient.patientAge==null显示为""空字符,如果patient.patientAge!=null则直接显示patient.patientAge对应的数值。
如下图:
通用数据格式,按照以上形式拼写:${变量名.属性名}来表示相应的值,对于分析流程输出的数据集,也需要设计好语法,与之对应。
对应的数据如下图,实际上还会加上各种关联的数据库的数据,如有需要也可以实现。:
CNV分析输出的图片插入模板:
对应字段${image['cnv_scatter.png']}输出报告后如下图:
SliverWorkspace产品PPT.pdf