日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

html文本下一页,Javascript html2canvas + jsPDF 导出PDF,解决一半文字在上一页一半文字在下一页的问题...

發(fā)布時間:2024/3/13 java 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 html文本下一页,Javascript html2canvas + jsPDF 导出PDF,解决一半文字在上一页一半文字在下一页的问题... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

var pdfContent = document.getElementById("pdfDiv");

var width = pdfContent.offsetWidth; //獲取dom 寬度

var height = pdfContent.offsetHeight; //獲取dom 高度

var canvas = document.createElement("canvas"); //創(chuàng)建一個canvas節(jié)點(diǎn)

var scale = 3; //定義任意放大倍數(shù) 支持小數(shù),越大越清晰

var offsetTop = pdfContent.offsetTop;

var rect = pdfContent.getBoundingClientRect();//獲取元素相對于視察的偏移量

canvas.width = width * scale; //定義canvas 寬度 * 縮放

canvas.height = (height + offsetTop) * scale; //定義canvas(高度 +偏移量 )*縮放

var content = canvas.getContext("2d");

content.scale(scale, scale); //獲取context,設(shè)置scale

content.translate(-rect.left, -rect.top);//設(shè)置context位置,值為相對于視窗的偏移量負(fù)值,讓圖片復(fù)位

var opts = {

background: "#fff",

scale: scale, // 添加的scale 參數(shù)

canvas: canvas, //自定義 canvas

// logging: true, //日志開關(guān),便于查看html2canvas的內(nèi)部執(zhí)行流程

width: width, //dom 原始寬度

height: height,

useCORS: true, // 【重要】開啟跨域配置

allowTaint: true,

taintTest: false

};

html2canvas(pdfContent,opts ).then(function (canvas) {

downloadCanvasWithMargin(canvas);

})

//-----------------------

function downloadCanvasWithMargin(canvas){

//關(guān)閉鋸齒

var context = canvas.getContext('2d');

context.mozImageSmoothingEnabled = false;

context.webkitImageSmoothingEnabled = false;

context.msImageSmoothingEnabled = false;

context.imageSmoothingEnabled = false;

let contentWidth = canvas.width;

let contentHeight = canvas.height;

//一頁pdf顯示html頁面生成的canvas高度;

let pageHeight = contentWidth / 595.28 * 841.89;

//未生成pdf的html頁面高度

let leftHeight = contentHeight;

let cutStartHeight = 0;

let canvasArr = [];

if(leftHeight > pageHeight) {

while (leftHeight > 0) {

//復(fù)制出(0, cutStartHeight)開始,contentWidth寬和pageHeight高的圖片

let cutImage = context.getImageData(0, cutStartHeight, contentWidth, pageHeight);

//從圖像底部開始校驗(yàn)顏色,直到驗(yàn)證到以白色結(jié)尾才開始切圖像

let moveUpPx = 0; //上移px數(shù)

let totalLength = cutImage.data.length;

let lineLength = 4 * contentWidth * 1; //一行的data容量

let leftLength = totalLength - lineLength;

let rightLength = totalLength;

let circle = 0; //循環(huán)次數(shù)

let pointRatio = 0.98; //一行給定顏色的占比系數(shù)

let pointRatioNum = contentWidth * pointRatio;

while( circle === moveUpPx ){

circle ++;

let ignorePoint = 0;

for(let i = leftLength; i< rightLength ; i+=4){

if(cutImage.data[i] === 255 || cutImage.data[i] === 251){

if(cutImage.data[i] === cutImage.data[i+1] && cutImage.data[i] === cutImage.data[i+2]){

ignorePoint++;

}

}

}

if(ignorePoint < pointRatioNum){

leftLength -= lineLength;

rightLength -= lineLength;

moveUpPx ++;

}

}

if(moveUpPx > 0){

cutImage = context.getImageData(0, cutStartHeight, contentWidth, pageHeight - moveUpPx);

}

leftHeight -= pageHeight - moveUpPx;

cutStartHeight += pageHeight - moveUpPx;

//創(chuàng)建新圖片

let nCanvas = document.createElement("canvas"); //創(chuàng)建一個canvas節(jié)點(diǎn)

nCanvas.width = canvas.width;

nCanvas.height = pageHeight - moveUpPx;

let nContext = nCanvas.getContext("2d");

nContext.mozImageSmoothingEnabled = false;

nContext.webkitImageSmoothingEnabled = false;

nContext.msImageSmoothingEnabled = false;

nContext.imageSmoothingEnabled = false;

nContext.putImageData(cutImage, 0, 0)

canvasArr.push(nCanvas);

}

}else{

canvasArr.push(canvas);

}

//處理尾頁圖片透明背景

let lastCanvas = canvasArr[canvasArr.length - 1];

let ctx = lastCanvas.getContext("2d");

// 將canvas的透明背景設(shè)置成白色--解決translate后便黑色背景的問題

let imageData = ctx.getImageData(0, 0, lastCanvas.width, lastCanvas.height);

for(var i = 0; i < imageData.data.length; i += 4) {

// 當(dāng)該像素是透明的,則設(shè)置成白色

if(imageData.data[i + 3] === 0) {

imageData.data[i] = 255;

imageData.data[i + 1] = 255;

imageData.data[i + 2] = 255;

imageData.data[i + 3] = 255;

}

}

ctx.putImageData(imageData, 0, 0);

var pdf = new jsPDF('', 'pt', 'a4');

let leftMargin = 20;

let topMargin = 20;

let a4Width = 595.28;

let a4Height = 841.89;

let imgWidth = a4Width - leftMargin * 2;

let imgHeight = a4Height - 2 * topMargin;

for(let i =0; i < canvasArr.length; i++){

let curCanvas = canvasArr[i];

let pageData = curCanvas.toDataURL('image/jpeg', 1.0);

//小于切分的高度,要換算比例高

if(curCanvas.height < pageHeight){

let ratioHeight = imgWidth / curCanvas.width * curCanvas.height;

pdf.addImage(pageData, 'JPEG', leftMargin, topMargin, imgWidth, ratioHeight);

}else{

pdf.addImage(pageData, 'JPEG', leftMargin, topMargin, imgWidth, imgHeight);

}

if(i < (canvasArr.length-1)){

pdf.addPage();

}

}

let date = new Date();

let year = date.getFullYear();

let month = date.getMonth() + 1;

let day = date.getDate();

let milliSeconds = date.getMilliseconds();

pdf.save(year + month + day + milliSeconds +'.pdf');

}

總結(jié)

以上是生活随笔為你收集整理的html文本下一页,Javascript html2canvas + jsPDF 导出PDF,解决一半文字在上一页一半文字在下一页的问题...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲三级免费 | 国产欧美日韩综合精品一区 | www亚洲天堂 | 国产毛片aaa | 精品久久久久一区 | av中文字幕一区二区 | 熟女毛毛多熟妇人妻aⅴ在线毛片 | 欧美激情第三页 | 另类国产| 高跟鞋av| 国产成人超碰人人澡人人澡 | 日本xxxx高潮少妇 | 国产精品午夜福利 | 亚洲精品久久久久久宅男 | 日韩不卡免费视频 | 国产一级一级片 | 日韩首页 | 三上悠亚ssⅰn939无码播放 | 色视频一区 | 亚洲视频你懂的 | 中文字幕在线三区 | 欧美日韩在线播放三区四区 | 久久橹| 91人妻一区二区三区 | 成人免费看片98欧美 | 精品视频999 | 成人1区2区3区 | 永久视频在线 | 天堂а在线中文在线新版 | 三上悠亚激情av一区二区三区 | 中文字幕23页 | 色综合久久88色综合天天免费 | 在线观看三区 | 在线视频免费观看一区 | 极品熟妇大蝴蝶20p 国产偷自拍视频 | 波多野在线播放 | 欧美乱欲视频 | 蜜桃久久一区二区三区 | 国产黄色大全 | 久久久久99人妻一区二区三区 | 久久久久久久久久久网站 | 欧美一区二区影院 | 国产不卡视频在线播放 | 视频在线观看91 | a一级黄色 | 久久久久久国产精品免费 | 欧美激情一区二区三区蜜桃视频 | 在线观看麻豆av | 欧美成年网站 | 无码gogo大胆啪啪艺术 | 国产精品久久影视 | 色男人影院 | xxxx久久 | 美女考逼 | 亚洲日本中文字幕 | 久久久久久久国产精品毛片 | 欧美日韩黄色一区二区 | 日本视频三区 | 久久免费看视频 | 自拍偷拍2019 | 污污视频网站免费观看 | 黄色的网站在线 | 999久久久精品视频 亚洲视频精品在线 | 亚洲精品国产精品乱码不66 | 国产精选视频在线观看 | 一级成人免费视频 | 欧美日一区二区 | 日韩爽片 | 青青草成人免费在线视频 | 新天堂网| 亚洲区自拍 | 日韩男女啪啪 | 中国久久久久 | av大全免费观看 | 国产裸体舞一区二区三区 | 99有精品 | 激情视频在线播放 | 黄色在线一区 | 国产精品成人免费视频 | 欧美三级少妇高潮 | 久久国内精品视频 | 欧美成人精品一区二区三区在线观看 | 欧美第一页 | 天天射天天色天天干 | 国产精品一区二区三区四区 | 一级一片免费看 | 日韩操比 | 五月婷婷七月丁香 | 五月天色站 | 蜜臀久久| 九九热在线免费观看 | 日本少妇全体裸体洗澡 | 一区二区三区韩国 | 另类色综合 | 天堂av中文 | 黄色小视频免费看 | 亚洲少妇毛片 | 一区二区中文字幕在线观看 | 欧美z○zo重口另类黄 |