diff --git a/client/src/app/core/pdf-services/html-to-pdf.service.ts b/client/src/app/core/pdf-services/html-to-pdf.service.ts
index 4777121db..7a5173a85 100644
--- a/client/src/app/core/pdf-services/html-to-pdf.service.ts
+++ b/client/src/app/core/pdf-services/html-to-pdf.service.ts
@@ -129,7 +129,7 @@ export class HtmlToPdfService {
return this.P_MARGIN_BOTTOM;
}
case 'li': {
- return this.LI_MARGIN_BOTTOM;
+ return this.P_MARGIN_BOTTOM;
}
default: {
return this.P_MARGIN_BOTTOM;
@@ -234,12 +234,7 @@ export class HtmlToPdfService {
case 'div': {
const children = this.parseChildren(element, styles);
- // this introduces a bug with rendering sub-lists in PDF
- if (
- this.lineNumberingMode === LineNumberingMode.Outside &&
- !this.isInsideAList(element) &&
- !classes.includes('insert')
- ) {
+ if (this.lineNumberingMode === LineNumberingMode.Outside && !classes.includes('insert')) {
newParagraph = this.create('stack');
newParagraph.stack = children;
} else {
@@ -268,7 +263,7 @@ export class HtmlToPdfService {
}
// if the list ends (usually due to a new insert cr) prevent margins
- if (classes.includes('os-split-after')) {
+ if (classes.includes('os-split-after') || this.withSublist(element)) {
newParagraph.margin[3] = 0;
}
@@ -324,7 +319,10 @@ export class HtmlToPdfService {
break;
}
case 'br': {
- if (this.lineNumberingMode === LineNumberingMode.None && classes.includes('os-line-break')) {
+ if (
+ (this.lineNumberingMode === LineNumberingMode.None && classes.includes('os-line-break')) ||
+ (this.lineNumberingMode === LineNumberingMode.Outside && this.isInsideAList(element))
+ ) {
break;
} else {
newParagraph = this.create('text');
@@ -347,7 +345,7 @@ export class HtmlToPdfService {
}
// in case of line numbers and only of the list is not nested in another list.
- if (this.lineNumberingMode === LineNumberingMode.Outside && !this.isInsideAList(element)) {
+ if (this.lineNumberingMode === LineNumberingMode.Outside) {
const lines = this.extractLineNumbers(element);
const cleanedChildDom = this.cleanLineNumbers(element);
@@ -474,6 +472,17 @@ export class HtmlToPdfService {
};
}
+ /**
+ * Checks if a given LI has a sublist
+ */
+ private withSublist(element: Element): boolean {
+ if (element.nodeName.toLowerCase() === 'li') {
+ const hasUl = Array.from(element.children).some(child => child.nodeName.toLowerCase() === 'ul');
+ return hasUl;
+ }
+ return false;
+ }
+
/**
* Cleans the elements children from line-number spans
*
@@ -534,6 +543,8 @@ export class HtmlToPdfService {
// If this is an list item, add some space to the lineNumbers:
if (childrenLineNumbers.length && element.nodeName === 'LI') {
childrenLineNumbers[childrenLineNumbers.length - 1].marginBottom = this.LI_MARGIN_BOTTOM;
+ } else if (childrenLineNumbers.length && element.parentNode.nodeName === 'LI') {
+ childrenLineNumbers[childrenLineNumbers.length - 1].marginBottom = this.P_MARGIN_BOTTOM;
}
foundLineNumbers = foundLineNumbers.concat(childrenLineNumbers);