Как сделать, чтобы данные json конвертировались в формат pdf, используя машинопись - PullRequest
3 голосов
/ 24 апреля 2019

У меня есть данные JSON, мне нужно преобразовать их в формат PDF, нажав кнопку PDF в пользовательском интерфейсе. Я хочу, чтобы формат PDF отображался в этом формате. Я сделал несколько вещей, но я не понимаю, как связать ответ на функцию PDF. Здесь я хочу, чтобы 2 сценария были сопоставлены, здесь в массиве "actualExpenses" мне нужно отобразить все значения в блоке и иметь массив "expenses" в каждом из массив «actualExpenses» объектов, и я хочу, чтобы этот "expenses" массив объектов находился чуть выше конкретных объектов «actualExpenses».

ДЕМО: ДЕМО

Шаблон:

image

TS:

captureScreen() {
    this.displayTable = true;
    let grossItems = [];
    grossItems.push(this.grossItems);
    console.log(grossItems)
    var doc = new jsPDF();
        var col = [
          "Actual",
          "Based Amount",
          "Fixed %",
          "80% GU ",
          "85% GU",
          "90% GU",
          "95% GU",
          "100% GU"
        ];
        var col1 = [
          "Estimate",
           "Based Amount",
          "Fixed %",
          "80% GU ",
          "85% GU",
          "90% GU",
          "95% GU",
          "100% GU"
        ];
        var rows = [];
        for (let i = 0; i < grossItems[0].actualExpenses.length; i++) {
          var temp = [];
          for (var key in grossItems[0].actualExpenses[i]) {
            temp.push(grossItems.actualExpenses[i][key]);
          }
          rows.push(temp);
          console.log(temp, "temp");
        }
        doc.setFont("Times New Roman");
        doc.setFontSize(10);
        doc.text(20, 10, grossItems.propertyName);
        doc.text(20, 20, "Property Name Goes Here");
        doc.text(20, 30, "Budgeted Year:");
        doc.setTextColor(0, 0, 0);
        doc.text(20, 40, "Actual Occupancy:");
        doc.autoTable(col, rows, {
          theme: "plain",
          startY: 45,
          margin: {
            top: 45
          },
          drawHeaderRow: (head, data) => {
            data.doc.setLineWidth(0.7);
            data.doc.setDrawColor(0, 0, 0);
            data.doc.line(
              data.cursor.x,
              data.cursor.y,
              data.cursor.x + data.table.width,
              data.cursor.y
            );
            data.doc.line(
              data.cursor.x,
              data.cursor.y + head.height,
              data.cursor.x + data.table.width,
              data.cursor.y + head.height
            );
          }
        });
        doc.autoTable(col1, rows, {
          theme: "plain",
          startY: 100,
          margin: {
            top: 100
          },

          drawHeaderRow: (head, data) => {
            data.doc.setLineWidth(0.7);
            data.doc.setDrawColor(0, 0, 0);

            data.doc.line(
              data.cursor.x,
              data.cursor.y,
              data.cursor.x + data.table.width,
              data.cursor.y
            );

            data.doc.line(
              data.cursor.x,
              data.cursor.y + head.height,
              data.cursor.x + data.table.width,
              data.cursor.y + head.height
            );
          }
        });
        document
          .getElementById("convertToPdf")
          .setAttribute("src", doc.output("datauri"));
 }

Может кто-нибудь помочь мне связать значения и сделать так, чтобы мой pdf выглядел так, как в шаблоне, надеюсь, макет в порядке, теперь единственная проблема - привязать значения к шаблону.

1 Ответ

0 голосов
/ 24 апреля 2019

ваш captureScreen() должен выглядеть.

captureScreen() {
this.displayTable = true;
let grossItems = [];
grossItems.push(this.grossItems);
console.log(grossItems)
var doc = new jsPDF();
    var col = [
      "Actual",
      "Based Amount",
      "Fixed %",
      "80% GU ",
      "85% GU",
      "90% GU",
      "95% GU",
      "100% GU"
    ];
    var col1 = [
      "Estimate",
       "Based Amount",
      "Fixed %",
      "80% GU ",
      "85% GU",
      "90% GU",
      "95% GU",
      "100% GU"
    ];
    var rows = [];
    for (let i = 0; i < grossItems[0].actualExpenses.length; i++) {
      var temp = [];
      temp.push(grossItems[0].actualExpenses[i].category); // ADDED
      for (var key in grossItems[0].actualExpenses[i]) {
        temp.push(grossItems[0].actualExpenses[i].baseAmount); // CHANGED HERE
      }
      rows.push(temp);
      console.log(temp, "temp");
    }
    doc.setFont("Times New Roman");
    doc.setFontSize(10);
    doc.text(20, 10, grossItems[0].propertyName);
    doc.text(20, 20, "Property Name Goes Here");
    doc.text(20, 30, "Budgeted Year:");
    //  doc.text(50, 30, grossItems.owner.company);
    doc.setTextColor(0, 0, 0);
    doc.text(20, 40, "Actual Occupancy:"); 
    //  doc.text(55, 40, grossItems.owner.actual);
    doc.autoTable(col, rows, {
      theme: "plain",
      startY: 45,
      margin: {
        top: 45
      },
      drawHeaderRow: (head, data) => {
        data.doc.setLineWidth(0.7);
        data.doc.setDrawColor(0, 0, 0); // draw black lines
        // Write the line at the top of header
        data.doc.line(
          data.cursor.x,
          data.cursor.y,
          data.cursor.x + data.table.width,
          data.cursor.y
        );
        // Write the line at the bottom of header
        data.doc.line(
          data.cursor.x,
          data.cursor.y + head.height,
          data.cursor.x + data.table.width,
          data.cursor.y + head.height
        );
      }
    });
    doc.autoTable(col1, rows, {
      theme: "plain",
      startY: 100,
      margin: {
        top: 100
      },

      drawHeaderRow: (head, data) => {
        data.doc.setLineWidth(0.7);
        data.doc.setDrawColor(0, 0, 0); // draw black lines
        // Write the line at the top of header
        data.doc.line(
          data.cursor.x,
          data.cursor.y,
          data.cursor.x + data.table.width,
          data.cursor.y
        );
        // Write the line at the bottom of header
        data.doc.line(
          data.cursor.x,
          data.cursor.y + head.height,
          data.cursor.x + data.table.width,
          data.cursor.y + head.height
        );
      }
    });
    document
      .getElementById("convertToPdf")
      .setAttribute("src", doc.output("datauri"));
 }
}
...