각도 바코드 QR 코드 스캔 라이브러리를 만드는 방법

이전에는 Angular Barcode and QR Code Scanner 을 생성했습니다. 다른 Angular 응용 프로그램에서 재사용할 수 있도록 Angular 라이브러리로 전환할 수 있습니다. 이 기사에서는 Angular 바코드 QR 코드 스캐닝 라이브러리를 만드는 과정과 이를 Angular 애플리케이션에 통합하는 방법을 보여줍니다.

ngx-바코드-qrcode-sdk 다운로드



https://www.npmjs.com/package/ngx-barcode-qrcode-sdk

npm i ngx-barcode-qrcode-sdk


Dynamsoft JavaScript SDK용 Angular 라이브러리를 생성하는 단계



official Angular tutorial은 Angular 응용 프로그램을 포함하지 않고 새 작업 공간에서 새 라이브러리 골격을 생성하도록 안내합니다.

ng new my-workspace --no-create-application
cd my-workspace
ng generate library my-lib


그러나 Angular 라이브러리를 편리하게 개발하고 디버그하려면 Angular 애플리케이션에서 라이브러리 프로젝트를 스캐폴딩하는 것이 좋습니다.

우리의 목표는 AngularBarcode ReaderBarcode Scanner 구성 요소를 기존 Angular 바코드 QR 코드 스캐너 애플리케이션에서 Angular 라이브러리로 마이그레이션하는 것입니다. 따라서 소스 코드를 가져오고 다음과 같이 라이브러리 프로젝트를 생성합니다.

git clone https://github.com/yushulx/angular-barcode-qr-code-scanner.git
cd angular-barcode-qr-code-scanner
ng generate library ngx-barcode-qrcode-sdk


그런 다음 barcode-readerbarcode-scanner 폴더를 projects/ngx-barcode-qrcode-sdk/src/lib에 복사합니다. Angular 라이브러리 명명 규칙에 따라 폴더 이름을 ngx-barcode-readerngx-barcode-scanner 로 바꿉니다.

Angular 라이브러리에서 Dynamsoft JavaScript SDK에 액세스하려면 package.json에서 피어 종속성으로 추가해야 합니다.

"peerDependencies": {
    ...
    "dynamsoft-javascript-barcode": "^9.0.2"
  },


Angular 라이브러리는 서비스, 구성 요소 및 모듈로 구성됩니다. public-api.ts 파일을 열어 라이브러리의 API를 내보냅니다.

export * from './lib/ngx-barcode-qrcode-sdk.service';
export * from './lib/ngx-barcode-reader/ngx-barcode-reader.component';
export * from './lib/ngx-barcode-scanner/ngx-barcode-scanner.component';
export * from './lib/ngx-barcode-qrcode-sdk.module';


모듈은 라이브러리의 진입점입니다. ngx-barcode-qrcode-sdk.module.ts에서는 Angular 구성 요소를 선언하고 Angular 서비스를 사용하여 Dynamsoft JavaScript Barcode SDK의 전역 구성을 저장합니다.

import { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';
import { NgxBarcodeReaderComponent } from './ngx-barcode-reader/ngx-barcode-reader.component';
import { NgxBarcodeScannerComponent } from './ngx-barcode-scanner/ngx-barcode-scanner.component';
import { BarcodeQrcodeSdkServiceConfig } from './ngx-barcode-qrcode-sdk.service';

@NgModule({
  declarations: [
    NgxBarcodeReaderComponent,
    NgxBarcodeScannerComponent,
  ],
  imports: [
  ],
  exports: [
    NgxBarcodeReaderComponent,
    NgxBarcodeScannerComponent,
  ]
})
export class NgxBarcodeQrcodeSdkModule {
  constructor(@Optional() @SkipSelf() parentModule?: NgxBarcodeQrcodeSdkModule) {
    if (parentModule) {
      throw new Error(
        'GreetingModule is already loaded. Import it in the AppModule only');
    }
  }

  static forRoot(config: BarcodeQrcodeSdkServiceConfig): ModuleWithProviders<NgxBarcodeQrcodeSdkModule> {
    return {
      ngModule: NgxBarcodeQrcodeSdkModule,
      providers: [
        { provide: BarcodeQrcodeSdkServiceConfig, useValue: config }
      ]
    };
  }
}


구성에는 ngx-barcode-qrcode-sdk.service.ts에 정의된 라이센스 키와 리소스 경로가 포함됩니다.

import { Injectable, Optional } from '@angular/core';
import { BarcodeReader } from 'dynamsoft-javascript-barcode';

export class BarcodeQrcodeSdkServiceConfig {
  licenseKey = '';
  resourcePath = '';
}

@Injectable({
  providedIn: 'root'
})
export class NgxBarcodeQrcodeSdkService {

  constructor(@Optional() config?: BarcodeQrcodeSdkServiceConfig) { 
    if (config) { 
      BarcodeReader.license = config.licenseKey;
      BarcodeReader.engineResourcePath = config.resourcePath;
    }
  }
}

ngx-barcode-reader 데코레이터를 추가하는 것 외에 두 개의 ngx-barcode-scanner@Output() 구성 요소에 대해 더 이상 할 일이 없습니다. 그러면 디코딩 결과가 하위 구성 요소에서 상위 구성 요소로 흐를 수 있습니다.

바코드 판독기

export class NgxBarcodeReaderComponent implements OnInit {
  @Output() result = new EventEmitter<string>();
  ...

  this.reader.decode(file).then((results: any) => {
          console.log(results);
          let txts: any = [];
          try {
            let localization;
            if (results.length > 0) {
              for (var i = 0; i < results.length; ++i) {
                txts.push(results[i].barcodeText);
                localization = results[i].localizationResult;
                this.overlayManager.drawOverlay(
                  localization,
                  results[i].barcodeText
                );
              }

              this.result.emit(txts.join(', '));
            } else {
              this.result.emit(txts.join(', '));
            }
          } catch (e) {
            alert(e);
          }
        });
  ...
}


바코드 스캐너

export class NgxBarcodeScannerComponent implements OnInit {
  @Output() result = new EventEmitter<string>();
  ...

  this.scanner.onFrameRead = results => {
        ...

        let txts: any = [];
        try {
          let localization;
          if (results.length > 0) {
            for (var i = 0; i < results.length; ++i) {
              txts.push(results[i].barcodeText);
              localization = results[i].localizationResult;
              this.overlayManager.drawOverlay(localization, results[i].barcodeText);
            }
            this.result.emit(txts.join(', '));
          }
          else {
            this.result.emit(txts.join(', '));
          }

        } catch (e) {
          alert(e);
        }
      };
  ...
}


지금까지 Angular 바코드 QR 코드 스캔 라이브러리가 완료되었습니다. 다음 섹션에서는 Angular 애플리케이션에서 라이브러리를 사용하는 방법을 살펴봅니다.

라이브러리로 각도 바코드 QR 코드 스캐너를 구축하는 방법



모든 무거운 작업을 라이브러리로 옮겼기 때문에 Angular 바코드 QR 코드 스캐너 구축이 훨씬 간단해졌습니다.

  • Angular 애플리케이션 작업 공간에서 터미널의 npm 명령을 통해 Angular 라이브러리를 설치합니다.

    npm i ngx-barcode-qrcode-sdk
    

    설치가 완료되면 angular.json 파일에서 리소스 경로를 구성해야 합니다.

    "build": {
        "builder": "@angular-devkit/build-angular:browser",
        ...
        "assets": [
            "src/favicon.ico",
            "src/assets",
            {
            "glob": "**/*",
            "input": "./node_modules/dynamsoft-javascript-barcode/dist",
            "output": "assets/dynamsoft-javascript-barcode"
            }
        ],
        ...
    }
    

  • app.module.ts 파일에서 라이브러리를 가져옵니다.

    import { NgxBarcodeQrcodeSdkModule } from 'ngx-barcode-qrcode-sdk';
    
    ...
    @NgModule({
      ...
      imports: [
        ...
        NgxBarcodeQrcodeSdkModule.forRoot({ licenseKey: "DLS2eyJoYW5kc2hha2VDb2RlIjoiMjAwMDAxLTE2NDk4Mjk3OTI2MzUiLCJvcmdhbml6YXRpb25JRCI6IjIwMDAwMSIsInNlc3Npb25QYXNzd29yZCI6IndTcGR6Vm05WDJrcEQ5YUoifQ==", resourcePath: "assets/dynamsoft-javascript-barcode/" }),
      ],
      ...
    })
    
    ...
    

    Dynamsoft JavaScript Barcode Reader를 활성화하려면 30-day free trial license key을 신청해야 합니다. 리소스 경로는 angular.json 파일의 경로와 동일해야 합니다.

  • 구성 요소*.ts 파일에서 NgxBarcodeQrcodeSdkService를 삽입하고 출력 이벤트를 추가합니다.

    import { NgxBarcodeQrcodeSdkService } from 'ngx-barcode-qrcode-sdk';
    ...
    export class FooComponent implements OnInit {
      barcodeResult: string = '';
      constructor(private barcodeQrCodeSdkService: NgxBarcodeQrcodeSdkService) {
      }
    
      ngOnInit(): void {
      }
    
      onResultReady(result: string): void {
        this.barcodeResult = result;
      }
    }
    


  • 그런 다음 해당 HTML 파일에 ngx-barcode-reader 또는 ngx-barcode-scanner를 포함합니다.

    바코드 리더

    <div>
      <a>Barcode QR code decoding results: {{barcodeResult}}</a>
    </div>
    
    <ngx-barcode-reader
    (result)="onResultReady($event)"
    ></ngx-barcode-reader>
    



    바코드 스캐너

    <div>
      <a>Barcode QR code decoding results: {{barcodeResult}}</a>
    </div>
    
    <ngx-barcode-scanner
    (result)="onResultReady($event)"
    ></ngx-barcode-scanner>
    



  • 소스 코드



    https://github.com/yushulx/ngx-barcode-qrcode-sdk

    좋은 웹페이지 즐겨찾기