家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力。
今天给大家带来的主题是HTML5 和word的互相转化,话不多说,直接进入正题!
html-docx-js 是一个非常小的库,能够将 HTML 文档转换为 Microsoft Word 2007 及更高版本使用的 DOCX 格式。 html-docx-js 设法使用称为“altchunks”的功能在浏览器中执行转换。 简而言之,它允许以不同的标记语言嵌入内容。 开发者使用 MHT 文档将嵌入内容发送到 Word,因为它允许处理图像。 Word 打开此类文件后,会将外部内容转换为 Word Processing ML(这是 DOCX 文件的标记语言的调用方式)并替换引用。
Microsoft Word for Mac 2008 不支持 Altchunk,LibreOffice 和 Google Docs 也不支持 Altchunk。
关于 html-docx-js 库有几点需要说明:
目前 Mammoth 在 Github 上通过 MIT 协议开源,有超过 1k 的 star、0.3k 的 fork、0.7k 的项目依赖量、NPM 周平均下载量 9k,是一个值得关注的前端开源项目。
var converted = htmlDocx.asBlob(content);
saveAs(converted, "test.docx");
asBlob 可以采用其他选项来控制文档的页面设置:
比如下面的例子:
var converted = htmlDocx.asBlob(content, {
orientation: "landscape",
margins: { top: 720 },
});
saveAs(converted, "test.docx");
需要注意的是,开发者需要传递完整、有效的 HTML(包括 DOCTYPE、html 和 body 标签)。 这可能不太方便,但可以让开发者在样式标签中包含 CSS 规则。
html-docx-js 作为独立”Browserify 模块(UMD)分发。 开发者可以将其作为 html-docx 要求。 如果没有可用的模块加载器,它将把自己注册在 window.htmlDocx。
Mammoth.js 旨在转换 .docx 文档,例如:由 Microsoft Word、Google Docs 和 LibreOffice 创建的文档,并将其转换为 HTML。 Mammoth 的目标是通过使用文档中的语义信息并忽略其他细节来生成简单且干净的 HTML。 例如,Mammoth 将任何具有标题 1 样式的段落转换为 h1 元素,而不是尝试精确复制标题的样式(字体、文本大小、颜色等)。
.docx 使用的结构与 HTML 的结构之间存在很大的不匹配,这意味着对于更复杂的文档来说,转换不太可能完美。 如果开发者仅使用样式来对文档进行语义标记,那么 Mammoth 效果最佳。
Mammoth.js 目前支持以下功能:
Mammoth 在众多平台可用,比如:Python、WordPress、Java/JVM、.NET 等等。目前 Mammoth 在 Github 上通过 BSD-2-Clause 开源,有超过 4.1k 的 star、0.5k 的 fork、4.4k 的项目依赖量、NPM 周平均下载量 76k,是一个值得关注的前端优质开源项目。
以文档转换为例。
Mammoth 允许在转换文档之前对其进行处理。 例如,假设该文档尚未进行语义标记,但开发者知道任何居中对齐的段落都应该是标题,则可以使用 transformDocument 参数来适当地修改文档:
function transformElement(element) {
if (element.children) {
var children = _.map(element.children, transformElement);
element = { ...element, children: children };
}
if (element.type === "paragraph") {
element = transformParagraph(element);
}
return element;
}
function transformParagraph(element) {
if (element.alignment === "center" && !element.styleId) {
return { ...element, styleId: "Heading2" };
} else {
return element;
}
}
var options = {
transformDocument: transformElement,
};
TransformDocument 的返回值在 HTML 生成期间使用。同时,上面的代码可以使用 mammoth.transforms.paragraph 函数进行优化,比如:
function transformParagraph(element) {
if (element.alignment === "center" && !element.styleId) {
return { ...element, styleId: "Heading2" };
} else {
return element;
}
}
var options = {
transformDocument: mammoth.transforms.paragraph(transformParagraph),
};
或者,如果开发者希望已明确设置为使用等宽字体来表示代码的段落:
const monospaceFonts = ["consolas", "courier", "courier new"];
function transformParagraph(paragraph) {
var runs = mammoth.transforms.getDescendantsOfType(paragraph, "run");
var isMatch =
runs.length > 0 &&
runs.every(function (run) {
return run.font && monospaceFonts.indexOf(run.font.toLowerCase()) !== -1;
});
if (isMatch) {
return {
...paragraph,
styleId: "code",
styleName: "Code",
};
} else {
return paragraph;
}
}
var options = {
transformDocument: mammoth.transforms.paragraph(transformParagraph),
styleMap: ["p[style-name='Code'] => pre:separator('\n')"],
};
关于 Mammoth 库的更多用法,更多 API 示例可以参考文末资料,本文不再过多展开。
本文主要和大家介绍 HTML5 和word互转的两个开源库,分别为:html-docx-js、mammoth.js。相信通过本文的阅读,大家对 html-docx-js、mammoth.js 会有一个初步的了解。
因为篇幅有限,关于 html-docx-js、mammoth.js 的更多用法和特性文章并没有过多展开,如果有兴趣,可以在我的主页继续阅读,同时文末的参考资料提供了大量优秀文档以供学习。最后,欢迎大家点赞、评论、转发、收藏,您的支持是我不断创作的动力。
https://github.com/evidenceprime/html-docx-js
https://github.com/mwilliamson/mammoth.js
https://www.npmjs.com/package/html-docx-js
https://www.npmjs.com/package/mammoth
https://www.tutorialswebsite.com/export-html-to-word-document-with-javascript/
https://www.vecteezy.com/vector-art/136754-free-vector-documents
全球旅行网站HTML5模板是一款适合重新旅游行业服务网站模板下载。提示:本模板调用到谷歌字体库,可能会出现页面打开比较缓慢。
下载链接:
地址:https://yy123.ink/mobanDetail/21507
TML5 代表未来;W3C ( World Wide Web Consortium, 万维网联盟) 已经放弃 XHTML,从而使 HTML5 成为正式标准并得到认可。
HTML5 是下一代的 HTML。
HTML5 将成为 HTML、XHTML 以及 HTML DOM 的新标准,目标是取代现有的HTML4.01和XHTML1.0标准。它希望能够减少互联网富应用(RIA)对Flash、Silverlight、JavaFX等的依赖,并且提供更多能有效增强网络应用的API。
HTML 的上一个版本诞生于 1999 年。自从那以后,Web 世界已经经历了巨变。
HTML5 仍处于完善之中。然而,大部分现代浏览器已经具备了某些 HTML5 支持。
HTML5 是 W3C 与 WHATWG 合作的结果。
WHATWG 致力于 web 表单和应用程序,而 W3C 专注于 XHTML 2.0。在 2006 年,双方决定进行合作,来创建一个新版本的 HTML。
为 HTML5 建立的一些规则:
新特性应该基于 HTML、CSS、DOM 以及 JavaScript。
减少对外部插件的需求(比如 Flash)
更优秀的错误处理
更多取代脚本的标记
HTML5 应该独立于设备
开发进程应对公众透明
最简单的 HTML5 文档
<!doctype html>
<title>A Tiny HTML Document</title>
<p>Let's rock the browser, HTML5 style.</p>
只包含一行文本的超简单的 HTML5 文档,它在浏览器中效果如下:
更常见的结构用<head>和<body>来分块,把页面的信息和页面的实际内容分开,并用<html>来封装整个文档,现在的文档样子如下:
<!doctype html>
<html>
<head>
<title>A Tiny HTML Document</title>
</head>
<body>
<p>Let's rock the browser, HTML5 style.</p>
</body>
</html>
<html>、<head>和<body><HTML5 >不要求这些元素,但是这种书写风格比较好。
<!doctype html>
第一行都必须是一个特定的文档类型声明,用于告诉后面的文档标记遵循哪个标准。HTML5 的文档类型声明极其简单。
字符编码
现在大部分网站都使用 UTF-8 的编码,这种编码简洁、转换速度快,而且支持任何你想要的非英文字符。
在 HTML5 中增加字符编码信息很简单,在 <head>中增加 <meta>元素,如下:
<head>
<meta charset="utf-8">
<title>A Tiny HTML Document</title>
</head>
Dreamweaver 设计工具在创建新的网页时会自动添加这个元信息,并且也会将文件保存为 UTF 编码格式。如果你使用的是最简单的文本编辑器,在保存的时候记得选择正确的编码(UTF-8)。
页面语言
指明网页中使用的自然语言是一种好的习惯。为给内容指定语言,可在任何元素上使用 lang 属性。
为整个页面添加语言说明,就是为 元素指定 lang 属性,如下代码:
<html>
如果页面包含多种语言的文本,那么这个信息细节对于屏幕阅读器也是很有用的。
添加样式表
只要是经过特意设计的专业网站,就一定会使用样式表。指定要使用的 CSS 样式表时,需要在 <head>中增加 <link>元素,如下:
<head>
<meta charset="utf-8">
<title>A Tiny HTML Document</title>
<link rel="stylesheet" href="TinyHTML5.css">
</head>
添加 JavaScript
在 HTML5 中添加 JavaScript 与在传统页面上添加差不多,例如:
<head>
<meta charset="utf-8">
<title>A Tiny HTML Document</title>
<link rel="stylesheet" href="TinyHTML5.css">
<script src="TinyHTML5.js"></script>
</head>
没有必要添加 language=”JavaScript”属性。浏览器假定你要使用的 JavaScript。
特别注意:
如果你要在 IE 中花大量时间测试包含 JavaScript 的页面,还应该增加一个特殊的注释,叫Web标志(saved from url=),这行注释要放在指定字符编码元素的后面,如下:
<head>
<meta charset="utf-8">
<!-- saved from url=(0014)about:internet -->
<title>A Tiny HTML Document</title>
这条注释告诉 IE 将页面视为从远程网站上下载下来的,否则,IE 会切换到一种特殊锁定模式,弹出一条安全警告,在你点了“允许阻止的内容”按钮之后才会执行 JavaScript 代码。
(0014) 指的是 about:internet 字符串的长度。
最终结果
一个完整美观的 HTML5 代码最终如下:
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<!-- saved from url=(0014)about:internet -->
<title>A Tiny HTML Document</title>
<link rel="stylesheet" href="TinyHTML5.css">
<script src="TinyHTML5.js"></script>
</head>
<body>
<p>Let's rock the browser, HTML5 style.</p>
</body>
</html>
微信搜索公众号华清远见成都中心(cdfarsight),回复免费资料,免费领取嵌入式、Java、HTML5/WEB前端开发书籍!
*请认真填写需求信息,我们会在24小时内与您取得联系。