Add defaultStyles option to overwrite the core default styles (Heading 1-6, document, hyperlinks, etc)
This commit is contained in:
@ -17,14 +17,8 @@ import {
|
||||
} from "../build";
|
||||
|
||||
const doc = new Document({
|
||||
styles: {
|
||||
paragraphStyles: [
|
||||
{
|
||||
id: "Heading1",
|
||||
name: "Heading 1",
|
||||
basedOn: "Normal",
|
||||
next: "Normal",
|
||||
quickFormat: true,
|
||||
defaultStyles: {
|
||||
heading1: {
|
||||
run: {
|
||||
font: "Calibri",
|
||||
size: 52,
|
||||
@ -40,12 +34,7 @@ const doc = new Document({
|
||||
spacing: { line: 340 },
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "Heading2",
|
||||
name: "Heading 2",
|
||||
basedOn: "Normal",
|
||||
next: "Normal",
|
||||
quickFormat: true,
|
||||
heading2: {
|
||||
run: {
|
||||
font: "Calibri",
|
||||
size: 26,
|
||||
@ -55,12 +44,7 @@ const doc = new Document({
|
||||
spacing: { line: 340 },
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "Heading3",
|
||||
name: "Heading 3",
|
||||
basedOn: "Normal",
|
||||
next: "Normal",
|
||||
quickFormat: true,
|
||||
heading3: {
|
||||
run: {
|
||||
font: "Calibri",
|
||||
size: 26,
|
||||
@ -70,12 +54,7 @@ const doc = new Document({
|
||||
spacing: { line: 276 },
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "Heading4",
|
||||
name: "Heading 4",
|
||||
basedOn: "Normal",
|
||||
next: "Normal",
|
||||
quickFormat: true,
|
||||
heading4: {
|
||||
run: {
|
||||
font: "Calibri",
|
||||
size: 26,
|
||||
@ -85,6 +64,9 @@ const doc = new Document({
|
||||
alignment: AlignmentType.JUSTIFIED,
|
||||
},
|
||||
},
|
||||
},
|
||||
styles: {
|
||||
paragraphStyles: [
|
||||
{
|
||||
id: "normalPara",
|
||||
name: "Normal Para",
|
||||
@ -139,12 +121,6 @@ const doc = new Document({
|
||||
spacing: { line: 276, before: 20 * 72 * 0.1, after: 20 * 72 * 0.05 },
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "ListParagraph",
|
||||
name: "List Paragraph",
|
||||
basedOn: "Normal",
|
||||
quickFormat: true,
|
||||
},
|
||||
],
|
||||
},
|
||||
});
|
||||
|
@ -7,14 +7,8 @@ const doc = new Document({
|
||||
creator: "Clippy",
|
||||
title: "Sample Document",
|
||||
description: "A brief example of using docx",
|
||||
styles: {
|
||||
paragraphStyles: [
|
||||
{
|
||||
id: "Heading1",
|
||||
name: "Heading 1",
|
||||
basedOn: "Normal",
|
||||
next: "Normal",
|
||||
quickFormat: true,
|
||||
defaultStyles: {
|
||||
heading1: {
|
||||
run: {
|
||||
size: 28,
|
||||
bold: true,
|
||||
@ -27,12 +21,7 @@ const doc = new Document({
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "Heading2",
|
||||
name: "Heading 2",
|
||||
basedOn: "Normal",
|
||||
next: "Normal",
|
||||
quickFormat: true,
|
||||
heading2: {
|
||||
run: {
|
||||
size: 26,
|
||||
bold: true,
|
||||
@ -48,6 +37,14 @@ const doc = new Document({
|
||||
},
|
||||
},
|
||||
},
|
||||
listParagraph: {
|
||||
run: {
|
||||
color: '#FF0000'
|
||||
}
|
||||
}
|
||||
},
|
||||
styles: {
|
||||
paragraphStyles: [
|
||||
{
|
||||
id: "aside",
|
||||
name: "Aside",
|
||||
@ -75,12 +72,6 @@ const doc = new Document({
|
||||
spacing: { line: 276, before: 20 * 72 * 0.1, after: 20 * 72 * 0.05 },
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "ListParagraph",
|
||||
name: "List Paragraph",
|
||||
basedOn: "Normal",
|
||||
quickFormat: true,
|
||||
},
|
||||
],
|
||||
},
|
||||
numbering: {
|
||||
|
@ -1,3 +1,4 @@
|
||||
import { IDefaultStylesOptions } from "docx/src/file/styles/factory";
|
||||
import { XmlComponent } from "file/xml-components";
|
||||
import { IDocumentBackgroundOptions } from "../document";
|
||||
|
||||
@ -28,6 +29,7 @@ export interface IPropertiesOptions {
|
||||
readonly revision?: string;
|
||||
readonly externalStyles?: string;
|
||||
readonly styles?: IStylesOptions;
|
||||
readonly defaultStyles?: IDefaultStylesOptions;
|
||||
readonly numbering?: INumberingOptions;
|
||||
readonly footnotes?: Paragraph[];
|
||||
readonly hyperlinks?: {
|
||||
|
@ -106,14 +106,14 @@ export class File {
|
||||
this.styles = stylesFactory.newInstance(options.externalStyles);
|
||||
} else if (options.styles) {
|
||||
const stylesFactory = new DefaultStylesFactory();
|
||||
const defaultStyles = stylesFactory.newInstance();
|
||||
const defaultStyles = stylesFactory.newInstance(options.defaultStyles);
|
||||
this.styles = new Styles({
|
||||
...defaultStyles,
|
||||
...options.styles,
|
||||
});
|
||||
} else {
|
||||
const stylesFactory = new DefaultStylesFactory();
|
||||
this.styles = new Styles(stylesFactory.newInstance());
|
||||
this.styles = new Styles(stylesFactory.newInstance(options.defaultStyles));
|
||||
}
|
||||
|
||||
this.addDefaultRelationships();
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { DocumentAttributes } from "../document/document-attributes";
|
||||
import { IStylesOptions } from "./styles";
|
||||
|
||||
import { DocumentDefaults } from "./defaults";
|
||||
import { DocumentDefaults, IDocumentDefaultsOptions } from "./defaults";
|
||||
import {
|
||||
FootnoteReferenceStyle,
|
||||
FootnoteText,
|
||||
@ -13,12 +13,30 @@ import {
|
||||
Heading5Style,
|
||||
Heading6Style,
|
||||
HyperlinkStyle,
|
||||
IBaseCharacterStyleOptions,
|
||||
IBaseParagraphStyleOptions,
|
||||
ListParagraph,
|
||||
TitleStyle,
|
||||
} from "./style";
|
||||
|
||||
export interface IDefaultStylesOptions {
|
||||
readonly document?: IDocumentDefaultsOptions;
|
||||
readonly title?: IBaseParagraphStyleOptions;
|
||||
readonly heading1?: IBaseParagraphStyleOptions;
|
||||
readonly heading2?: IBaseParagraphStyleOptions;
|
||||
readonly heading3?: IBaseParagraphStyleOptions;
|
||||
readonly heading4?: IBaseParagraphStyleOptions;
|
||||
readonly heading5?: IBaseParagraphStyleOptions;
|
||||
readonly heading6?: IBaseParagraphStyleOptions;
|
||||
readonly listParagraph?: IBaseParagraphStyleOptions;
|
||||
readonly hyperlink?: IBaseCharacterStyleOptions;
|
||||
readonly footnoteReference?: IBaseCharacterStyleOptions;
|
||||
readonly footnoteText?: IBaseParagraphStyleOptions;
|
||||
readonly footnoteTextChar?: IBaseCharacterStyleOptions;
|
||||
}
|
||||
|
||||
export class DefaultStylesFactory {
|
||||
public newInstance(): IStylesOptions {
|
||||
public newInstance(options: IDefaultStylesOptions = {}): IStylesOptions {
|
||||
const documentAttributes = new DocumentAttributes({
|
||||
mc: "http://schemas.openxmlformats.org/markup-compatibility/2006",
|
||||
r: "http://schemas.openxmlformats.org/officeDocument/2006/relationships",
|
||||
@ -30,51 +48,58 @@ export class DefaultStylesFactory {
|
||||
return {
|
||||
initialStyles: documentAttributes,
|
||||
importedStyles: [
|
||||
new DocumentDefaults(),
|
||||
new DocumentDefaults(options.document),
|
||||
new TitleStyle({
|
||||
run: {
|
||||
size: 56,
|
||||
},
|
||||
...options.title,
|
||||
}),
|
||||
new Heading1Style({
|
||||
run: {
|
||||
color: "2E74B5",
|
||||
size: 32,
|
||||
},
|
||||
...options.heading1,
|
||||
}),
|
||||
new Heading2Style({
|
||||
run: {
|
||||
color: "2E74B5",
|
||||
size: 26,
|
||||
},
|
||||
...options.heading2,
|
||||
}),
|
||||
new Heading3Style({
|
||||
run: {
|
||||
color: "1F4D78",
|
||||
size: 24,
|
||||
},
|
||||
...options.heading3,
|
||||
}),
|
||||
new Heading4Style({
|
||||
run: {
|
||||
color: "2E74B5",
|
||||
italics: true,
|
||||
},
|
||||
...options.heading4,
|
||||
}),
|
||||
new Heading5Style({
|
||||
run: {
|
||||
color: "2E74B5",
|
||||
},
|
||||
...options.heading5,
|
||||
}),
|
||||
new Heading6Style({
|
||||
run: {
|
||||
color: "1F4D78",
|
||||
},
|
||||
...options.heading6,
|
||||
}),
|
||||
new ListParagraph({}),
|
||||
new HyperlinkStyle({}),
|
||||
new FootnoteReferenceStyle({}),
|
||||
new FootnoteText({}),
|
||||
new FootnoteTextChar({}),
|
||||
new ListParagraph(options.listParagraph || {}),
|
||||
new HyperlinkStyle(options.hyperlink || {}),
|
||||
new FootnoteReferenceStyle(options.footnoteReference || {}),
|
||||
new FootnoteText(options.footnoteText || {}),
|
||||
new FootnoteTextChar(options.footnoteTextChar || {}),
|
||||
],
|
||||
};
|
||||
}
|
||||
|
Reference in New Issue
Block a user