Запись на несколько пустых страниц с помощью Hummus.js

У меня есть длинный столбец, похожий на контент, который записывается в левую половину страницы (страница 1), но переполнен, поэтому мне нужно создать страницу 2 и закончить запись контента на страницу 2, прежде чем вернуться на страницу 1 и записать на Правая сторона.

Я создал код, который позволит мне сохранять страницы (страницы 1 и 2) в массиве, а также сохранять контексты в массиве, чтобы я мог легко переключаться между контекстами, в которые я пишу.

Однако новые страницы, которые я создаю, пусты, хотя я пишу в их контексте

Вот функция, которая вызывается, когда я готов создать страницу 2 и написать на ней тестовый оператор.

function createNewPage(){
      //Note all these variables are global, and hence I don't need to reinitialize them 

      if(lastPageNumber === 0 && currentPageNumber == 0){
          currentPageNumber++;
      }
      else{
          lastPageNumber++;
          currentPageNumber++;
      }
      //create a new page and store it in my array
      pagesArray[currentPageNumber] = pdfWriter.createPage(0, 0, eiReportPageWidth, eiReportPageHeight); 

      // create a new context and store it in my other array
      cxtArray[currentPageNumber] = pdfWriter.startPageContentContext(pagesArray[currentPageNumber]);

      //select the context I want to write to
      cxt = cxtArray[currentPageNumber];

      //I try writing to this new context but nothing happens and I get back a blank page

      cxt.writeText("Hello", 50, 400, fontOptions);
}

//Now that all elements are in place, write to the page

pagesArray.forEach(page =>{
    pdfWriter.writePage(page);
})

1 ответ

Объяснение:

Первый:

Вы должны указать fontOption должным образом. И я надеюсь на то же самое.

var arialFont = pdfWriter.getFontForFile('./arial.ttf');
var fontOptions = {font:arialFont,size:14,colorspace:'gray',color:0x00};

Во-вторых:

Если сначала все идеально, то вот в чем проблема.

if(lastPageNumber === 0 && currentPageNumber == 0){
  currentPageNumber++;
}
else{
  lastPageNumber++;
  currentPageNumber++;
}

Вы поддерживаете массив pagesArray[currentPageNumber] и массив начинается с 0, Но вы всегда увеличивается на 1, когда currentPageNumber == 0,

Итак, ваш pagesArray выглядит так:

[
  <1 empty item>,
  PDFPage {
    rotate: undefined,
    artBox: undefined,
    trimBox: undefined,
    bleedBox: undefined,
    cropBox: undefined,
    mediaBox: [ 0, 0, 595, 842 ]
  }
]

Так, pdfWriter.writePage(page) не сможет писать <1 empty item>,

Решение:

  • Либо у вас уже будет первая страница. (Но у вас нет)
  • Предполагая, что вы создаете свежий PDF. Вам нужно начать с 0, Просто используйте цикл для итерации currentPageNumber от 0 до lastPageNumber,

Смотрите рабочую демонстрацию здесь https://repl.it/@hrdk108/Hardik-Shah-hummus

Другие вопросы по тегам