Я использую jsPDF
для создания PDF
, содержащего около 20
изображений. Основной код выполняет следующие действия:
let data = await this.i2b_promise_func("http://localhost:3000/" + imgURL);
let url64 = data.base64;
jsPdfDoc.addImage(url64, 'PNG', x, y, width, height);
Итак, я успешно получаю строки base 64 и передаю их объекту jsPDF
, но когда я запускаю jsPdfDoc.save('new_pdf.pdf')
, я получаю сообщение об ошибке:
Uncaught RangeError: Неверная длина строки
Я попытался просто выбрать элемент img
с помощью d3
и передать этот элемент img
в addImage()
jsPDF
вместо строки base64, но он выдает ту же ошибку. Я добавляю изображения в несколько for
петель.
Весь код (с img
элементом d3
поиск) представлен ниже:
addNewImage(chartType, jsPdfDoc, chartId, width, numImg) {
let x = 5, y = 20;
//console.log(imgURL);
numImg = numImg + 1;
let imgElem = d3.select(chartId).node();
let ratio = imgElem.height / imgElem.width;
let height = ratio*width;
if (numImg % 2 === 0) {
x = width + 15;
}
if (numImg > 2) {
y = height + 20;
} else if (numImg > 8) {
jsPdfDoc.addPage();
numImg = 1;
x = 5;
y = 20;
}
// Somehow the first page images should be drawn differently
if (chartType === this.chartTypes[0]) {
console.log(width);
console.log(height);
//let base64Img = this.getBase64Image(imgElem, width, height);
//let data = this.i2b_promise_func("http://localhost:3000/" + imgURL);
//console.log(data);
jsPdfDoc.addImage(imgElem, 'PNG', x, y, width, height);
} else {
console.log(width);
console.log(height);
//let base64Img = this.getBase64Image(imgElem, 4*width, 4*height);
//let data = this.i2b_promise_func("http://localhost:3000/" + imgURL);
//console.log(data);
jsPdfDoc.addImage(imgElem, 'PNG', x, y, width, height);
}
return numImg;
}
saveAsPDF() {
//let imgElem = this.refs['chart_0_0'];
//console.log(imgElem.src);
var doc = new jsPDF();
let width = 80;
let numImg = 0;
for (let typeIdx = 0; typeIdx < this.chartTypes.length; typeIdx++) {
let chartType = this.chartTypes[typeIdx];
console.log(chartType);
doc.text(chartType, 90, 10);
let urlArr = this.get_analysis_charts(chartType);
for (let chartIdx = 0; chartIdx < urlArr.length; chartIdx++) {
let pathArr = urlArr[chartIdx];
// If the last differentially expressed genes charts are drawn
if (chartType === this.chartTypes[this.chartTypes.length - 1]) {
for (let idx = 0; idx < pathArr.length; idx++) {
let imgURL = pathArr[idx];
let chartId = '#chart_' + typeIdx + '_' + chartIdx + '_' + idx;
numImg = this.addNewImage(chartType, doc, chartId, width, numImg);
console.log('numImg');
console.log(numImg);
}
} else {
let chartId = '#chart_' + typeIdx + '_' + chartIdx;
numImg = this.addNewImage(chartType, doc, chartId, width, numImg);
console.log('numImg');
console.log(numImg);
}
}
doc.addPage();
numImg = 0;
}
doc.save('new_pdf.pdf');
}