问题1:
场景为将富文本组件tinymce里的html内容转为图片,出现的问题是vue获取不到tinymce元素,无法直接使用html2canvas
解决1:
将富文本内容渲染出来,推荐做法是将提交按钮改为预览按钮,然后在另外的弹框中渲染出富文本内容,如图formData.details是富文本中的内容
<el-button v-if="!showInfo" type="primary" @click="showPreview = true">预 览</el-button><el-dialog :visible="showPreview" width="1250px" @close="showPreview = false" ><div ref="canvas" v-html="formData.details"></div><div style="text-align: center"><el-button @click="showPreview = false">返 回</el-button><el-button v-if="!showInfo" type="primary" @click="handleSubmit">提 交</el-button></div>
</el-dialog>
问题2:
将富文本的html转为图片后,富文本中的图片缺失(主要是跨域引起)
解决2:
1. 富文本中的img标签中增加属性 crossOrigin="anonymous";经测试,没有该属性也是可以的
2. html2canvas增加配置useCORS:true;
3. 后端跨域配置;
async htmlToImage(){const element = this.$refs.canvasvar _html2canvas = await html2canvas(element, { useCORS: true })this.formData.base64 = _html2canvas.toDataURL('image/png')console.log(this.formData.base64)
},
注意:VUE记得安装html2canvas,npm install html2canvas -save