Dynamsoft Web Capture SDK로 Angular 문서 스캐너를 구축하는 방법

Dynamsoft Web Capture SDK은 WebAssembly 및 JavaScript로 구현된 카메라 기반 문서 스캔 SDK입니다. 기존 웹 스캐너 SDKDynamic Web TWAIN와 비교할 때 로컬 서비스 설치가 필요하지 않습니다. 즉, 웹 캡처 SDK는 모든 데스크톱 브라우저, 모바일 브라우저 및 WebView에서 작동할 수 있습니다. 이 문서에서는 처음부터 웹 캡처 SDK를 사용하여 Angular 문서 스캐너 앱을 빌드하는 방법을 안내합니다.

각도 개발 환경


  • Node.js

  • 각도 CLI v13.3.7

    npm install -g @angular/cli
    
    ng --version
    
    Angular CLI: 13.3.7
    Node: 16.13.1
    Package Manager: npm 8.1.2
    OS: win32 x64
    
    Angular: 13.3.10
    ... animations, common, compiler, compiler-cli, core, forms
    ... platform-browser, platform-browser-dynamic, router
    
    Package                         Version
    ---------------------------------------------------------
    @angular-devkit/architect       0.1303.7
    @angular-devkit/build-angular   13.3.7
    @angular-devkit/core            13.3.7
    @angular-devkit/schematics      13.3.7
    @angular/cli                    13.3.7
    @schematics/angular             13.3.7
    ng-packagr                      13.3.1
    rxjs                            7.5.5
    typescript                      4.6.4
    

  • Dynamsoft Web Capture SDK v17.2.5

  • 단계별 Angular 문서 스캐너 앱 만들기


    ng new 명령을 통해 새 Angular 프로젝트를 스캐폴딩하고 Dynamsoft Web Capture SDK를 터미널에 설치합니다.

    ng new angular-document-scanner
    cd angular-document-scanner
    npm i mobile-web-capture
    


    그런 다음 angular.json 파일을 열어 자산을 구성합니다.

    
    "build": 
    {
      "builder": "@angular-devkit/build-angular:browser",
      "options": {
        ...
        "assets": [
          "src/favicon.ico",
          "src/assets",
          {
            "glob": "**/*",
            "input": "./node_modules/mobile-web-capture/dist",
            "output": "assets/dynamic-web-twain"
          }
        ...
        ],
      },
      ...
    },
    
    

    ng build를 실행하면 모든 정적 리소스 파일이 assets/dynamic-web-twain 폴더에 복사됩니다.

    다음 단계는 document-scanner.component.css , document-scanner.component.html , document-scanner.component.spec.tsdocument-scanner.component.ts 파일을 포함하는 문서 스캐너 구성 요소를 만드는 것입니다.

    ng generate component document-scanner
    


    대상 UI 레이아웃에는 다음 요소가 포함됩니다.
  • 카메라 소스를 선택하기 위한 HTMLSelectElement입니다. 데스크톱 브라우저의 경우 모든 USB 카메라가 나열됩니다. 모바일 브라우저의 경우 모든 전면 및 후면 카메라가 나열됩니다.
  • 문서 스캔을 트리거하는 데 사용되는 버튼과 스캔한 문서를 다운로드하는 데 사용되는 버튼입니다.
  • 스캔 및 처리된 문서 이미지를 저장하기 위한 컨테이너로 설정된 HTMLDivElement.
  • document-scanner.component.html의 UI 구현은 다음과 같습니다.

    
    <div class="document-scanner">
        <h1>Angular Document Scanner</h1>
        <div>
            <label for="videoSource">Video source: </label>
            <select id="videoSource"></select>
            <p></p>
            <button id="scanButton" (click)="scanDocument()">Scan Document</button> <button id="scanButton" (click)="downloadDocument()">Download Document</button>
        </div>
    
        <h3>Document Container</h3>
        <div id="dwtcontrolContainer"></div>
    
    </div>
    


    이제 document-scanner.component.ts에 해당 TypeScript 코드를 추가하겠습니다.
  • mobile-web-capture 패키지에서 SDK 모듈을 가져옵니다.

    import Dynamsoft from 'mobile-web-capture';
    import { WebTwain } from 'mobile-web-capture/dist/types/WebTwain';  
    

  • ngOnInit() 에서 SDK를 초기화합니다.

    dwtObject: WebTwain | undefined;
    videoSelect: HTMLSelectElement | undefined;
    sourceDict: any = {};
    
    ngOnInit(): void {
      this.videoSelect = document.querySelector('select#videoSource') as HTMLSelectElement;
      Dynamsoft.DWT.ProductKey = "LICENSE-KEY";
      Dynamsoft.DWT.ResourcesPath = 'assets/dynamic-web-twain';
      Dynamsoft.DWT.Containers = [{ ContainerId: 'dwtcontrolContainer' }];
      Dynamsoft.DWT.UseLocalService = false;
      Dynamsoft.DWT.Load();
      Dynamsoft.DWT.RegisterEvent('OnWebTwainReady', () => { this.onReady(); });
    }
    

    여기서 두 가지 사항에 유의해야 합니다.
  • 30-day trial license을 신청한 후 LICENSE-KEY를 업데이트하십시오.
  • 위의 assets/dynamic-web-twain 파일에서 구성한 대로 리소스 경로angular.json를 설정합니다.

  • OnWebTwainReady 이벤트가 트리거되면 SDK 인스턴스를 가져오고 카메라 소스 목록을 업데이트합니다.

    onReady() {
      this.dwtObject = Dynamsoft.DWT.GetWebTwain('dwtcontrolContainer');
      this.updateCameraList();
    }
    
    updateCameraList() {
      if (this.videoSelect && this.dwtObject) {
        this.videoSelect.options.length = 0;
        this.dwtObject.Addon.Camera.getSourceList().then((list) => {
          for (var i = 0; i < list.length; i++) {
            var option = document.createElement('option');
            option.text = list[i].label || list[i].deviceId;
            if (list[i].label) {
              this.sourceDict[list[i].label] = list[i].deviceId;
            }
            else {
              this.sourceDict[list[i].deviceId] = list[i].deviceId;
            }
            if (this.videoSelect) this.videoSelect.options.add(option);
          }
    
        });
      }
    }
    


  • 카메라 소스를 선택하고 문서 스캔을 시작합니다.

    scanDocument() {
      if (this.videoSelect) {
        let index = this.videoSelect.selectedIndex;
        if (index < 0) return;
    
        var option = this.videoSelect.options[index];
        if (this.dwtObject) {
          this.dwtObject.Addon.Camera.selectSource(this.sourceDict[option.text]).then(camera => {
            if (this.videoSelect) this.createCameraScanner(this.sourceDict[option.text]);
          });
        }
    
      }
    
    }
    
    async createCameraScanner(deviceId: string): Promise<void> {
      if (this.dwtObject) {
        await this.dwtObject.Addon.Camera.closeVideo();
        this.dwtObject.Addon.Camera.scanDocument({
          scannerViewer: {
            deviceId: deviceId,
            fullScreen: true,
            autoDetect: {
              enableAutoDetect: true
            },
            continuousScan: {
              visibility: false,
              enableContinuousScan: false
            }
          }
    
        }).then(
          function () { console.log("OK"); },
          function (error: any) { console.log(error.message); });
      }
    
    }
    


  • 문서 이미지를 캡처하고 편집한 후 로컬 디스크에 저장할 수 있습니다.

    downloadDocument() {
      if (this.dwtObject) {
        this.dwtObject.SaveAsJPEG("document.jpg", this.dwtObject.CurrentImageIndexInBuffer);
      }
    }
    


  • 데스크톱 및 모바일 브라우저에서 Angular 문서 스캐너를 실행합니다.

    ng serve --ssl
    

    데스크톱 브라우저



    모바일 브라우저



  • GitHub 페이지 배포



    한 가지 더는 Angular 문서 스캐너 프로젝트를 GitHub 페이지에 배포하는 것입니다.

    단계는 다음과 같습니다.
  • angular.json 파일을 열어 크기budgets를 늘립니다. 기본 예산 설정으로 인해 WARNING in budgets, maximum exceeded for initial 오류가 발생할 수 있습니다.

    "budgets": [
      {
        "type": "initial",
        "maximumWarning": "2.5mb",
        "maximumError": "5mb"
      },
    ]
    


  • GitHub 작업 워크플로를 만듭니다.

    name: Build and Deploy
    on:
      push:
        branches:
          - main
    jobs:
      build:
    
        runs-on: ubuntu-latest
    
        steps:
        - uses: actions/checkout@v2
        - name: All things angular
          uses: AhsanAyaz/[email protected]
          with:
            github_access_token: ${{ secrets.GITHUB_TOKEN }} 
            build_configuration: production 
            base_href: /angular-document-scanner/   
            deploy_branch: gh-pages 
            angular_dist_build_folder: dist/angular-document-scanner
    
    
    angular-document-scanner를 프로젝트 이름으로 바꿔야 합니다.
  • 빌드가 완료되면 GitHubSettings > Pages로 이동하여 gh-pages 분기가 있는 GtiHub 페이지를 시작합니다. Enforce HTTPS 옵션을 선택하는 것을 잊지 마십시오.

  • 데모 페이지 사용해 보기

    https://yushulx.me/angular-document-scanner/

    소스 코드



    https://github.com/yushulx/angular-document-scanner

    좋은 웹페이지 즐겨찾기