问题1:
场景为将富文本组件tinymce里的html内容转为图片,出现的问题是vue获取不到tinymce元素,无法直接使用html2canvas
解决1:
将富文本内容渲染出来,推荐做法是将提交按钮改为预览按钮,然后在另外的弹框中渲染出富文本内容,如图formData.details是富文本中的内容
html
<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:
-
富文本中的img标签中增加属性 crossOrigin="anonymous";经测试,没有该属性也是可以的
-
html2canvas增加配置useCORS:true;
-
后端跨域配置;
javascript
async htmlToImage(){
const element = this.$refs.canvas
var _html2canvas = await html2canvas(element, { useCORS: true })
this.formData.base64 = _html2canvas.toDataURL('image/png')
console.log(this.formData.base64)
},
注意:VUE记得安装html2canvas,npm install html2canvas -save