prepare method
Prepare the object to be written to the stream
Implementation
@override
void prepare() {
super.prepare();
// These are for kids only
if (parent != null) {
params[PdfNameTokens.title] = PdfString.fromString(title!);
if (color != null) {
params[PdfNameTokens.c] = PdfArray.fromColor(color!);
}
if (style != PdfOutlineStyle.normal) {
params[PdfNameTokens.f] = PdfNum(style.index);
}
if (anchor != null) {
params[PdfNameTokens.dest] = PdfString.fromString(anchor!);
} else {
final dests = PdfArray();
dests.add(dest!.ref());
if (destMode == PdfOutlineMode.fitPage) {
dests.add(const PdfName(PdfNameTokens.fit));
} else {
dests.add(const PdfName(PdfNameTokens.fitr));
dests.add(PdfNum(rect!.left));
dests.add(PdfNum(rect!.bottom));
dests.add(PdfNum(rect!.right));
dests.add(PdfNum(rect!.top));
}
params[PdfNameTokens.dest] = dests;
}
params[PdfNameTokens.parent] = parent!.ref();
// were a descendent, so by default we are closed. Find out how many
// entries are below us
final c = descendants();
if (c > 0) {
params[PdfNameTokens.count] = PdfNum(-c);
}
final index = parent!.getIndex(this);
if (index > 0) {
// Now if were not the first, then we have a /Prev node
params[PdfNameTokens.prev] = parent!.getNode(index - 1).ref();
}
if (index < parent!.getLast()) {
// We have a /Next node
params[PdfNameTokens.next] = parent!.getNode(index + 1).ref();
}
} else {
// the number of outlines in this document
// were the top level node, so all are open by default
params[PdfNameTokens.count] = PdfNum(outlines.length);
}
// These only valid if we have children
if (outlines.isNotEmpty) {
// the number of the first outline in list
params[PdfNameTokens.first] = outlines[0].ref();
// the number of the last outline in list
params[PdfNameTokens.last] = outlines[outlines.length - 1].ref();
}
}