深度定制自定义表单
表单提交后实现预览
需要把“表单结果页”标签(原显示成功信息提示页)替换为“表单结果页-带表单数据”标签
通过以上方法调用到 FormData数据源后。便可在模板中使用@formDataViewModel.ExtendContentObject["Field1"],调用到相应的表单扩展字段数据。
(因为以上方法,不同版本存在差异,需要根据实际项目有的方法进行调用数据库)
实现下载准考证功能
这里需要用到 jsPDF ,但如果单纯使用jsPDF存在中文字体乱码以及一堆兼容性问题,所以还需要结合 html2canvas 方法一起运用
因为要生成的Html元素宽度较小,所以这里我先放大2倍来生成这个图片,再生成pdf
function downloadPDF() { const element = document.getElementById('printArea'); // 要转换成 PDF 的 HTML 元素 html2canvas(element, { scale: 2 }).then((canvas) => { // 新建 jsPDF 实例 const pdf = new jspdf.jsPDF({ orientation: 'portrait', unit: 'px' }); // 将 canvas 转换成图片 const imgData = canvas.toDataURL('image/png'); // 添加图像到 PDF const imgProps= pdf.getImageProperties(imgData); const pdfWidth = pdf.internal.pageSize.getWidth(); const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width; pdf.addImage(imgData, 'PNG', 0, 0, pdfWidth, pdfHeight); // 保存生成的 PDF pdf.save('我的准考证.pdf'); }); }
这里很多jsPDF和 html2canvas的参数和方法我缺省,直接使用默认值。
最终效果
总结一下可能会碰到的问题并处理方法
1、查询结果页模板,调用数据的方法有些不同。当用户查询成功后,系统会先把表单数据放到showField这个数组里面,然后再在下面通过JS方法替换到上面绑定的以表单模型字段名称为类名的元素里面。然而默认的查询结果页模板代码上面会有个FormData烟雾弹,要注意一下。
2、这个自定义表单为"单图片上传"字段,输出时可能会多生成了一个站点标识符
只能通过下面js做字串处理,路径里去掉这个站点标识符。
3、要注意的是html2canvas 生成的图片,好像不支持表格1像素的边框,生成的图片表格边框最少为2个像素
用户登录
还没有账号?
立即注册