jsPDF, метод save вызывает 'Uncaught (в обещании) RangeError: Неверная длина строки' - PullRequest
0 голосов
/ 13 января 2019

Я использую 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');
}
...