61 lines
1.5 KiB
JavaScript
Executable file
61 lines
1.5 KiB
JavaScript
Executable file
#!/usr/bin/env node
|
|
|
|
/**
|
|
* Script Node.js standalone pour extraire le texte d'un PDF avec pdf-parse
|
|
* N'utilise PAS Webpack, donc pas de conflit avec pdfjs-dist
|
|
*
|
|
* Usage: node extract-pdf-text.js < input.pdf
|
|
* ou: node extract-pdf-text.js /path/to/file.pdf
|
|
*
|
|
* Retourne JSON: { text: "...", numPages: 3, info: {...} }
|
|
*/
|
|
|
|
const fs = require('fs');
|
|
const { PDFParse } = require('pdf-parse');
|
|
|
|
async function extractText() {
|
|
try {
|
|
// Lire le PDF depuis stdin ou fichier
|
|
let buffer;
|
|
|
|
if (process.argv[2]) {
|
|
// Fichier passé en argument
|
|
buffer = fs.readFileSync(process.argv[2]);
|
|
} else {
|
|
// Lire depuis stdin
|
|
const chunks = [];
|
|
for await (const chunk of process.stdin) {
|
|
chunks.push(chunk);
|
|
}
|
|
buffer = Buffer.concat(chunks);
|
|
}
|
|
|
|
// Extraire le texte avec pdf-parse v2
|
|
// Si on a un fichier, passer le chemin comme url
|
|
const options = process.argv[2]
|
|
? { url: process.argv[2] }
|
|
: { buffer };
|
|
|
|
const parser = new PDFParse(options);
|
|
const data = await parser.getText();
|
|
|
|
// Retourner le résultat en JSON
|
|
const result = {
|
|
text: data.text,
|
|
numPages: data.pages?.length || 0,
|
|
info: data.info,
|
|
metadata: data.metadata
|
|
};
|
|
|
|
console.log(JSON.stringify(result));
|
|
process.exit(0);
|
|
} catch (error) {
|
|
console.error(JSON.stringify({
|
|
error: error.message,
|
|
stack: error.stack
|
|
}));
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
extractText();
|