博客 / 詳情

返回

解決 圖片太多截圖不全 問題 html2canvas dom-to-image jspdf

首先我需要截圖的demo圖片很多很多,當我使用html2canvas轉的時候總是有一部分沒有截上,我上網上找了幾個辦法,都沒有解決,就很狗血無語,,
gitlab上好像沒有一直沒有回覆
最後我是使用的dom-to-image插件解決的 搭配jspdf
沖沖衝
順便問一下 有將頁面轉為pdf的功能嗎 不轉為canvas圖片 就是直接dom元素和樣式生成為pdf 可編輯
不分頁

export const downloadPDF = async (ele) => {
  var element = window.document.querySelector(ele); // 這個dom元素是要導出pdf的div容器
  console.log(element);
  if (!element) return;

  const resp = await domtoimage.toPng(element);
  let contentWidth = element.clientWidth;
  let contentHeight = element.clientHeight;

  // 設置pdf的尺寸,pdf要使用pt單位 已知 1pt/1px = 0.75   pt = (px/scale)* 0.75
  // 2為上面的scale 縮放了2倍
  var pdfX = ((contentWidth + 10) / 2) * 0.75;
  var pdfY = ((contentHeight + 500) / 2) * 0.75; // 500為底部留白

  // 設置內容圖片的尺寸,img是pt單位
  var imgX = pdfX;
  var imgY = (contentHeight / 2) * 0.75; //內容圖片這裏不需要留白的距離

  var pdf = new jsPDF("p", "pt", [pdfX, pdfY]);
  // 將內容圖片添加到pdf中,因為內容寬高和pdf寬高一樣,就只需要一頁,位置就是 0,0
  pdf.addImage(resp, "jpeg", 0, 0, imgX, imgY);

  pdf.save(`1111f`);
};

分頁

export const downloadPDF = async (ele) => {
  var element = window.document.querySelector(ele); // 這個dom元素是要導出pdf的div容器
  console.log(element);
  if (!element) return;

  const resp = await domtoimage.toPng(element);
  let contentWidth = element.clientWidth;
  let contentHeight = element.clientHeight;

  let pageHeight = (contentWidth / 592.28) * 841.89;
  //未生成pdf的html頁面高度
  let leftHeight = contentHeight;
  //頁面偏移
  let position = 0;
  //a4紙的尺寸[595.28,841.89],html頁面生成的canvas在pdf中圖片的寬高
  let imgWidth = 595.28;
  let imgHeight = (592.28 / contentWidth) * contentHeight;
  let pdf = new jsPDF("", "pt", "a4");

  //有兩個高度需要區分,一個是html頁面的實際高度,和生成pdf的頁面高度(841.89)
  //當內容未超過pdf一頁顯示的範圍,無需分頁
  if (leftHeight < pageHeight) {
    pdf.addImage(resp, "JPEG", 0, 0, imgWidth, imgHeight);
  } else {
    while (leftHeight > 0) {
      pdf.addImage(resp, "JPEG", 0, position, imgWidth, imgHeight);
      leftHeight -= pageHeight;
      position -= 841.89;
      //避免添加空白頁
      if (leftHeight > 0) {
        pdf.addPage();
      }
    }
  }
  pdf.save('content.pdf');
};

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.