我正在尝试将一个简单的页面导出为Word文档,但似乎找不到任何方法来做到这一点。我尝试的任何方法都只是导出带有字体颜色的文本,但仅此而已。我想要的是正确使用 css 样式的导出方法。这是纯 html、css 和 javascript,没有后端语言。
我尝试过:
在所有 3 种情况下,样式均缺失。特别是字体和内容样式被忽略。保存为 pdf 效果非常好。我有从未使用过的 css 打印样式,即使将相同的样式直接添加到元素中,它仍然不会显示在 .doc 文件中。
有什么合理的解决办法吗?
据我所知,在您描述的限制范围内解决问题的最接近的工具是jQuery-Word-Export。您可以点击这里的demo看看这是否是您想要的。
实际代码很短,我在这里重写了它,没有参考 jQuery:
import saveAs from "file-saver"
export function htmlCssExportWord(
html,
styles = "",
filename = "exported-document.doc"
) {
const statiC = {
mhtml: {
top:
"Mime-Version: 1.0\nContent-Base: " +
window.location.href +
'\nContent-Type: Multipart/related; boundary="NEXT.ITEM-BOUNDARY";type="text/html"\n\n--NEXT.ITEM-BOUNDARY\nContent-Type: text/html; charset="utf-8"\nContent-Location: ' +
window.location.href +
"\n\n<!DOCTYPE html>\n<html>\n_html_</html>",
head: '<head>\n<meta http-equiv="Content-Type" content="text/html; charset=utf-8">\n<style>\n_styles_\n</style>\n</head>\n',
body: "<body>_body_</body>",
},
}
// Prepare bottom of mhtml file with image data
const mhtmlBottom = "\n" + "--NEXT.ITEM-BOUNDARY--"
// Aggregate parts of the file together
const fileContent =
statiC.mhtml.top.replace(
"_html_",
statiC.mhtml.head.replace("_styles_", styles) +
statiC.mhtml.body.replace("_body_", html)
) + mhtmlBottom
// Create a Blob with the file contents
const blob = new Blob([fileContent], {
type: "application/msword;charset=utf-8",
})
saveAs(blob, filename)
}
请注意,此解决方案依赖于以下事实:Microsoft Word 可以将带有 .doc 后缀的文件作为“单页网页”(mht) 文件打开、保存和编辑。进一步请注意,Microsoft Word 无法理解所有现代 CSS,因此某些 CSS 样式将无法正确显示。
有关各种可用方法的调查,请参阅为什么不使用 docx?有关 这个用于 html 到 doc 转换的 Ruby 工具的 Wiki 条目。