gpt4 book ai didi

javascript - 使用 PhantomJS 迭代 ID 并为每个 ID 生成报告 pdf

转载 作者:行者123 更新时间:2023-12-03 09:56:47 25 4
gpt4 key购买 nike

此代码为第一个员工生成一个 pdf,其 id 位于 url 地址中。我想迭代许多 id 并为每个员工生成多个具有唯一 id 的 pdf。

员工的记录是一个 CSV 文件,已在其他地方读取和解析。另外,为了迭代 ids,我创建了一个包含 ids 的数组,称为 idArray。 (例如idArray = ['123', '127', '156'])。您能帮我从 idArray 为每个 id 创建一个 pdf 吗?

var page = require('webpage').create(),
system = require('system'),
id = system.args[1];

page.open('http://127.0.0.1:3000/report.html?id=' + id, function () {

var intervalHandle;

// poll until
var ready = function () {
var ready = page.evaluate(function () {
return reportReady;
});

if (ready) {
clearInterval(intervalHandle);
page.render('report-id.pdf');
phantom.exit();
} else {
console.log("Not ready yet");
}

};

intervalHandle = setInterval(ready, 100);

});

最佳答案

问题是您不能简单地迭代 ID。 page.open() 是异步的,因此您可以告诉 PhantomJS 在上一个 ID 完成加载之前加载具有下一个 ID 的页面。

解决办法是使用递归。定义一个函数,其中包含执行一次迭代的逻辑,并使用该函数将多个回调串在一起:

var page = require('webpage').create(),
system = require('system'),
idArray = system.args[1].split(",");

iterate(); // let it run

function iterate() {
var id = idArray.shift(); // changes the idArray
page.open('http://127.0.0.1:3000/report.html?id=' + id, function () {
var intervalHandle;

// poll until
var ready = function () {
var ready = page.evaluate(function () {
return reportReady;
});

if (ready) {
clearInterval(intervalHandle);
page.render('report-id.pdf');

if (idArray.length > 0) {
iterate();
} else {
phantom.exit();
}
} else {
console.log("Not ready yet");
}

};

intervalHandle = setInterval(ready, 100);
});
}

我假设 ID 是这样传递的:

$ phantomjs script.js 4,8,15,16,23,42

关于javascript - 使用 PhantomJS 迭代 ID 并为每个 ID 生成报告 pdf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30712776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com