Files
docx-js/src/file/document/body/section-properties/section-properties.ts

129 lines
4.4 KiB
TypeScript
Raw Normal View History

2018-01-24 00:01:38 +00:00
// http://officeopenxml.com/WPsection.php
import { XmlComponent } from "file/xml-components";
2018-09-04 17:16:31 +03:00
import { IPageBordersOptions, IPageNumberTypeAttributes, PageBorders, PageNumberFormat, PageNumberType } from "./";
2018-01-24 00:01:38 +00:00
import { Columns } from "./columns/columns";
2018-01-29 02:56:35 +00:00
import { IColumnsAttributes } from "./columns/columns-attributes";
2018-01-24 00:01:38 +00:00
import { DocumentGrid } from "./doc-grid/doc-grid";
import { IDocGridAttributesProperties } from "./doc-grid/doc-grid-attributes";
2018-06-22 23:04:03 +01:00
import { FooterReference, IFooterOptions } from "./footer-reference/footer-reference";
import { HeaderReference, IHeaderOptions } from "./header-reference/header-reference";
2018-01-24 00:01:38 +00:00
import { PageMargin } from "./page-margin/page-margin";
2018-01-29 02:56:35 +00:00
import { IPageMarginAttributes } from "./page-margin/page-margin-attributes";
2018-01-24 00:01:38 +00:00
import { PageSize } from "./page-size/page-size";
import { IPageSizeAttributes, PageOrientation } from "./page-size/page-size-attributes";
2018-09-04 17:16:31 +03:00
import { TitlePage } from "./title-page/title-page";
type IHeadersOptions = {headers? : IHeaderOptions[]}
type IFootersOptions = {footers? : IFooterOptions[]}
2018-01-24 00:01:38 +00:00
export type SectionPropertiesOptions = IPageSizeAttributes &
IPageMarginAttributes &
IColumnsAttributes &
IDocGridAttributesProperties &
2018-09-04 17:16:31 +03:00
IHeadersOptions &
IFootersOptions &
IPageNumberTypeAttributes &
2018-08-09 23:22:03 +01:00
IPageBordersOptions;
2018-01-24 00:01:38 +00:00
export class SectionProperties extends XmlComponent {
2018-08-07 01:38:15 +01:00
private readonly options: SectionPropertiesOptions;
2018-01-24 13:09:34 +00:00
constructor(options?: SectionPropertiesOptions) {
2018-01-24 00:01:38 +00:00
super("w:sectPr");
2018-01-24 13:09:34 +00:00
const defaultOptions = {
width: 11906,
height: 16838,
top: 1440,
right: 1440,
bottom: 1440,
left: 1440,
header: 708,
footer: 708,
gutter: 0,
space: 708,
linePitch: 360,
orientation: PageOrientation.PORTRAIT,
2018-09-04 17:16:31 +03:00
headers: [],
footers: [],
pageNumberStart: undefined,
pageNumberFormatType: PageNumberFormat.DECIMAL,
pageBorders: undefined,
pageBorderTop: undefined,
pageBorderRight: undefined,
pageBorderBottom: undefined,
pageBorderLeft: undefined,
2018-09-04 17:16:31 +03:00
titlePage : true
2018-01-24 13:09:34 +00:00
};
const mergedOptions = {
...defaultOptions,
...options,
};
2018-09-04 17:16:31 +03:00
2018-01-25 01:47:47 +00:00
this.root.push(new PageSize(mergedOptions.width, mergedOptions.height, mergedOptions.orientation));
2018-01-28 20:34:49 +00:00
this.root.push(
new PageMargin(
mergedOptions.top,
mergedOptions.right,
mergedOptions.bottom,
mergedOptions.left,
mergedOptions.header,
mergedOptions.footer,
mergedOptions.gutter,
),
);
2018-01-25 01:21:03 +00:00
this.root.push(new Columns(mergedOptions.space));
this.root.push(new DocumentGrid(mergedOptions.linePitch));
2018-05-18 09:21:27 -06:00
2018-09-04 17:16:31 +03:00
for (let header of mergedOptions.headers) {
this.root.push(
new HeaderReference({
headerType: header.headerType,
headerId: header.headerId,
}),
);
}
2018-09-04 17:16:31 +03:00
for (let footer of mergedOptions.footers) {
this.root.push(
new FooterReference({
footerType: footer.footerType,
footerId: footer.footerId,
}),
);
}
this.root.push(new PageNumberType(mergedOptions.pageNumberStart, mergedOptions.pageNumberFormatType));
if (
mergedOptions.pageBorders ||
mergedOptions.pageBorderTop ||
mergedOptions.pageBorderRight ||
mergedOptions.pageBorderBottom ||
mergedOptions.pageBorderLeft
) {
this.root.push(
new PageBorders({
pageBorders: mergedOptions.pageBorders,
pageBorderTop: mergedOptions.pageBorderTop,
pageBorderRight: mergedOptions.pageBorderRight,
pageBorderBottom: mergedOptions.pageBorderBottom,
pageBorderLeft: mergedOptions.pageBorderLeft,
}),
);
}
2018-09-04 17:16:31 +03:00
if (mergedOptions.titlePage) {
this.root.push(new TitlePage());
}
this.options = mergedOptions;
}
2018-08-03 02:29:58 +01:00
public get Options(): SectionPropertiesOptions {
return this.options;
2018-01-24 00:01:38 +00:00
}
}