Compare commits
3 Commits
19cb7d4b15
...
43008b7cc6
Author | SHA1 | Date |
---|---|---|
luoliangyi | 43008b7cc6 | |
luoliangyi | ad221c136c | |
luoliangyi | 5b230ba660 |
|
@ -11,6 +11,8 @@
|
|||
#include <QMessageBox>
|
||||
#include <QFile>
|
||||
#include "app_cfg.h"
|
||||
#include "lang/app_language.h"
|
||||
#include "ocrPdf.h"
|
||||
|
||||
Dialog_ExportImageFile::Dialog_ExportImageFile(const QString &destPath, const QString &destName, const QString &destExt,
|
||||
bool isSaveAsMulti, int jpegQuality, int tiffCompressionBW, int tiffCompression, int tiffQuality, bool isOcr,
|
||||
|
@ -124,73 +126,160 @@ HGResult Dialog_ExportImageFile::processMultiFileOcr()
|
|||
int handleCount = 0;
|
||||
QString fileName = m_destPath + m_destName + m_destExt;
|
||||
|
||||
HGOCRMgr ocrMgr = nullptr;
|
||||
HGResult ret = HGImgProc_CreateOCRMgr(HGIMGPROC_OCRALGO_HANVON, &ocrMgr);
|
||||
if (HGBASE_ERR_OK != ret)
|
||||
HGResult ret = HGBASE_ERR_FAIL;
|
||||
|
||||
bool useDefaultOcr = true;
|
||||
#if defined(OEM_ZHONGJING) && defined(HG_CMP_MSC)
|
||||
if (1258 == lang_get_cur_code_page())
|
||||
{
|
||||
HGChar tmpFileName[260];
|
||||
HGBase_GetTmpFileName("tif", tmpFileName, 260);
|
||||
HGImgFmtWriter writer = NULL;
|
||||
HGImgFmt_OpenImageWriter(tmpFileName, 0, &writer);
|
||||
if (NULL != writer)
|
||||
{
|
||||
for (int i = 0; i < m_srcFiles.size(); ++i)
|
||||
{
|
||||
if (m_stopThread)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
HGImgFmtReader imgFmtReader = nullptr;
|
||||
ret = HGImgFmt_OpenImageReader(getStdString(m_srcFiles[i]).c_str(), 0, &imgFmtReader);
|
||||
if (HGBASE_ERR_OK != ret)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
HGUInt count = 0;
|
||||
HGImgFmt_GetImagePageCount(imgFmtReader, &count);
|
||||
for (HGUInt j = 0; j < count; ++j)
|
||||
{
|
||||
if (m_stopThread)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
emit updateProgress(handleCount);
|
||||
|
||||
HGImage img = nullptr;
|
||||
ret = HGImgFmt_LoadImageFromReader(imgFmtReader, j, nullptr, 0, HGBASE_IMGORIGIN_TOP, &img);
|
||||
if (HGBASE_ERR_OK != ret)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
ret = HGImgFmt_SaveImageToWriter(writer, img, NULL);
|
||||
HGBase_DestroyImage(img);
|
||||
++handleCount;
|
||||
emit updateProgress(handleCount);
|
||||
|
||||
if (HGBASE_ERR_OK != ret)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
HGImgFmt_CloseImageReader(imgFmtReader);
|
||||
if (HGBASE_ERR_OK != ret)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
HGImgFmt_CloseImageWriter(writer);
|
||||
}
|
||||
|
||||
if (HGBASE_ERR_OK == ret)
|
||||
{
|
||||
ret = HGBASE_ERR_FAIL;
|
||||
if (CreateOcrPdf(QString::fromLocal8Bit(tmpFileName), fileName, "vie"))
|
||||
{
|
||||
useDefaultOcr = false;
|
||||
ret = HGBASE_ERR_OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
QFile::remove(fileName);
|
||||
}
|
||||
}
|
||||
|
||||
DeleteFileA(tmpFileName);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!useDefaultOcr)
|
||||
{
|
||||
return ret;
|
||||
}
|
||||
|
||||
for (int i = 0; i < m_srcFiles.size(); ++i)
|
||||
HGOCRMgr ocrMgr = nullptr;
|
||||
ret = HGImgProc_CreateOCRMgr(HGIMGPROC_OCRALGO_HANVON, &ocrMgr);
|
||||
if (HGBASE_ERR_OK == ret)
|
||||
{
|
||||
if (m_stopThread)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
HGImgFmtReader imgFmtReader = nullptr;
|
||||
ret = HGImgFmt_OpenImageReader(getStdString(m_srcFiles[i]).c_str(), 0, &imgFmtReader);
|
||||
if (HGBASE_ERR_OK != ret)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
HGUInt count = 0;
|
||||
HGImgFmt_GetImagePageCount(imgFmtReader, &count);
|
||||
for (HGUInt j = 0; j < count; ++j)
|
||||
for (int i = 0; i < m_srcFiles.size(); ++i)
|
||||
{
|
||||
if (m_stopThread)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
emit updateProgress(handleCount);
|
||||
|
||||
HGImage img = nullptr;
|
||||
ret = HGImgFmt_LoadImageFromReader(imgFmtReader, j, nullptr, 0, HGBASE_IMGORIGIN_TOP, &img);
|
||||
HGImgFmtReader imgFmtReader = nullptr;
|
||||
ret = HGImgFmt_OpenImageReader(getStdString(m_srcFiles[i]).c_str(), 0, &imgFmtReader);
|
||||
if (HGBASE_ERR_OK != ret)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
ret = HGImgProc_AddToImageOCRList(ocrMgr, img);
|
||||
HGBase_DestroyImage(img);
|
||||
++handleCount;
|
||||
emit updateProgress(handleCount);
|
||||
HGUInt count = 0;
|
||||
HGImgFmt_GetImagePageCount(imgFmtReader, &count);
|
||||
for (HGUInt j = 0; j < count; ++j)
|
||||
{
|
||||
if (m_stopThread)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
emit updateProgress(handleCount);
|
||||
|
||||
HGImage img = nullptr;
|
||||
ret = HGImgFmt_LoadImageFromReader(imgFmtReader, j, nullptr, 0, HGBASE_IMGORIGIN_TOP, &img);
|
||||
if (HGBASE_ERR_OK != ret)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
ret = HGImgProc_AddToImageOCRList(ocrMgr, img);
|
||||
HGBase_DestroyImage(img);
|
||||
++handleCount;
|
||||
emit updateProgress(handleCount);
|
||||
|
||||
if (HGBASE_ERR_OK != ret)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
HGImgFmt_CloseImageReader(imgFmtReader);
|
||||
if (HGBASE_ERR_OK != ret)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
HGImgFmt_CloseImageReader(imgFmtReader);
|
||||
if (HGBASE_ERR_OK != ret)
|
||||
if (HGBASE_ERR_OK == ret)
|
||||
{
|
||||
break;
|
||||
ret = HGImgProc_ImageListOCRToFile(ocrMgr, 0, getStdString(fileName).c_str(), NULL, NULL);
|
||||
if (HGBASE_ERR_OK != ret)
|
||||
{
|
||||
QFile::remove(fileName);
|
||||
}
|
||||
}
|
||||
|
||||
HGImgProc_DestroyOCRMgr(ocrMgr);
|
||||
}
|
||||
|
||||
if (HGBASE_ERR_OK == ret)
|
||||
{
|
||||
ret = HGImgProc_ImageListOCRToFile(ocrMgr, 0, getStdString(fileName).c_str(), NULL, NULL);
|
||||
if (HGBASE_ERR_OK != ret)
|
||||
{
|
||||
QFile::remove(fileName);
|
||||
}
|
||||
}
|
||||
|
||||
HGImgProc_DestroyOCRMgr(ocrMgr);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -52,6 +52,7 @@
|
|||
#include "huagao/brand.h"
|
||||
#include <algorithm>
|
||||
#include "mqtt.h"
|
||||
#include "ocrPdf.h"
|
||||
|
||||
#define PASSWORD_KEY 4
|
||||
|
||||
|
@ -523,12 +524,35 @@ HGResult MainWindow::saveImage(HGImage image, const HGImgFmtSaveInfo* info, bool
|
|||
}
|
||||
|
||||
HGResult ret = HGBASE_ERR_FAIL;
|
||||
HGOCRMgr ocrMgr = nullptr;
|
||||
ret = HGImgProc_CreateOCRMgr(0, &ocrMgr);
|
||||
if (HGBASE_ERR_OK == ret)
|
||||
|
||||
bool useDefaultOcr = true;
|
||||
#if defined(OEM_ZHONGJING) && defined(HG_CMP_MSC)
|
||||
if (1258 == lang_get_cur_code_page())
|
||||
{
|
||||
ret = HGImgProc_ImageOCRToFile(ocrMgr, image, 0, fileName);
|
||||
HGImgProc_DestroyOCRMgr(ocrMgr);
|
||||
HGChar tmpFileName[260];
|
||||
HGBase_GetTmpFileName("bmp", tmpFileName, 260);
|
||||
if (HGBASE_ERR_OK == HGImgFmt_SaveImage(image, 0, NULL, tmpFileName))
|
||||
{
|
||||
if (CreateOcrPdf(QString::fromLocal8Bit(tmpFileName), QString::fromLocal8Bit(fileName), "vie"))
|
||||
{
|
||||
useDefaultOcr = false;
|
||||
ret = HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
DeleteFileA(tmpFileName);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (useDefaultOcr)
|
||||
{
|
||||
HGOCRMgr ocrMgr = nullptr;
|
||||
ret = HGImgProc_CreateOCRMgr(0, &ocrMgr);
|
||||
if (HGBASE_ERR_OK == ret)
|
||||
{
|
||||
ret = HGImgProc_ImageOCRToFile(ocrMgr, image, 0, fileName);
|
||||
HGImgProc_DestroyOCRMgr(ocrMgr);
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
@ -4411,116 +4435,13 @@ void MainWindow::ocrMsgPumpFunc(HGMsgPump msgPump, const HGMsg *msg, HGPointer p
|
|||
#if defined(OEM_ZHONGJING) && defined(HG_CMP_MSC)
|
||||
if (1258 == lang_get_cur_code_page())
|
||||
{
|
||||
useDefaultOcr = false;
|
||||
|
||||
// 调用中晶OCR模块
|
||||
|
||||
std::string ocrPath;
|
||||
HKEY hKey = NULL;
|
||||
#ifdef _WIN64
|
||||
RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\WOW6432Node\\Microtek\\Microtek OCR Engine V1", 0, KEY_QUERY_VALUE, &hKey);
|
||||
#else
|
||||
RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microtek\\Microtek OCR Engine V1", 0, KEY_QUERY_VALUE, &hKey);
|
||||
#endif
|
||||
if (NULL != hKey)
|
||||
HGChar tmpFileName[260];
|
||||
HGBase_GetTmpFileName("pdf", tmpFileName, 260);
|
||||
if (CreateOcrPdf(*filePath, QString::fromLocal8Bit(tmpFileName), "vie"))
|
||||
{
|
||||
CHAR szData[MAX_PATH] = { 0 };
|
||||
DWORD cbData = MAX_PATH;
|
||||
if (ERROR_SUCCESS == RegQueryValueExA(hKey, "InstallPath_Fast", NULL, NULL, (LPBYTE)szData, &cbData))
|
||||
{
|
||||
ocrPath = szData;
|
||||
}
|
||||
|
||||
RegCloseKey(hKey);
|
||||
}
|
||||
|
||||
if (!ocrPath.empty())
|
||||
{
|
||||
HGChar tmpFileName[260];
|
||||
HGBase_GetTmpFileName(NULL, tmpFileName, 260);
|
||||
|
||||
DWORD len1 = GetEnvironmentVariableA("Path", NULL, 0);
|
||||
char* env1 = (char *)malloc((size_t)len1 + 256);
|
||||
if (NULL != env1)
|
||||
{
|
||||
memset(env1, 0, (size_t)len1 + 256);
|
||||
GetEnvironmentVariableA("Path", env1, len1 + 256);
|
||||
std::string ss(env1);
|
||||
if (ss.find(ocrPath) == std::string::npos)
|
||||
{
|
||||
strcat(env1, ";");
|
||||
strcat(env1, ocrPath.c_str());
|
||||
SetEnvironmentVariableA("Path", env1);
|
||||
}
|
||||
|
||||
free(env1);
|
||||
}
|
||||
|
||||
char env2[256] = {0};
|
||||
strcat(env2, ocrPath.c_str());
|
||||
strcat(env2, "\\");
|
||||
strcat(env2, "tessdata_f");
|
||||
SetEnvironmentVariableA("TESSDATA_PREFIX", env2);
|
||||
|
||||
const int MY_PIPE_BUFFER_SIZE = 1024;
|
||||
//初始化管道
|
||||
HANDLE hPipeRead = NULL;
|
||||
HANDLE hPipeWrite = NULL;
|
||||
SECURITY_ATTRIBUTES saOutPipe;
|
||||
::ZeroMemory(&saOutPipe, sizeof(saOutPipe));
|
||||
saOutPipe.nLength = sizeof(SECURITY_ATTRIBUTES);
|
||||
saOutPipe.lpSecurityDescriptor = NULL;
|
||||
saOutPipe.bInheritHandle = TRUE;
|
||||
CreatePipe(&hPipeRead, &hPipeWrite, &saOutPipe, MY_PIPE_BUFFER_SIZE);
|
||||
|
||||
PROCESS_INFORMATION ProcessInfo;
|
||||
::ZeroMemory(&ProcessInfo, sizeof(ProcessInfo));
|
||||
STARTUPINFOA StartupInfo;
|
||||
ZeroMemory(&StartupInfo, sizeof(StartupInfo));
|
||||
StartupInfo.cb = sizeof(StartupInfo);
|
||||
StartupInfo.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
|
||||
StartupInfo.hStdOutput = hPipeWrite;
|
||||
StartupInfo.hStdError = hPipeWrite;
|
||||
StartupInfo.wShowWindow = SW_HIDE;
|
||||
|
||||
bool ret = false;
|
||||
char cmd[1024] = {0};
|
||||
sprintf(cmd, "tesseract.exe \"%s\" \"%s\" -l %s --psm %d --oem %d %s",
|
||||
filePath->toStdString().c_str(), tmpFileName, "vie", 3, 3, "pdf");
|
||||
BOOL b = CreateProcessA(NULL, cmd, NULL, NULL, TRUE, CREATE_NO_WINDOW, NULL, NULL, &StartupInfo, &ProcessInfo);
|
||||
if (b)
|
||||
{
|
||||
WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
|
||||
DWORD exitCode;
|
||||
GetExitCodeProcess(ProcessInfo.hProcess, &exitCode);
|
||||
if (0 == exitCode)
|
||||
ret = true;
|
||||
|
||||
DWORD dwReadLen = 0;
|
||||
DWORD dwStdLen = 0;
|
||||
if (PeekNamedPipe(hPipeRead, NULL, 0, NULL, &dwReadLen, NULL) && dwReadLen > 0)
|
||||
{
|
||||
char szPipeOut[MY_PIPE_BUFFER_SIZE];
|
||||
::ZeroMemory(szPipeOut, sizeof(szPipeOut));
|
||||
if (ReadFile(hPipeRead, szPipeOut, dwReadLen, &dwStdLen, NULL))
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
CloseHandle(ProcessInfo.hProcess);
|
||||
CloseHandle(ProcessInfo.hThread);
|
||||
}
|
||||
|
||||
CloseHandle(hPipeRead);
|
||||
CloseHandle(hPipeWrite);
|
||||
|
||||
if (ret)
|
||||
{
|
||||
strcat(tmpFileName, ".pdf");
|
||||
DeleteFileA(filePath->toLocal8Bit().toStdString().c_str());
|
||||
MoveFileA(tmpFileName, filePath->toLocal8Bit().toStdString().c_str());
|
||||
}
|
||||
DeleteFileA(filePath->toLocal8Bit().toStdString().c_str());
|
||||
MoveFileA(tmpFileName, filePath->toLocal8Bit().toStdString().c_str());
|
||||
useDefaultOcr = false;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -0,0 +1,123 @@
|
|||
#include "ocrPdf.h"
|
||||
#include <iostream>
|
||||
#include "base/HGBase.h"
|
||||
#ifdef HG_CMP_MSC
|
||||
#include <Windows.h>
|
||||
#include <atlstr.h>
|
||||
#endif
|
||||
#include <string>
|
||||
#include "base/HGUtility.h"
|
||||
|
||||
bool CreateOcrPdf(const QString &imgPath, const QString &dstFile, const char *lang)
|
||||
{
|
||||
#ifdef HG_CMP_MSC
|
||||
std::string ocrPath;
|
||||
HKEY hKey = NULL;
|
||||
#ifdef _WIN64
|
||||
RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\WOW6432Node\\Microtek\\Microtek OCR Engine V1", 0, KEY_QUERY_VALUE, &hKey);
|
||||
#else
|
||||
RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microtek\\Microtek OCR Engine V1", 0, KEY_QUERY_VALUE, &hKey);
|
||||
#endif
|
||||
if (NULL != hKey)
|
||||
{
|
||||
CHAR szData[MAX_PATH] = { 0 };
|
||||
DWORD cbData = MAX_PATH;
|
||||
if (ERROR_SUCCESS == RegQueryValueExA(hKey, "InstallPath_Fast", NULL, NULL, (LPBYTE)szData, &cbData))
|
||||
{
|
||||
ocrPath = szData;
|
||||
}
|
||||
|
||||
RegCloseKey(hKey);
|
||||
}
|
||||
|
||||
if (ocrPath.empty())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
DWORD len1 = GetEnvironmentVariableA("Path", NULL, 0);
|
||||
char* env1 = (char *)malloc((size_t)len1 + 256);
|
||||
if (NULL != env1)
|
||||
{
|
||||
memset(env1, 0, (size_t)len1 + 256);
|
||||
GetEnvironmentVariableA("Path", env1, len1 + 256);
|
||||
std::string ss(env1);
|
||||
if (ss.find(ocrPath) == std::string::npos)
|
||||
{
|
||||
strcat(env1, ";");
|
||||
strcat(env1, ocrPath.c_str());
|
||||
SetEnvironmentVariableA("Path", env1);
|
||||
}
|
||||
|
||||
free(env1);
|
||||
}
|
||||
|
||||
char env2[256] = {0};
|
||||
strcat(env2, ocrPath.c_str());
|
||||
strcat(env2, "\\");
|
||||
strcat(env2, "tessdata_f");
|
||||
SetEnvironmentVariableA("TESSDATA_PREFIX", env2);
|
||||
|
||||
DeleteFileA(dstFile.toLocal8Bit().toStdString().c_str());
|
||||
|
||||
const int MY_PIPE_BUFFER_SIZE = 1024;
|
||||
//初始化管道
|
||||
HANDLE hPipeRead = NULL;
|
||||
HANDLE hPipeWrite = NULL;
|
||||
SECURITY_ATTRIBUTES saOutPipe;
|
||||
::ZeroMemory(&saOutPipe, sizeof(saOutPipe));
|
||||
saOutPipe.nLength = sizeof(SECURITY_ATTRIBUTES);
|
||||
saOutPipe.lpSecurityDescriptor = NULL;
|
||||
saOutPipe.bInheritHandle = TRUE;
|
||||
CreatePipe(&hPipeRead, &hPipeWrite, &saOutPipe, MY_PIPE_BUFFER_SIZE);
|
||||
|
||||
|
||||
PROCESS_INFORMATION ProcessInfo;
|
||||
::ZeroMemory(&ProcessInfo, sizeof(ProcessInfo));
|
||||
STARTUPINFOA StartupInfo;
|
||||
ZeroMemory(&StartupInfo, sizeof(StartupInfo));
|
||||
StartupInfo.cb = sizeof(StartupInfo);
|
||||
StartupInfo.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
|
||||
StartupInfo.hStdOutput = hPipeWrite;
|
||||
StartupInfo.hStdError = hPipeWrite;
|
||||
StartupInfo.wShowWindow = SW_HIDE;
|
||||
|
||||
HGChar prefix[256];
|
||||
HGBase_GetFilePrefix(dstFile.toLocal8Bit().toStdString().c_str(), prefix, 256);
|
||||
|
||||
bool ret = false;
|
||||
char cmd[1024] = {0};
|
||||
sprintf(cmd, "tesseract.exe \"%s\" \"%s\" -l %s --psm %d --oem %d %s",
|
||||
imgPath.toLocal8Bit().toStdString().c_str(), prefix, lang, 3, 3, "pdf");
|
||||
BOOL b = CreateProcessA(NULL, cmd, NULL, NULL, TRUE, CREATE_NO_WINDOW, NULL, NULL, &StartupInfo, &ProcessInfo);
|
||||
if (b)
|
||||
{
|
||||
WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
|
||||
DWORD exitCode;
|
||||
GetExitCodeProcess(ProcessInfo.hProcess, &exitCode);
|
||||
if (0 == exitCode)
|
||||
ret = true;
|
||||
|
||||
DWORD dwReadLen = 0;
|
||||
DWORD dwStdLen = 0;
|
||||
if (PeekNamedPipe(hPipeRead, NULL, 0, NULL, &dwReadLen, NULL) && dwReadLen > 0)
|
||||
{
|
||||
char szPipeOut[MY_PIPE_BUFFER_SIZE];
|
||||
::ZeroMemory(szPipeOut, sizeof(szPipeOut));
|
||||
if (ReadFile(hPipeRead, szPipeOut, dwReadLen, &dwStdLen, NULL))
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
CloseHandle(ProcessInfo.hProcess);
|
||||
CloseHandle(ProcessInfo.hThread);
|
||||
}
|
||||
|
||||
CloseHandle(hPipeRead);
|
||||
CloseHandle(hPipeWrite);
|
||||
return ret;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
#ifndef __OCRPDF_H__
|
||||
#define __OCRPDF_H__
|
||||
|
||||
#include <QString>
|
||||
|
||||
bool CreateOcrPdf(const QString &imgPath, const QString &dstFile, const char *lang);
|
||||
|
||||
#endif /* __OCRPDF_H__ */
|
|
@ -235,6 +235,7 @@ SOURCES += \
|
|||
../../../app/scanner2/main.cpp \
|
||||
../../../app/scanner2/mainwindow.cpp \
|
||||
../../../app/scanner2/mqtt.cpp \
|
||||
../../../app/scanner2/ocrPdf.cpp \
|
||||
../../../app/scanner2/widget_imgproc_base.cpp \
|
||||
../../../app/scanner2/widget_statusbar.cpp \
|
||||
../../../app/scanner2/widget_imgproc_sidebar.cpp \
|
||||
|
@ -277,6 +278,7 @@ HEADERS += \
|
|||
../../../app/scanner2/graphicsscene.h \
|
||||
../../../app/scanner2/mainwindow.h \
|
||||
../../../app/scanner2/mqtt.h \
|
||||
../../../app/scanner2/ocrPdf.h \
|
||||
../../../app/scanner2/widget_imgproc_base.h \
|
||||
../../../app/scanner2/widget_statusbar.h \
|
||||
../../../app/scanner2/widget_imgproc_sidebar.h \
|
||||
|
|
Loading…
Reference in New Issue