Skip to content

Commit

Permalink
Merge pull request #262 from aravindballa/master
Browse files Browse the repository at this point in the history
Feature: add line numbers to section
  • Loading branch information
dolanmiu authored Jun 5, 2019
2 parents 5c1a731 + 2f68712 commit a5afce4
Show file tree
Hide file tree
Showing 5 changed files with 75 additions and 0 deletions.
25 changes: 25 additions & 0 deletions demo/demo40.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// Example demonstrating line numbers.
// Import from 'docx' rather than '../build' if you install from npm
import * as fs from "fs";
import { Document, Paragraph, Packer, LineNumberRestartFormat } from "../build";

const doc = new Document(
{},
{
lineNumberCountBy: 1,
lineNumberRestart: LineNumberRestartFormat.CONTINUOUS,
},
);



doc.addParagraph(new Paragraph('Hello').heading1());
doc.createParagraph("Himenaeos duis luctus nullam fermentum lobortis potenti vivamus non dis, sed facilisis ultricies scelerisque aenean risus hac senectus. Adipiscing id venenatis justo ante gravida placerat, ac curabitur dis pellentesque proin bibendum risus, aliquam porta taciti vulputate primis. Tortor ipsum fermentum quam vel convallis primis nisl praesent tincidunt, lobortis quisque felis vitae condimentum class ut sem nam, aenean potenti pretium ac amet lacinia himenaeos mi. Aliquam nisl turpis hendrerit est morbi malesuada, augue interdum mus inceptos curabitur tristique, parturient feugiat sodales nulla facilisi. Aliquam non pulvinar purus nulla ex integer, velit faucibus vitae at bibendum quam, risus elit aenean adipiscing posuere.");
doc.createParagraph("Sed laoreet id mattis egestas nam mollis elit lacinia convallis dui tincidunt ultricies habitant, pharetra per maximus interdum neque tempor risus efficitur morbi imperdiet senectus. Lectus laoreet senectus finibus inceptos donec potenti fermentum, ultrices eleifend odio suscipit magnis tellus maximus nibh, ac sit nullam eget felis himenaeos. Diam class sem magnis aenean commodo faucibus id proin mi, nullam sodales nec mus parturient ornare ad inceptos velit hendrerit, bibendum placerat eleifend integer facilisis urna dictumst suspendisse.");


const packer = new Packer();

packer.toBuffer(doc).then((buffer) => {
fs.writeFileSync("My Document.docx", buffer);
});
1 change: 1 addition & 0 deletions src/file/document/body/section-properties/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@ export * from "./header-reference";
export * from "./page-size";
export * from "./page-number";
export * from "./page-border";
export * from "./line-number";
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from "./line-number";
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
// http://officeopenxml.com/WPsectionLineNumbering.php
import { XmlAttributeComponent, XmlComponent } from "file/xml-components";

export enum LineNumberRestartFormat {
CONTINUOUS = "continuous",
NEW_SECTION = "newSection",
NEW_PAGE = "newPage",
}

export interface ILineNumberAttributes {
readonly lineNumberCountBy?: number;
readonly lineNumberStart?: number;
readonly lineNumberRestart?: LineNumberRestartFormat;
readonly lineNumberDistance?: number;
}

export class LineNumberAttributes extends XmlAttributeComponent<ILineNumberAttributes> {
protected readonly xmlKeys = {
lineNumberCountBy: "w:countBy",
lineNumberStart: "w:start",
lineNumberRestart: "w:restart",
lineNumberDistance: "w:distance",
};
}

export class LineNumberType extends XmlComponent {
constructor(countBy?: number, start?: number, restart?: LineNumberRestartFormat, dist?: number) {
super("w:lnNumType");
this.root.push(
new LineNumberAttributes({
lineNumberCountBy: countBy,
lineNumberStart: start,
lineNumberRestart: restart,
lineNumberDistance: dist,
}),
);
}
}
10 changes: 10 additions & 0 deletions src/file/document/body/section-properties/section-properties.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import { FooterReferenceType } from "./footer-reference";
import { FooterReference } from "./footer-reference/footer-reference";
import { HeaderReferenceType } from "./header-reference";
import { HeaderReference } from "./header-reference/header-reference";
import { ILineNumberAttributes, LineNumberType } from "./line-number";
import { IPageBordersOptions, PageBorders } from "./page-border";
import { PageMargin } from "./page-margin/page-margin";
import { IPageMarginAttributes } from "./page-margin/page-margin-attributes";
Expand Down Expand Up @@ -44,6 +45,7 @@ export type SectionPropertiesOptions = IPageSizeAttributes &
IHeadersOptions &
IFootersOptions &
IPageNumberTypeAttributes &
ILineNumberAttributes &
IPageBordersOptions &
ITitlePageOptions;

Expand Down Expand Up @@ -71,6 +73,10 @@ export class SectionProperties extends XmlComponent {
footers,
pageNumberFormatType,
pageNumberStart,
lineNumberCountBy,
lineNumberStart,
lineNumberRestart,
lineNumberDistance,
pageBorders,
pageBorderTop,
pageBorderRight,
Expand All @@ -92,6 +98,10 @@ export class SectionProperties extends XmlComponent {
this.root.push(new PageNumberType(pageNumberStart, pageNumberFormatType));
}

if (lineNumberCountBy || lineNumberStart || lineNumberRestart || lineNumberDistance) {
this.root.push(new LineNumberType(lineNumberCountBy, lineNumberStart, lineNumberRestart, lineNumberDistance));
}

if (pageBorders || pageBorderTop || pageBorderRight || pageBorderBottom || pageBorderLeft) {
this.root.push(
new PageBorders({
Expand Down

0 comments on commit a5afce4

Please sign in to comment.