Как задать координаты ширины, высоты, x и y при генерации pdf из html с использованием нового html API JSPDF - PullRequest
1 голос
/ 16 мая 2019

Я использую JSPDF для создания PDF-документа на основе некоторых HTML. Ранее, используя jspdf из HTML Api, мы могли бы дать поля как это

      var margins2 = {
      top: 415,
      bottom: 10,
      left: 55,
      width: 300
  };

  doc.fromHTML(reactListContent, margins2.left, margins2.top, {
    'width': margins2.width,
    'elementHandlers': specialElementHandlers
  }, margins2);

Но в новом .html API я могу указать поля, ширину и высоту. Новый API похож на

var pdf = new jsPDF('p', 'pt', 'letter');
pdf.html(document.getElementById('html'), {
    callback: function (pdf) {
      console.log("how to get margins");
    }
});

1 Ответ

0 голосов
/ 02 июня 2019

Если вы посмотрите на исходный код jspdf.debug.js , html.js имеет опции для смещений x и y.

opt: {
    filename: 'file.pdf',
    margin: [0, 0, 0, 0],
    enableLinks: true,
    x: 0,
    y: 0,
    html2canvas: {},
    jsPDF: {}
}

Таким образом, вы можете установить координаты x и y следующим образом:

pdf.html(document.getElementById('html'), {
    x: 36,
    y: 36,
    callback: function () {
        // pdf.save('test.pdf');
        window.open(pdf.output('bloburl')); // to debug
    }
});

К сожалению, я не могу сделать то же самое, изменив margin: [0, 0, 0, 0]. Похоже, они все еще работают над этой проблемой . Таким образом, краткий ответ НЕ ДАЕТ .

Обходной путь - рассчитать масштаб html2canvas по марже:

let pdf = new jsPDF('p', 'pt', 'a4');
let left = 36; // narrow margin - 12.7 mm
let srcwidth = document.getElementById('html').style.width;
let scale = (595.28 - left * 2) / Math.ceil(srcwidth.replace('px','')); // a4 pageSize 595.28

pdf.html(document.getElementById('html'), {
    html2canvas: {
        scale: scale // default is window.devicePixelRatio,
    },
    x: left,
    y: 36,
    callback: function () {
        window.open(pdf.output('bloburl'));
    }
});
...