Forum How do I...?

getting the 'stdout maxBuffer length exceeded' Error in Node.js

alex11587
Hello,

So I'm getting the a maxbuffer exceeded error using Node.js for very large Pdf's over like 2MB's. Im using the ExecFile function like so:

let child = execFile(
"./prince",
princeArgs,
opts,
function (err, stdout, stderr) {
if (err) {
console.log("E2: Error on " + url);
reject(err);
}
if (
err === null &&
(m = stderr.toString().match(/prince:\s+error:\s+([^\n]+)/))
) {
console.log("E3: Error on " + url);
reject(Error(m[1]));
}
resolve(stdout);
}
);


i decided to try the spawn method and it has resolved my maxbuffer issue but now im getting blank pdf's.

Here is my code. Any help would be appreciated

async function generatePDF(html, url) {
if (html == null || html === "") {
reject(Error("No data came back from https.get call"));
}

var princeArgs = [
"-",
"--output=-",
"--media=screen",
"--insecure",
"--baseurl=" + process.env.BASE_URL,
"--debug",
"--verbose",
// "--log=/tmp/log.txt",
];

return new Promise(function (resolve, reject) {

let stdoutData = '';
let child = spawn(
"./prince",
princeArgs);
child.stdout.on('data', (data) => {
stdoutData += data.toString();

});

child.stderr.on('data', (data) => {
console.error(`stderr: ${data}`);
});

child.on('close', (code) => {
console.error(`close: ${stdoutData}`);
resolve(stdoutData);
});

child.on('error', (err) => {
console.error(`Failed to start subprocess: ${err}`);
});
child.stdin.write(html);
child.stdin.end();
});
}

mikeday
Have you tried using the existing Node.js wrapper for Prince?
alex11587
worked with Spawn rather Execfile