build method

Uint8List build({
  1. String? password,
})

build API.

Implementation

Uint8List build({String? password}) {
  final OpcPackage package = OpcPackage.empty();
  package.packageRelationships.add(
    type: RelationshipTypes.officeDocument,
    target: 'word/document.xml',
  );
  package.createPart(
    '/word/document.xml',
    OfficeContentTypes.wordMain,
    utf8.encode(_documentXml()),
  );
  package.createPart(
    '/word/styles.xml',
    OfficeContentTypes.wordStyles,
    utf8.encode(_stylesXml()),
  );
  package.createPart(
    '/word/settings.xml',
    OfficeContentTypes.wordSettings,
    utf8.encode(_settingsXml()),
  );
  package.createPart(
    '/word/numbering.xml',
    OfficeContentTypes.wordNumbering,
    utf8.encode(_numberingXml()),
  );
  final RelationshipCollection rels = package.relationshipsFor(
    '/word/document.xml',
  );
  rels
    ..add(
      type: RelationshipTypes.styles,
      target: 'styles.xml',
      id: 'rIdStyles',
    )
    ..add(
      type: RelationshipTypes.settings,
      target: 'settings.xml',
      id: 'rIdSettings',
    )
    ..add(
      type: RelationshipTypes.numbering,
      target: 'numbering.xml',
      id: 'rIdNumbering',
    );
  if (_header != null) {
    package.createPart(
      '/word/header1.xml',
      OfficeContentTypes.wordHeader,
      utf8.encode(_hfXml(_header!, isHeader: true)),
    );
    rels.add(
      type: RelationshipTypes.header,
      target: 'header1.xml',
      id: 'rIdHeader',
    );
  }
  if (_footer != null) {
    package.createPart(
      '/word/footer1.xml',
      OfficeContentTypes.wordFooter,
      utf8.encode(_hfXml(_footer!, isHeader: false)),
    );
    rels.add(
      type: RelationshipTypes.footer,
      target: 'footer1.xml',
      id: 'rIdFooter',
    );
  }
  if (_comments.isNotEmpty) {
    package.createPart(
      '/word/comments.xml',
      OfficeContentTypes.wordComments,
      utf8.encode(_commentsXml()),
    );
    rels.add(
      type: RelationshipTypes.comments,
      target: 'comments.xml',
      id: 'rIdComments',
    );
  }
  for (final ({String id, String url}) link in _hyperlinks) {
    rels.add(
      type: RelationshipTypes.hyperlink,
      target: link.url,
      id: link.id,
      targetMode: RelationshipTargetMode.external,
    );
  }
  for (int i = 0; i < _images.length; i++) {
    final ({String name, Uint8List bytes, String mime}) img = _images[i];
    package.createPart('/word/media/${img.name}', img.mime, img.bytes);
    rels.add(
      type: RelationshipTypes.image,
      target: 'media/${img.name}',
      id: 'rIdImg${i + 1}',
    );
  }
  for (final ({int id, String xml}) chart in _charts) {
    package.createPart(
      '/word/charts/chart${chart.id}.xml',
      OfficeContentTypes.drawingChart,
      utf8.encode(chart.xml),
    );
    rels.add(
      type: RelationshipTypes.chart,
      target: 'charts/chart${chart.id}.xml',
      id: 'rIdChart${chart.id}',
    );
  }
  return package.save(password: password);
}