[Edit] : 我错过了导出到 .doc 文件
在这种情况下,这取决于您如何将 html 转换为 .doc。
- 如果是 .docx,应该可以在 .docx 内部文件树的 word 下将画布的图像作为附件包含在内> 媒体。
- 在 .doc 的情况下,图像文件似乎已合并到 .doc 文件本身,可以使用 FileReader 附加它。
- 如果您使用的是库,则取决于您使用的库。我在 google 上找到的第一个 (html-docx-js) 声称他们需要您的图像作为 dataURI 才能保存它。
要将所有画布转换为 dataURI,您可以使用以下内容:
document.querySelectorAll('canvas').forEach( canvas =>{
var img = new Image();
try{
img.src = canvas.toDataURL();
canvas.replaceWith(img);
}
catch(e){
handleTaintedCanvas(); // I let you decide what should happen here
}
});
所以一旦完成,你只需要调用这个库,它应该可以工作。
[Previous] 这回答了如何导出到一个独立的.html文件。
为了更好地跨设备兼容,请将您的画布转换为 dataURI png 图像。
Blob 方式
如果您想采用 Blob 方式,则必须保存一个文件夹,其中包含您的 html 文件,并将所有图像保存为单独的文件,并在 HTML 标记中正确引用它们。
这也是可能的,例如,您可以生成一个结构正确的 zip 文件以及所有包含的文件,但某些浏览器不接受从 file:// 协议加载外部文件,您的用户必须保留该目录结构不变。
总之,
- 为您做了很多工作,
- 小优势(图像文件大小的 37%...)
- 给您的用户带来麻烦(所有人都不知道如何处理 zip 文件...)
<canvas> 转dataURL
要将您的画布转换为 dataURI,一个简单的函数是
[移至编辑]
从现在开始,您所有的 clean 画布都将转换为 dataURI 图像,您可以使用 html 文件导出这些图像,该文件将是独立的。
<script> 转dataURL
请注意,还有第三种处理方法(实际上可能是最好的方法,具体取决于原始页面的性质):
您可以将所有<script> 标签转换为dataURI,并将您的画布保留在文档中。这样,您仍然会有一个独立的工作 html 文件。但这意味着您不需要外部资源。