Объединение нескольких pdf-файлов с помощью pdfMake.js в Угловой

#javascript #angular #pdfmake

Вопрос:

Я смог создать один pdf-файл, используя следующий код.

 this.docDefinition = {
      
      pageSize: 'LETTER',
      pageOrientation: 'landscape',
      pageMargins: [40, 30, 40, 30],

      header: function (page, pages) {
        return {
          height: 14,
          text: 'Sample',
          style: 'titleHeader',
          alignment: 'center'
        };
      },
      
      content: [
        this.buildSectionPatientInfo(),
        {
          table: {
            widths: ['50%', '50%'],
            headerRows: 0,
            body: [
              [
                // RIGHT SIDE
                [
                 
                  this.buildSectionServices(),    
                  this.buildSectionLabUseOnly()
                ],
                // LEFT SIDE
                [
                  
                  this.buildSectionFrame(),
                  this.buildSectionSpecialInstructionsLab()
                ]
              ]
            ]
          },
          layout: 'noBorders'
        },
      ],
      styles: {
        titleHeader: {
          fontSize: 16,
          bold: true,
          margin: [0, 10, 0, 0],
        },
        tableHeader: {
          bold: true,
          fontSize: 13,
          color: 'black'
        }
      },

      defaultStyle: {
        fontSize: 9,
        lineHeight: .9
      }
    };

    try {
      pdfMake.createPdf(this.docDefinition).open();
    } catch (e) {
      // check popup/ad blockers
      alert(e.toString());
    }
 

Но теперь у меня возникли проблемы с созданием нескольких PDF-файлов и объединением их в один pfd. Я попытался поместить цикл for внутри содержимого, но он выдает ошибки.

…………………..

 content: [
for (const labOrder of selectedLabOrders) {
        this.buildSectionPatientInfo(),
        {
          table: {
            widths: ['50%', '50%'],
            headerRows: 0,
            body: [
              [
                // RIGHT SIDE
                [
                  
                  this.buildSectionLabInfo(),
                  this.buildSectionLabUseOnly()
                ],
                // LEFT SIDE
                [
                  
                  this.buildSectionFrame(),
                  this.buildSectionSpecialInstructionsLab()
                ]
              ]
            ]
          },
          layout: 'noBorders'
        },
}
      ],
 

………….

Я был бы очень признателен, если бы кто-нибудь мог предложить решение для этого.

Ответ №1:

Выполните свои циклы перед созданием определения документа. Затем просто добавьте его в свой контент, вот так:

 const tables = [];

for (const labOrder of selectedLabOrders) {
   tables.push(
     this.buildSectionPatientInfo(),
        {
          table: {
            widths: ['50%', '50%'],
            headerRows: 0,
            body: [
              [
                // RIGHT SIDE
                [
                  
                  this.buildSectionLabInfo(),
                  this.buildSectionLabUseOnly()
                ],
                // LEFT SIDE
                [
                  
                  this.buildSectionFrame(),
                  this.buildSectionSpecialInstructionsLab()
                ]
              ]
            ]
          },
          layout: 'noBorders'
        })
}

 

Затем добавьте таблицы в свой контент:

 this.docDefinition = {
      
      pageSize: 'LETTER',
      pageOrientation: 'landscape',
      pageMargins: [40, 30, 40, 30],

      header: function (page, pages) {
        return {
          height: 14,
          text: 'Sample',
          style: 'titleHeader',
          alignment: 'center'
        };
      },
      
      content: [
        { tables }
      ],
      styles: {
        titleHeader: {
          fontSize: 16,
          bold: true,
          margin: [0, 10, 0, 0],
        },
        tableHeader: {
          bold: true,
          fontSize: 13,
          color: 'black'
        }
      },

      defaultStyle: {
        fontSize: 9,
        lineHeight: .9
      }
    };

    try {
      pdfMake.createPdf(this.docDefinition).open();
    } catch (e) {
      // check popup/ad blockers
      alert(e.toString());
    }

 

Комментарии:

1. Спасибо, Георгиос! Это работает.