jsPDF Autotable Colspan на следующей странице создает проблему - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь создать PDF с таблицей в нем. Мое требование заключается в применении colspan на выборочных данных, я использовал https://simonbengtsson.github.io/jsPDF-AutoTable/#spans
&
https://github.com/simonbengtsson/jsPDF-AutoTable/blob/master/examples/examples.js#L258
для справки.

В приведенных выше примерах colspan реализован только на первой странице, я хочу продолжить то же самое и на других страницах. И особенно в случае разрыва страницы, я хочу, чтобы colspan располагался прямо под заголовком

но colspan отображается в начале второй страницы

Вот мой рабочий демонстрационный код, который я сделал до сих пор Ниже приведен пример кода

  function createTableinPDF(tableData) {
  var doc = new jsPDF("l", "pt");
  doc.setFontSize(12);
  doc.setTextColor(0);
  doc.setFontStyle("bold");
  doc.text("Account : ABC", 40, 20);
  doc.text(" ID   : 1", 40, 40);

  doc.autoTable(tableData.columns, tableData.rows, {
    theme: "grid",
    startY: 50,
    styles: { overflow: "linebreak", columnWidth: "wrap" },
    drawRow: function(row, data) {
      // Colspan

      doc.setFontStyle("bold");
      doc.setFontSize(10);
      //adding page
      var previousEndpointName =
        row.index === 0
          ? ""
          : data.table.rows[data.row.index - 1].raw.endPointName;
      var currentendPOintName =
        data.table.rows[data.row.index].raw.endPointName;
      console.log(currentendPOintName);
      var nextendPointName =
        data.table.rows.length - 1 === row.index
          ? ""
          : data.table.rows[data.row.index + 1].raw.endPointName;
      var countofItems = data.table.rows.filter(
        x => x.raw.endPointName === currentendPOintName
      ).length;
      var allCellsHeight = data.table.rows
        .filter(function(x) {
          return x.raw.endPointName === currentendPOintName;
        })
        .map(rowdata => rowdata.height)
        .reduce((a, x) => a + x);
      var posY = row.y + allCellsHeight + data.settings.margin.bottom;
      var pageHeight =
        doc.internal.pageSize.height || doc.internal.pageSize.getHeight();

      if (
        row.index === 0 ||
        row.index === 8 ||
        row.index === 17 ||
        row.index === 23
      ) {
        var posY = row.y + allCellsHeight + data.settings.margin.bottom;
        var pageHeight =
          doc.internal.pageSize.height || doc.internal.pageSize.getHeight();
        if (posY > pageHeight) {
          data.addPage();
          row.y = 0;
        }
        doc.setTextColor(200, 0, 0);
        doc.rect(
          data.settings.margin.left,
          row.y,
          data.table.width + 27.5,
          15,
          "S"
        );
        doc.autoTableText(
          currentendPOintName,
          data.settings.margin.left + data.table.width / 2,
          row.y + 15 / 2,
          {
            halign: "center",
            valign: "middle"
          }
        );
        data.cursor.y += 15;
      }
    },
    columnStyles: {
      criteriaName: { columnWidth: 80 },
      criteriaInc: { columnWidth: 355 },
      criteriaExc: { columnWidth: 355 }
    }
  });
  doc.save("table-colspan.pdf");
}

Буду признателен, если кто-нибудь сможет мне помочь.

...