3

请不要标记为重复。我已经浏览过许多 Stackoverflow 链接,但它们并没有解决我的问题。

我正在尝试做的事情:我必须从大约 1,50,000 个 pdf 文件中提取数据。

一个示例 pdf :所有这些 pdf 在结构上都是相同的,并且包含表格格式的数据(无图像)。pdf 的快照如下所示。

在此处输入图像描述

我所做的:我使用pdf2htmlEX终端命令Nodejs将 pdf 文件转换为 html。

var child_process = require('child_process');
var request = require('request');
var spawn = child_process.spawn;

var url = 'http://url_to_extract_data_from_pdf?Id=' + id;    //id ranges from 1 to 1,50,000
var pdfFileStream = fs.createWriteStream(id + '.pdf');

request(url).pipe(pdfFileStream);

pdfFileStream.on('finish', function () {
    console.log('Pdf file downloaded');

    var pdfToHtml = spawn('pdf2htmlEX', [id + '.pdf']);

    pdfToHtml.on('close', function () {
        console.log('Pdf file converted to html');

        jsdom.env({
            url: "http://localhost:1000/" + id + ".html",    //hard coded url for server -> current server running on localhost:1000
            scripts: ["http://code.jquery.com/jquery.js"],
            done: function (err, window) {

                if(err)
                    console.log(err);

                else {
                    var $ = window.$;

                    //jquery selectors to extract data
                    console.log($(".x14.y30").text().trim());
                    console.log($(".x15.y31").text().trim());
                    console.log($(".x16.y32").text().trim());
                }
            }
        });
    });
});

转换后的 html 文件如下所示:类名 x 后跟一个字符和 y 后跟一个字符的组合对于特定 div 是唯一的。例如。只有一个 divxfy10class。

在此处输入图像描述

我被困在哪里:虽然所有的 pdf 在格式和结构上都是相同的,但生成的 html 文件却不是。因此,可以说$(".x14.y30").text()可能会在 pdf - 1 中给我一些东西,它会在 pdf - 2 中给我其他东西。我还寻找了一些方法,可以在将 pdf 文件转换为 html 时修改类的分配方式. 但一切都是徒劳的。然后需要以制表符分隔的格式存储提取的数据。

使用这种方法不是强制性的。欢迎任何更好的建议。

4

0 回答 0