最新消息:这里是最新消息

记录从心书网站导出朋友圈pdf选项

JavaScript benty 17浏览 0评论

心血来潮想着把朋友圈做成书,心书自动抓取很方便,可是数据量太大,一共795页,官方打印要将近800块钱,这不是咱这种人能干出来的事啊,于是,开始搞.\

 

 

首先先把朋友圈数据让心书抓取完,然后进入预览页面,自己的思路就是写个for循环一页一页的遍历然后用jspdf导出到pdf.整体思路是这样,可是好久不碰代码毕竟多少有点生疏,一个下午没有搞定

下面是自己乱写的部分代码,献丑了

 

var doc = new jspdf.jsPDF({
orientation: ‘landscape’, // 可以是 ‘portrait’ 或 ‘landscape’
unit: ‘mm’, // 默认是 ‘pt’ (1pt = 1/72 inch)
format: ‘a4’ // 指定页面格式为A5
});
// 获取要导出的div元素
// var div = $(‘div.pages’); && !$(“button.next”).is(‘:disabled’)
var ii=0;
while (ii<2) {
console.log(ii);
$(“svg image”).remove();
var div =document.querySelector(“.pages”);
sleep(2000);
console.log(div);
// 使用html2canvas将div内容转换为canvas

html2canvas(div,{useCORS: true}).then(canvas =>{
// 将canvas转换为图像数据
var imgData = canvas.toDataURL(‘image/png’, 1.0);

// 将图像数据添加到pdf文档中
//doc.addPage();
//doc.addImage(imgData, ‘JPEG’, 0, 0, doc.internal.pageSize.getWidth(), doc.internal.pageSize.getHeight()); // 可根据需要调整位置和尺寸
doc.addImage(imgData, ‘JPEG’, 0, 0, 296, 210); // 可根据需要调整位置和尺寸
doc.addPage();

});

//sleep(2000);

ii++;
$(“button.next”).eq(0).click();
sleep(2000);

}
console.log(“开始保存”);
// 保存pdf文档
sleep(6000);
doc.save(‘div_to_pdf.pdf’);

明眼人一看就知道这个代码肯定有问题,但是整体流程就是这样,折腾一下午没有搞定,于是就在gemini上提问.

得到的代码如下

function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}

async function generatePdfFromDivs() {
var doc = new jspdf.jsPDF({
orientation: ‘landscape’, // 可以是 ‘portrait’ 或 ‘landscape’
unit: ‘mm’, // 默认是 ‘pt’ (1pt = 1/72 inch)
format: ‘a4’ // 指定页面格式为A4 (你之前写的是 A5)
});

var ii = 0;
const maxPages = 2; // 根据你的实际需求调整循环次数

async function processPage() {
if (ii < maxPages) {
console.log(ii);
$(“svg image”).remove();
var div = document.querySelector(“.pages”);
await sleep(2000);
console.log(div);

try {
const canvas = await html2canvas(div, { useCORS: true });
var imgData = canvas.toDataURL(‘image/png’, 1.0);
doc.addImage(imgData, ‘JPEG’, 0, 0, 296, 210);
if (ii < maxPages – 1) { // 避免在最后一页后添加空白页
doc.addPage();
}
} catch (error) {
console.error(“Error during html2canvas:”, error);
// 可以选择在这里中断流程或进行错误处理
}

ii++;
$(“button.next”).eq(0).click();
await sleep(2000);
return processPage(); // 递归调用处理下一页
} else {
console.log(“开始保存”);
await sleep(6000);
doc.save(‘div_to_pdf.pdf’);
console.log(“PDF 保存完成”);
}
}

return processPage(); // 启动处理流程
}

generatePdfFromDivs();

一下子就好了,顿时感觉自己知识的陈旧需要更新,并且感叹先在的ai真的是太厉害太省事了啊,后来也让gemini调整了大小尺寸问题,两个字,牛逼!!!

转载请注明:稻香的博客 » 记录从心书网站导出朋友圈pdf选项

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址