【问题标题】:Problem in getting result form tessearct.js in PDF从 PDF 中的 tesseract.js 获取结果时出现问题
【发布时间】:2019-10-06 12:19:18
【问题描述】:

我正在使用 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!!!!");
})

【问题讨论】:

    标签: javascript node.js express multer tesseract.js


    【解决方案1】:

    您必须使用 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 行)中的参数 data 重命名为 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);
    });
    

    【讨论】:

      【解决方案2】:

      你可以使用pdf工具包

      const express = require('express');
      const app = express();
      const fs = require('fs');
      const multer = require('multer');
      const { createWorker } = require('tesseract.js');
      const worker = createWorker({
        logger: m => console.log(m)
      });
      const cors = require('cors');
      const PDFDocument = require('pdfkit');
      // Create a document
      const doc = new PDFDocument();
      // Pipe its output somewhere, like to a file or HTTP response
      // See below for browser usage
      doc.pipe(fs.createWriteStream('tesseract.js-ocr-result.pdf'));
      app.use(cors());
      var bodyParser = require('body-parser');
      app.use(bodyParser.json({ limit: '50mb' }));
      app.use(
        bodyParser.urlencoded({
          extended: true,
          limit: '50mb',
          parameterLimit: 1000000
        })
      );
      var Storage = multer.diskStorage({
        destination: (req, file, callback) => {
          callback(null, __dirname + '/images');
        },
        filename: (req, file, callback) => {
          callback(null, file.originalname);
        }
      });
      var upload = multer({
        storage: Storage
      }).single('avatar');
      app.post('/upload', (req, res) => {
        upload(req, res, err => {
          console.log('Request ---', req.body);
          console.log('Request file ---', req.file);
      
          fs.readFile(`./images/${req.file.originalname}`, (err, image) => {
            if (err) {
              console.log(err);
            }
            (async () => {
              await worker.load();
              await worker.loadLanguage('eng');
              await worker.initialize('eng');
              const {
                data: { text }
              } = await worker.recognize(image);
      
              doc.image(image, {
                fit: [250, 300],
                align: 'center',
                valign: 'center'
              });
              doc
                .addPage()
                .fontSize(25)
                .text(text);
              doc.end();
      
              await worker.terminate();
            })();
          });
        });
      });
      app.get('/download', (req, res) => {
        const file = `${__dirname}/tesseract.js-ocr-result.pdf`;
        res.download(file);
      });
      app.listen(5000, () => {
        console.log('server Started');
      });
      

      【讨论】:

        猜你喜欢
        • 2019-06-11
        • 2020-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-25
        • 2017-02-22
        • 1970-01-01
        • 2019-12-09
        相关资源
        最近更新 更多