-2

答えです。DJView lib の nodejs と ddjvu を使用するだけです。そこには

輸入品

const fs = require('fs');
const os = require('os');
const {spawn} = require('child_process');
const path = require('path');
const maxProcess = os.cpus().length - 1;// count of procces - 1 for system needs
let nowPlayed = 0;

ファイルを変換するためのメソッド、および変換されたときに削除します。

function chpoc(args) {
    console.log(args[1] + " start converting");
    spawn(`ddjvu`, ["-format=pdf", args[0], args[1] + ".pdf"]).on('close', (data) => {
        console.log(args[1] + ".pdf converted");
        fs.unlink(args[0], (err) => {
            if (err) throw err;
            console.log(args[0] + ' successfully deleted!');
            nowPlayed--;
        })
    });
}

一度に最大変換を最適化するためのキュー let queue = [];

function startQueue() {
    if (nowPlayed < maxProcess && queue.length) {
        nowPlayed++;
        queue.pop()();
    }
}

setInterval(startQueue, 500)

キューを埋めて開始する

function workWithFile(filepath) {
    const args = filepath.match(/(.*)\.djvu/)
    if (args && args.length) {
        queue.push(() => {
            chpoc(args);
        });
    }
}

エラーを表示

const eachCallback = function (err) {
    err && console.error(err);
}

カタログ3とdjvusを見つける

let filePaths = [];

function getFiles(dirPath, callback) {
    fs.readdir(dirPath, function (err, files) {
        if (err) return callback(err);
        files.forEach((fileName) => {
            setTimeout(() => {
                let filePath = path.join(dirPath, fileName);
                if (filePath) {
                    fs.stat(filePath, function (err, stat) {
                        if (err) return eachCallback(err);

                        if (stat.isDirectory()) {
                            getFiles(filePath, callback);
                        } else if (stat.isFile() && /\.djvu$/.test(filePath)) {
                            filePaths.push(filePath);
                            callback(filePath)
                        }
                    })
                }
            });
        });
    });

}

開始ディレクトリからの初期化

getFiles(__dirname, function (file) {
    workWithFile(file);
});
4

1 に答える 1