이 시나리오에서는 ABBYY FineReader Engine을 “스캔 컴퓨터”에서 사용하며, 이 컴퓨터가 이미지를 스캔해 파일로 저장합니다.이 시나리오는 문서 처리의 예비 단계에서 다른 시나리오의 일부로 사용할 수 있습니다. 즉, 후속 처리를 위해 문서의 전자 버전을 얻는 데 사용됩니다. 활용 예로는 보관용 문서 스캔, 편집 가능한 문서 버전 확보, 문서에서 특정 데이터 추출 등이 있습니다.종이 문서를 스캔한 뒤 이미지를 전자 형식으로 저장하여 인쇄 문서의 고품질 전자 버전을 생성할 수 있습니다.문서는 다음과 같은 처리 단계를 거칠 수 있습니다.
스캔
문서는 스캐너에서 제공하는 두 가지 스캔 인터페이스(TWAIN 또는 WIA) 중 하나를 통해 스캔하거나, ABBYY의 자체 스캔 인터페이스를 사용하거나, 스캔 인터페이스 없이 스캔할 수 있습니다.
스캔된 이미지의 전처리
스캔이 완료되면 이미지를 전처리할 수 있습니다. 전처리에는 얼룩 제거, 왜곡된 텍스트 줄 보정, 컬러 반전, 검은 여백 제거, 이미지 방향 또는 해상도 보정이 포함됩니다. 마주 보는 페이지는 두 개의 별도 이미지로 분할할 수 있습니다. 처리된 이미지는 JPEG, TIFF, BMP와 같은 다양한 이미지 형식으로 저장할 수 있습니다.
아래에서는 이 시나리오에서 ABBYY FineReader Engine 12를 사용하는 권장 방식에 대해 자세히 설명합니다. 제안된 시나리오 구현에서는 이미지 준비 단계가 생략됩니다. 이미지 준비를 구현하는 방법에 대한 팁은 아래의 추가 최적화를 참조하세요.
1단계. ABBYY FineReader Engine 로드
ABBYY FineReader Engine 사용을 시작하려면 Engine 객체를 생성해야 합니다. Engine 객체는 ABBYY FineReader Engine 객체 계층 구조의 최상위 객체로, 다양한 전역 설정과 일부 처리 메서드, 그리고 다른 객체를 생성하는 메서드를 제공합니다.Engine 객체를 생성하려면 InitializeEngine 함수를 사용할 수 있습니다. Engine 객체를 로드하는 다른 방법 (Win)도 참조하세요.
ABBYY FineReader Engine는 스캔 소스 관리를 위한 ScanManager 객체를 제공합니다. 이 객체의 ScanSources 속성을 통해 사용 가능한 모든 스캐너 목록에 접근할 수 있으며, FindScanSources 메서드를 사용하면 스캐너가 제공하는 API 유형과 스캔 옵션 설정에 사용할 사용자 인터페이스 유형을 기준으로 스캐너를 선택할 수 있습니다.파일을 스캔하여 디스크에 저장하려면 ScanSource 객체의 다음 두 가지 메서드 중 하나를 사용할 수 있습니다. Scan 메서드는 스캔이 완료될 때까지 반환하지 않으며, BeginScan 메서드는 비동기 스캔 작업을 시작한 후 즉시 반환합니다.IScanCallback 인터페이스를 구현하면 스캔 진행 상황에 대한 알림을 받을 수 있습니다.다음 매개변수는 ABBYY FineReader Engine 12 API를 통해 액세스할 수 있습니다: 밝기, 컬러, 해상도, 이미지 압축 유형, 이미지 회전 각도, 스캔 영역 크기, 양면 스캔 모드, 자동 급지 모드, 페이지 간 일시 정지 등. 스캔 매개변수는 ScanSource 객체의 ScanSettings 속성을 사용하여 설정합니다. 이 속성을 통해 ScanSourceSettings 객체에 액세스할 수 있으며, 해당 객체는 소스의 스캔 설정에 대한 접근을 제공합니다.이미지를 동기적으로 스캔하려면:
스캐너가 지원할 API 및 UI 유형을 지정한 후, ScanManager 객체의 FindScanSources 메서드를 사용하여 스캔 소스를 선택합니다.
사용자가 직접 스캔 옵션을 설정할 수 있도록 대화 상자를 표시하지 않으려면, 선택한 ScanSource의 ScanSettings 속성을 사용하여 스캔 옵션을 조정합니다. ScanSourceSettings 객체의 해당 속성에서 밝기, 해상도 및 기타 매개 변수에 적절한 값을 설정합니다. 이 스캐너에서 사용할 수 있는 설정은 ScanSource의 Capabilities 속성으로 확인할 수 있습니다.
스캔한 페이지가 저장될 폴더 이름을 지정합니다. 폴더 이름은 BSTR 변수여야 하며, 예를 들어 ScanFolder와 같아야 합니다.
ScanSource 객체의 Scan 메서드를 실행하고, 매개변수로 사용자에게 표시할 대화 상자의 유형(상자를 표시하지 않으려면 SSUIT_None 상수 전달)과 결과가 있는 폴더의 ScanFolder 경로를 지정합니다.
이미지 파일 이름은 이 메서드에 의해 StringsCollection 객체로 반환됩니다. 이 StringsCollection 객체에서 이미지 파일 이름을 가져온 다음, 해당 파일을 일반 이미지 파일처럼 처리할 수 있습니다.
이미지를 비동기적으로 스캔하려면:
IScanCallback 인터페이스를 구현하는 객체를 생성합니다. 비동기 스캔 작업의 경우 콜백 인터페이스에서 제공하는 알림이 매우 유용합니다.
ScanManager 객체를 생성합니다. CreateScanManager 메서드의 입력 Parameter를 통해 스캔 로그를 기록할지 여부를 지정할 수 있습니다.
ScanManager 객체의 FindScanSources 메서드를 사용해 스캐너에서 지원하는 API 및 UI 유형을 지정하여 스캔 소스를 선택합니다.
사용자가 스캔 옵션을 직접 설정할 수 있도록 대화 상자를 표시하지 않으려는 경우, 선택한 ScanSource의 ScanSettings 속성을 사용해 스캔 옵션을 조정합니다. ScanSourceSettings 객체의 해당 속성에서 밝기, 해상도 및 기타 매개 변수에 적절한 값을 지정합니다. 이 스캐너에서 사용할 수 있는 설정은 ScanSource의 Capabilities 속성으로 확인할 수 있습니다.
스캔한 페이지가 저장될 폴더 이름을 지정합니다. 폴더 이름은 BSTR 변수여야 하며, 예를 들어 ScanFolder를 사용할 수 있습니다.
ScanSource 객체의 BeginScan method를 실행하고, 사용자에게 표시할 대화 상자의 유형(상자를 표시하지 않으려면 SSUIT_None 상수를 전달)과 결과가 있는 폴더의 ScanFolder 경로를 매개변수로 지정합니다. 또한 생성한 콜백 객체에 대한 포인터도 전달해야 합니다.
이미지 파일의 경로는 IScanCallback 인터페이스의 OnImageScanned 알림과 함께 반환되며, 작업 완료는 OnScanComplete 알림으로 통지됩니다. 이러한 메서드를 직접 구현하므로, 각 상황에서 어떤 작업을 수행할지 선택할 수 있습니다. 예를 들어 이미지 파일의 경로를 받으면 디스크의 다른 파일과 마찬가지로 해당 파일을 다룰 수 있으며, 일반적인 방식으로 FineReader 엔진에서 처리할 수 있도록 불러올 수 있습니다.
스캔이 완료되고 OnScanComplete 알림을 받기 전까지는 다른 스캐너의 경우에도 BeginScan 또는 Scan을 다시 실행할 수 없습니다. 비동기 스캔의 장점은 여러 스캔 작업을 동시에 수행할 수 있다는 데 있는 것이 아니라, 새 이미지가 스캔되는 동안 이미 받은 이미지를 처리할 수 있다는 점입니다.
// IScanCallback 인터페이스 구현class ScanningCallback :FREngine.IScanCallback{ // 생성자 public ScanningCallback() {} ... // IScanCallback 메서드 구현 제공 public void OnError(string sourceName, string message) { // 여기서 오류를 보고하거나 처리합니다 } public void OnImageScanned(string sourceName, string Path, ref bool cancel) { // 이미지 스캔 시 수행할 작업을 여기에 추가합니다 } public void OnScanComplete() { // 스캔 완료 후 수행할 작업을 여기에 추가합니다 } // 전용 변수 ...}// 로그를 비활성화한 상태로 스캔 관리자를 생성합니다scanManager = engineLoader.Engine.CreateScanManager(false);// API 및 UI 유형으로 필터링된 스캔 소스 목록을 생성합니다FREngine.IScanSources sources = scanManager.FindScanSources(UIType, APIType);// 예시로, 컬렉션에서 첫 번째 스캔 소스를 선택합니다FREngine.IScanSource selectedSource = sources[0];// 스캔 소스 설정 및 기능에 액세스합니다FREngine.IScanSourceSettings settings = selectedSource.ScanSettings;FREngine.IScanSourceCapabilities capabilities = selectedSource.Capabilities;// 스캐너가 양면 모드를 지원하는 경우 스캔 옵션을 양면 모드로 설정합니다settings.DuplexMode = capabilities.HasDuplexMode;// 다중 페이지 스캔 및 페이지 간 10초 지연 옵션을 설정합니다settings.MultipleImagesEnabled = true;settings.PauseBetweenPagesMode = FREngine.ScanPauseModeEnum.SPM_PresetDelay;settings.Delay = 10;// 결과 폴더 경로를 설정합니다string scanFolder = "D:\\SampleImages";// 콜백 객체를 생성합니다IScanningCallback callback = new ScanningCallback();// 스캔을 시작합니다selectedSource.BeginScan(SSUIT_None, scanFolder, callback);
3단계. ABBYY FineReader Engine 언로드
ABBYY FineReader Engine 사용을 마친 후에는 Engine 객체를 언로드해야 합니다. 이렇게 하려면 내보낸 함수인 DeinitializeEngine을 사용합니다.
FREngineDistribution.csv 파일을 사용하면 애플리케이션 실행에 필요한 파일 목록을 자동으로 만들 수 있습니다. 이 시나리오에서 처리하려면 5번째 열(RequiredByModule)에서 다음 값을 선택합니다.CoreCore.ResourcesOpeningOpening, ProcessingOpening.Scanning표준 시나리오를 수정하는 경우 이에 맞춰 필수 모듈도 변경하십시오. 또한 애플리케이션에서 사용하는 인터페이스 언어, 인식 언어, 추가 기능도 지정해야 합니다(예: CJK languages 텍스트를 인식해야 하는 경우 Processing.OCR.CJK). 자세한 내용은 Working with the FREngineDistribution.csv File을 참조하십시오.
다양한 처리 단계의 매개변수 설정에 대한 추가 정보는 도움말의 다음 섹션에서 확인할 수 있습니다.
문서 분리
이 시나리오에서는 유입되는 이미지 흐름을 문서별로 그룹화해야 할 수 있습니다. 예를 들어 각 문서의 페이지 수를 알고 있거나, 첫 번째 문서의 마지막 페이지와 다음 문서의 첫 페이지 사이에 바코드가 있는 구분 페이지가 들어가도록 해야 할 수 있습니다. 바코드 인식 시나리오를 참조하세요.