224 lines
5.6 KiB
JavaScript
224 lines
5.6 KiB
JavaScript
/**
|
|
* DOCX 样式模块
|
|
* 提供 Word 文档的样式定义和页脚模板
|
|
*/
|
|
|
|
(function(window) {
|
|
'use strict';
|
|
|
|
/**
|
|
* 标题大纲级别映射
|
|
*/
|
|
const HEADING_OUTLINE_LEVELS = {
|
|
Heading1: 0,
|
|
Heading2: 1,
|
|
Heading3: 2,
|
|
Heading4: 3,
|
|
Heading5: 4,
|
|
Heading6: 5
|
|
};
|
|
|
|
/**
|
|
* 构建 Word 样式 XML
|
|
* @returns {string} styles.xml 内容
|
|
*/
|
|
function buildStylesXml() {
|
|
return `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
<w:styles xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
|
|
<w:docDefaults>
|
|
<w:rPrDefault>
|
|
<w:rPr>
|
|
<w:rFonts w:ascii="Calibri" w:hAnsi="Calibri" w:eastAsia="DengXian" w:cs="Calibri"/>
|
|
<w:sz w:val="21"/>
|
|
<w:szCs w:val="21"/>
|
|
</w:rPr>
|
|
</w:rPrDefault>
|
|
<w:pPrDefault>
|
|
<w:pPr>
|
|
<w:spacing w:after="160"/>
|
|
</w:pPr>
|
|
</w:pPrDefault>
|
|
</w:docDefaults>
|
|
<w:style w:type="paragraph" w:default="1" w:styleId="Normal">
|
|
<w:name w:val="Normal"/>
|
|
<w:qFormat/>
|
|
<w:pPr>
|
|
<w:spacing w:after="160"/>
|
|
</w:pPr>
|
|
<w:rPr>
|
|
<w:rFonts w:ascii="Calibri" w:hAnsi="Calibri" w:eastAsia="DengXian" w:cs="Calibri"/>
|
|
<w:sz w:val="21"/>
|
|
<w:szCs w:val="21"/>
|
|
</w:rPr>
|
|
</w:style>
|
|
<w:style w:type="paragraph" w:styleId="Title">
|
|
<w:name w:val="Title"/>
|
|
<w:basedOn w:val="Normal"/>
|
|
<w:next w:val="Normal"/>
|
|
<w:uiPriority w:val="1"/>
|
|
<w:qFormat/>
|
|
<w:pPr>
|
|
<w:keepNext/>
|
|
<w:keepLines/>
|
|
<w:spacing w:before="240" w:after="160"/>
|
|
<w:jc w:val="center"/>
|
|
</w:pPr>
|
|
<w:rPr>
|
|
<w:b/>
|
|
<w:sz w:val="40"/>
|
|
<w:szCs w:val="40"/>
|
|
</w:rPr>
|
|
</w:style>
|
|
<w:style w:type="paragraph" w:styleId="Heading1">
|
|
<w:name w:val="heading 1"/>
|
|
<w:basedOn w:val="Normal"/>
|
|
<w:next w:val="Normal"/>
|
|
<w:uiPriority w:val="9"/>
|
|
<w:qFormat/>
|
|
<w:pPr>
|
|
<w:keepNext/>
|
|
<w:keepLines/>
|
|
<w:spacing w:before="240" w:after="0"/>
|
|
<w:outlineLvl w:val="0"/>
|
|
</w:pPr>
|
|
<w:rPr>
|
|
<w:b/>
|
|
<w:sz w:val="32"/>
|
|
<w:szCs w:val="32"/>
|
|
</w:rPr>
|
|
</w:style>
|
|
<w:style w:type="paragraph" w:styleId="Heading2">
|
|
<w:name w:val="heading 2"/>
|
|
<w:basedOn w:val="Normal"/>
|
|
<w:next w:val="Normal"/>
|
|
<w:uiPriority w:val="9"/>
|
|
<w:qFormat/>
|
|
<w:pPr>
|
|
<w:keepNext/>
|
|
<w:keepLines/>
|
|
<w:spacing w:before="200" w:after="0"/>
|
|
<w:outlineLvl w:val="1"/>
|
|
</w:pPr>
|
|
<w:rPr>
|
|
<w:b/>
|
|
<w:sz w:val="28"/>
|
|
<w:szCs w:val="28"/>
|
|
</w:rPr>
|
|
</w:style>
|
|
<w:style w:type="paragraph" w:styleId="Heading3">
|
|
<w:name w:val="heading 3"/>
|
|
<w:basedOn w:val="Normal"/>
|
|
<w:next w:val="Normal"/>
|
|
<w:uiPriority w:val="9"/>
|
|
<w:qFormat/>
|
|
<w:pPr>
|
|
<w:keepNext/>
|
|
<w:keepLines/>
|
|
<w:spacing w:before="160" w:after="0"/>
|
|
<w:outlineLvl w:val="2"/>
|
|
</w:pPr>
|
|
<w:rPr>
|
|
<w:b/>
|
|
<w:sz w:val="26"/>
|
|
<w:szCs w:val="26"/>
|
|
</w:rPr>
|
|
</w:style>
|
|
<w:style w:type="paragraph" w:styleId="Heading4">
|
|
<w:name w:val="heading 4"/>
|
|
<w:basedOn w:val="Normal"/>
|
|
<w:next w:val="Normal"/>
|
|
<w:uiPriority w:val="9"/>
|
|
<w:qFormat/>
|
|
<w:pPr>
|
|
<w:keepNext/>
|
|
<w:keepLines/>
|
|
<w:spacing w:before="160" w:after="0"/>
|
|
<w:outlineLvl w:val="3"/>
|
|
</w:pPr>
|
|
<w:rPr>
|
|
<w:b/>
|
|
<w:sz w:val="24"/>
|
|
<w:szCs w:val="24"/>
|
|
</w:rPr>
|
|
</w:style>
|
|
<w:style w:type="paragraph" w:styleId="Heading5">
|
|
<w:name w:val="heading 5"/>
|
|
<w:basedOn w:val="Normal"/>
|
|
<w:next w:val="Normal"/>
|
|
<w:uiPriority w:val="9"/>
|
|
<w:qFormat/>
|
|
<w:pPr>
|
|
<w:keepNext/>
|
|
<w:keepLines/>
|
|
<w:spacing w:before="120" w:after="0"/>
|
|
<w:outlineLvl w:val="4"/>
|
|
</w:pPr>
|
|
<w:rPr>
|
|
<w:b/>
|
|
<w:sz w:val="22"/>
|
|
<w:szCs w:val="22"/>
|
|
</w:rPr>
|
|
</w:style>
|
|
<w:style w:type="paragraph" w:styleId="Heading6">
|
|
<w:name w:val="heading 6"/>
|
|
<w:basedOn w:val="Normal"/>
|
|
<w:next w:val="Normal"/>
|
|
<w:uiPriority w:val="9"/>
|
|
<w:qFormat/>
|
|
<w:pPr>
|
|
<w:keepNext/>
|
|
<w:keepLines/>
|
|
<w:spacing w:before="120" w:after="0"/>
|
|
<w:outlineLvl w:val="5"/>
|
|
</w:pPr>
|
|
<w:rPr>
|
|
<w:b/>
|
|
<w:sz w:val="20"/>
|
|
<w:szCs w:val="20"/>
|
|
</w:rPr>
|
|
</w:style>
|
|
</w:styles>`;
|
|
}
|
|
|
|
/**
|
|
* 构建页脚 XML
|
|
* @param {string} footerText - 页脚文本
|
|
* @param {Object} options - 格式选项
|
|
* @returns {string} footer.xml 内容
|
|
*/
|
|
function buildFooterXml(footerText = 'by Paper Burner X', options = {}) {
|
|
const italic = options.italic !== false;
|
|
const fontSize = options.fontSize || 18;
|
|
const align = options.align || 'center';
|
|
|
|
const italicTag = italic ? '<w:i/>' : '';
|
|
const sizeVal = fontSize * 2; // Word 使用半磅为单位
|
|
|
|
return `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
<w:ftr xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
|
|
<w:p>
|
|
<w:pPr>
|
|
<w:jc w:val="${align}"/>
|
|
<w:spacing w:after="0"/>
|
|
</w:pPr>
|
|
<w:r>
|
|
<w:rPr>
|
|
${italicTag}
|
|
<w:sz w:val="${sizeVal}"/>
|
|
<w:szCs w:val="${sizeVal}"/>
|
|
</w:rPr>
|
|
<w:t xml:space="preserve">${footerText}</w:t>
|
|
</w:r>
|
|
</w:p>
|
|
</w:ftr>`;
|
|
}
|
|
|
|
// 导出到全局
|
|
window.PBXDocxStyles = {
|
|
HEADING_OUTLINE_LEVELS,
|
|
buildStylesXml,
|
|
buildFooterXml
|
|
};
|
|
|
|
})(window);
|