一、整体思路
- 使用 QT 创建一个用户界面,允许用户选择 PDF 扫描件所在的目录,定义需要识别的区域(可以通过鼠标绘制区域),并开始处理流程。
- 利用 Poppler 库将 PDF 文件转换为图像文件。
- 使用飞桨的 OCR 模型对用户指定的区域进行内容识别。
- 从识别结果中提取表格数据,并将其导出为表格文件格式(如 CSV 或 Excel)。
二、环境搭建
1. QT 开发环境安装:
- 从 QT 官方网站(Try Qt | Develop Applications and Embedded Systems | Qt)下载并安装适合您操作系统的 QT 开发工具包。根据不同的操作系统和编译器,进行相应的配置。
2. 安装 Poppler 库:
- Linux 系统:
bash
sudo apt-get install libpoppler-cpp-dev
- Windows 系统:
- 从 Poppler 官方网站(例如:Poppler)下载预编译的库。
- 在 QT 项目的
.pro
文件中添加库和头文件的路径:plaintext
INCLUDEPATH += path/to/poppler/include LIBS += -Lpath/to/poppler/lib -lpoppler-cpp
3. 安装飞桨库:
- 打开命令行终端,输入以下命令安装飞桨库:
pip install paddlepaddle
- 从飞桨的官方网站下载所需的 OCR 预训练模型,并将其放置在项目可访问的位置。
三、QT 界面设计与实现
1. 创建主窗口类:
#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QVBoxLayout>
#include <QFileDialog>
#include <QListWidget>
#include <QProgressBar>
#include <QLineEdit>
#include <QLabel>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsRectItem>
#include <iostream>
#include <vector>
#include <poppler/cpp/poppler-document.h>
#include <poppler/cpp/poppler-page.h>
#include <poppler/cpp/poppler-image.h>
class PDFTableExtractor : public QWidget {
Q_OBJECT
public:
PDFTableExtractor(QWidget *parent = nullptr) : QWidget(parent) {
// 创建界面元素
selectButton = new QPushButton("Select PDF Directory", this);
fileList = new QListWidget(this);
progressBar = new QProgressBar(this);
processButton = new QPushButton("Start Processing", this);
regionLabel = new QLabel("Specify Region (x,y,width,height):", this);
regionEdit = new QLineEdit(this);
graphicsView = new QGraphicsView(this);
scene = new QGraphicsScene(this);
graphicsView->setScene(scene);
QVBoxLayout *layout = new QVBoxLayout(this);
layout->addWidget(selectButton);
layout->addWidget(fileList);
layout->addWidget(regionLabel);
layout->addWidget(regionEdit);
layout->addWidget(graphicsView);
layout->addWidget(progressBar);
layout->addWidget(processButton);
// 连接按钮点击信号
connect(selectButton, &QPushButton::clicked, this, &PDFTableExtractor::selectDirectory);