Запись на несколько пустых страниц с помощью 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