首页 > 解决方案 > 在 PDF 中获取结果表单 tessearct.js 时出现问题

问题描述

我正在使用 tesseract.js 构建一个简单的 javaScript OCR(光学内容识别)应用程序,并且我将 {tess_create_pdf: "1"} 传递给 .recognize() 方法以获取 pdf 格式的结果,但它不起作用。所以请有人让我知道我正在做的问题。

const express  = require('express');
const app      = express();
const fs       = require('fs');
const multer   = require('multer');
const { createWorker } = require("tesseract.js");
const worker           = createWorker();

app.set("view engine", "ejs");
const storage = multer.diskStorage({
    destination: (req, file, cb) => {
        cb(null, './uploads');
    },
    filename: (req, file, cb) => {
        cb(null, file.originalname);
    }
})

const upload = multer({storage: storage}).single('avatar');

app.get('/', (req, res) => {
    res.render('index');
});

app.post('/upload', (req, res) => {
    upload(req, res, err => {
        fs.readFile(`./uploads/${req.file.originalname}`, (err, data) => {
        if(err) return console.log('this is your error', err);

        (async ()=> {
            await worker.load();
            await worker.loadLanguage('eng');
            await worker.initialize('eng');
            const { data: { text } } = await worker.recognize(data, { tessjs_create_pdf: "1"});
            res.send(text);
            await worker.terminate();
        })();
    });
  })
})

var port = 3000 || process.env.PORT;
app.listen(port, () => {
     console.log("server has started!!!!");
})

标签: javascriptnode.jsexpressmultertesseract.js

解决方案


您必须使用getPDF()函数来生成 PDF 文件。(在 tesseract.js 2.1.4 中)在识别文本之后和终止worker之前添加以下代码。在fs中使用writeFileSync将文件写入磁盘。

const { data } = await worker.getPDF("Tesseract OCR Result");
fs.writeFileSync("tesseract-ocr-result.pdf", Buffer.from(data));

如果要下载生成的 PDF 文件,请将用户重定向到另一条路线,使用...

    res.redirect("/download")

...并将以下代码添加到您的路线中。文件将保存在根目录中,因此我们可以使用__dirname作为路径。

app.get("/download", (req, res) => {
    const file = `${__dirname}/tesseract.js-ocr-result.pdf`;
    res.download(file);
});

您的最终代码将如下所示。为了避免冲突,我在下面的代码中将 fs.readline... (第 3 行)行中的参数数据重命名为img 。

app.post('/upload', (req, res) => {
    upload(req, res, err => {
        fs.readFile(`./uploads/${req.file.originalname}`, (err, img) => {
        if(err) return console.log('this is your error', err);

        (async ()=> {
            await worker.load();
            await worker.loadLanguage('eng');
            await worker.initialize('eng');
            await worker.recognize(img);

            const { data } = await worker.getPDF("Tesseract OCR Result");
            fs.writeFileSync("tesseract-ocr-result.pdf", Buffer.from(data));
            res.redirect("/download");

            await worker.terminate();
        })();
    });
  })
})

app.get("/download", (req, res) => {
    const file = `${__dirname}/tesseract-ocr-result.pdf`;
    res.download(file);
});

推荐阅读