﻿#include <Windows.h>
#include <KernelApiS.h>
#include <RecApiPlusS.h>

void main(int argc, char* argv[])
   {
   // SDK-Verzeichnis bestimmen (Bitte an Installation anpassen!)
   #define CSDK_PATH "C:\\Program Files (x86)\\OmniPage Capture SDK 20\\Bin"
   // Bilddatei als Quelle (1. Kommandozeilenparameter oder SAMPLE42_G.tif aus Bin-Pfad)
   PCSTR szInputFileName = (argc>=2) ? argv[1] : CSDK_PATH"\\SAMPLE42_G.tif";
   // Dokumentdatei als Ziel (2. Kommandozeilenparameter oder SAMPLE42_G.pdf in Bin-Pfad)
   PCSTR szOutputFileName = (argc>=3) ? argv[2] : CSDK_PATH"\\SAMPLE42_G.pdf";

   // Capture SDK initialisieren
   RecInitPlusS(CSDK_PATH, "Nuance", "OP_CSDK_Sample");

   // Einstellungen vornehmen
   kRecManageLanguages(0, SET_LANG, LANG_GER);              // Erkennungssprachen: nur Deutsch
   RecSetOutputFormat(0, "Converters.Text.PDFImageOnText"); // Ausgabeformat: PDF Image on Text

   // Bilddatei öffnen
   HIMGFILE hImgFile;
   if (kRecOpenImgFile(szInputFileName, &hImgFile, IMGF_READ, FF_TIFNO) == REC_OK)
      {
      // Temporäre Dokumentdatei anlegen
      HDOC hDoc;
      char szTmpPath[MAX_PATH], szTmpFileName[MAX_PATH];
      GetTempPath(sizeof(szTmpPath), szTmpPath);
      GetTempFileName(szTmpPath, "OPD", 0, szTmpFileName);
      if (RecCreateDoc(0, szTmpFileName, &hDoc, DOC_NORMAL) == REC_OK)
         {
         // Bilddateiseiten laden
         int nPages;
         kRecGetImgFilePageCount(hImgFile, &nPages);
         for (int iPageIdx = 0; iPageIdx<nPages; iPageIdx++)
            {
            HPAGE hPage = NULL;
            if (kRecLoadImg(0, hImgFile, &hPage, iPageIdx) == REC_OK || hPage != NULL)
               {
               // Einzelseiten erkennen
               IMG_INFO imgInfo;
               kRecGetImgInfo(0, hPage, II_CURRENT, &imgInfo);
               kRecPreprocessImg(0, hPage);                     // Bildvorverarbeitung (Ausrichtung usw.)
               kRecLocateZones(0, hPage);                       // Layout-Analyse
               kRecCopyOCRZones(hPage);                         // OCR-Zonen in User-Zonen umwandeln
               // Barcode-Zone initialisieren
               ZONE barZone;
               kRecInitZone(&barZone);
               barZone.fm = FM_BARCODE;
               barZone.rm = RM_BAR;
               barZone.rectBBox.right = imgInfo.Size.cx;
               barZone.rectBBox.bottom = imgInfo.Size.cy;
               kRecInsertZone(hPage, II_CURRENT, &barZone, -1); // Barcode-Zone für gesamte Seite anfügen
               kRecRecognize(0, hPage, NULL);                   // Text- und Barcode-Erkennung durchführen
               RecInsertPage(0, hDoc, hPage, -1);               // Seite an temporäre Datei anfügen
               }
            }
         // Ausgabedatei erzeugen
         DeleteFile(szOutputFileName);                          // Vorhandene Ausgabedatei löschen
         RecConvert2Doc(0, hDoc, szOutputFileName);             // Temporäre Datei in Ausgabedatei wandeln
         RecCloseDoc(0, hDoc);
         }
      DeleteFile(szTmpFileName);                                // Temporäre Datei löschen
      kRecCloseImgFile(hImgFile);                               // Bilddatei schließen
      }

   // Programmende
   RecQuitPlusS();                                              // Capture SDK schließen
   }
