Add dynamic relationships
This commit is contained in:
@ -41,6 +41,7 @@ export class Compiler {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
const xmlNumbering = xml(this.formatter.format(this.file.Numbering));
|
const xmlNumbering = xml(this.formatter.format(this.file.Numbering));
|
||||||
|
const xmlRelationships = xml(this.formatter.format(this.file.Relationships));
|
||||||
|
|
||||||
this.archive.append(xmlDocument, {
|
this.archive.append(xmlDocument, {
|
||||||
name: "word/document.xml",
|
name: "word/document.xml",
|
||||||
@ -58,6 +59,10 @@ export class Compiler {
|
|||||||
name: "word/numbering.xml",
|
name: "word/numbering.xml",
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this.archive.append(xmlRelationships, {
|
||||||
|
name: "word/_rels/document.xml.rels",
|
||||||
|
});
|
||||||
|
|
||||||
for (const data of this.file.Media.array) {
|
for (const data of this.file.Media.array) {
|
||||||
this.archive.append(data.stream, {
|
this.archive.append(data.stream, {
|
||||||
name: `media/${data.fileName}`,
|
name: `media/${data.fileName}`,
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import { Relationships } from "file/relationships";
|
||||||
import { Document } from "./document";
|
import { Document } from "./document";
|
||||||
import { Media } from "./media";
|
import { Media } from "./media";
|
||||||
import { Numbering } from "./numbering";
|
import { Numbering } from "./numbering";
|
||||||
@ -14,6 +15,7 @@ export class File {
|
|||||||
private properties: Properties;
|
private properties: Properties;
|
||||||
private numbering: Numbering;
|
private numbering: Numbering;
|
||||||
private media: Media;
|
private media: Media;
|
||||||
|
private relationships: Relationships;
|
||||||
|
|
||||||
constructor(options?: IPropertiesOptions) {
|
constructor(options?: IPropertiesOptions) {
|
||||||
this.document = new Document();
|
this.document = new Document();
|
||||||
@ -31,6 +33,7 @@ export class File {
|
|||||||
this.properties = new Properties(options);
|
this.properties = new Properties(options);
|
||||||
this.numbering = new Numbering();
|
this.numbering = new Numbering();
|
||||||
this.media = new Media();
|
this.media = new Media();
|
||||||
|
this.relationships = new Relationships();
|
||||||
}
|
}
|
||||||
|
|
||||||
public addParagraph(paragraph: Paragraph): void {
|
public addParagraph(paragraph: Paragraph): void {
|
||||||
@ -68,4 +71,8 @@ export class File {
|
|||||||
public get Media(): Media {
|
public get Media(): Media {
|
||||||
return this.media;
|
return this.media;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public get Relationships(): Relationships {
|
||||||
|
return this.relationships;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,15 @@
|
|||||||
|
import { XmlAttributeComponent } from "file/xml-components";
|
||||||
|
|
||||||
|
export interface IRelationshipAttributesProperties {
|
||||||
|
id: string;
|
||||||
|
type: string;
|
||||||
|
target: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class RelationshipAttributes extends XmlAttributeComponent<IRelationshipAttributesProperties> {
|
||||||
|
protected xmlKeys = {
|
||||||
|
id: "Id",
|
||||||
|
type: "Type",
|
||||||
|
target: "Target",
|
||||||
|
};
|
||||||
|
}
|
23
src/file/relationships/relationship/relationship.ts
Normal file
23
src/file/relationships/relationship/relationship.ts
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
import { XmlComponent } from "file/xml-components";
|
||||||
|
import { RelationshipAttributes } from "./relationship-attributes";
|
||||||
|
|
||||||
|
export type RelationshipType =
|
||||||
|
| "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"
|
||||||
|
| "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme"
|
||||||
|
| "http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings"
|
||||||
|
| "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles"
|
||||||
|
| "http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable"
|
||||||
|
| "http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings"
|
||||||
|
| "http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering";
|
||||||
|
|
||||||
|
export class Relationship extends XmlComponent {
|
||||||
|
constructor(id: string, type: RelationshipType, target: string) {
|
||||||
|
super("Relationship");
|
||||||
|
|
||||||
|
this.root.push(new RelationshipAttributes({
|
||||||
|
id,
|
||||||
|
type,
|
||||||
|
target,
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
@ -1,5 +1,6 @@
|
|||||||
import { XmlComponent } from "file/xml-components";
|
import { XmlComponent } from "file/xml-components";
|
||||||
import { RelationshipsAttributes } from "./attributes";
|
import { RelationshipsAttributes } from "./attributes";
|
||||||
|
import { Relationship, RelationshipType } from "./relationship/relationship";
|
||||||
|
|
||||||
export class Relationships extends XmlComponent {
|
export class Relationships extends XmlComponent {
|
||||||
|
|
||||||
@ -9,6 +10,18 @@ export class Relationships extends XmlComponent {
|
|||||||
xmlns: "http://schemas.openxmlformats.org/package/2006/relationships",
|
xmlns: "http://schemas.openxmlformats.org/package/2006/relationships",
|
||||||
}));
|
}));
|
||||||
|
|
||||||
// this.root.push(new Created());
|
this.createRelationship(1, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles", "styles.xml");
|
||||||
|
this.createRelationship(2, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering", "numbering.xml");
|
||||||
|
}
|
||||||
|
|
||||||
|
public addRelationship(relationship: Relationship): void {
|
||||||
|
this.root.push(relationship);
|
||||||
|
}
|
||||||
|
|
||||||
|
public createRelationship(id: number, type: RelationshipType, target: string): Relationship {
|
||||||
|
const relationship = new Relationship(`rId${id}`, type, target);
|
||||||
|
this.addRelationship(relationship);
|
||||||
|
|
||||||
|
return relationship;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
||||||
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
|
|
||||||
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml" />
|
|
||||||
<Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering" Target="numbering.xml" />
|
|
||||||
</Relationships>
|
|
Reference in New Issue
Block a user