日韩性视频-久久久蜜桃-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)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 午夜视| 亚洲蜜臀av| 99re免费视频| 朝鲜美女黑毛bbw | 国产乱码一区二区三区在线观看 | 综合久久91| 久久久久久久久久99精品 | 天堂久久久久 | 日韩精品免费电影 | 中文字幕一区二区三区精品 | 国产欧美日韩一区二区三区 | 久久精品69 | www.日本色 | 欧美日韩免费高清 | 99伊人| 6996电视影片免费看 | 精品熟妇无码av免费久久 | 日韩精品二区在线观看 | 精品视频一二区 | 日韩精品在线一区二区三区 | 亚洲欧美在线视频免费 | 一区二区三区中文视频 | 国产精品操 | 午夜精品久久久久久久四虎美女版 | 五月天综合社区 | 国产乱在线| 日本69视频| 国产猛男猛女超爽免费视频 | 国产精品高潮呻吟久久aⅴ码 | 黄色大片网站在线观看 | 精品国产一级久久 | 婷婷国产一区二区三区 | 久久女女| 香蕉传媒 | 少妇色 | 人妻aⅴ无码一区二区三区 阿v免费视频 | 久久久久九九九 | 野花成人免费视频 | 温柔女教师在线观看 | 在线不卡国产 | 欧美日韩视频一区二区 | 国产在线不卡av | 美女视频一区二区三区 | 天天射日日射 | 欧美乱视频 | a天堂亚洲 | 国产高清一区在线观看 | 最新av在线网址 | 欧美 亚洲 另类 激情 另类 | 亚洲 欧美 激情 另类 校园 | 天天视频天天爽 | 亚洲国产欧美一区二区三区深喉 | 国产精品系列在线播放 | 外国黄色录像 | 精品少妇一区二区三区免费观 | 在线观看黄色大片 | av色网站 | 99福利 | 五月天丁香 | 一本色道久久综合无码人妻 | 日韩字幕 | 成av人片在线观看www | 亚洲欧美色图视频 | 理论片琪琪午夜电影 | 亚洲精品国产精品乱码桃花 | 中文字幕二区在线观看 | 午夜激情av在线 | 亚洲午夜精品一区 | 国产精品99re | 欧美色交 | 999久久久久久久久6666 | 天天舔天天插 | 色av色 | 小镇姑娘国语版在线观看免费 | 精品自拍视频在线观看 | 狠狠干综合 | 天天摸天天碰天天爽天天弄 | 中文字幕性 | 俄罗斯厕所偷拍 | 超碰在线a | 国产视频一区二区视频 | 亚洲精品国产欧美 | 少妇闺蜜换浪荡h肉辣文 | 国产呻吟av | 一二三四区视频 | 嫩模啪啪 | 日本三级黄在线观看 | 九九视频免费 | 91av成人| 麻豆传媒在线观看 | 亚洲特黄视频 | 亚洲av无码一区二区二三区 | 久久久久久99精品久久久 | 人妖天堂狠狠ts人妖天堂狠狠 | 中国女人毛茸茸 | 热热色av | 人妻无码久久精品人妻 | 亚洲免费资源 | 国产精品女人精品久久久天天 |