получение ошибки «Индексы находятся вне диапазона» из динамического веб-интерфейса Twain API

#angular #api #twain #dynamsoft

Вопрос:

Я получаю ошибку » индексы вне диапазона «от метода» convertToBlob » динамического веб-твена, я использую его для сканирования документов с помощью сканера, может ли кто-нибудь помочь?

   dwObject.ConvertToBlob([0], EnumDWT_ImageType.IT_JPG, (result) => {
        const data = new File([result], 'Scan.jpeg', result);
        let attachmentsBlob = [];
        let attachmentObject = [];
        directAccess ? attachmentObject.push({ attachmentName: "Scan.jpeg", attachmentType: parentType, documentType: type }) : attachmentObject.push({ attachmentName: "Scan.jpeg", attachmentType: type });
        attachmentsBlob.push(data);
        this.customerAttachment(attachmentObject, attachmentsBlob).subscribe((res: any) => {
          if (res['code'] === '0000') {
            this.toastr.success("Attachement uploaded Successfully");
            if (directAccess) {
              form.patchValue(res.data[0]);
            } else {
              let scan = form.controls.customerAttachments.value;
              scan.push(res.data[0]);
              form.controls.customerAttachments.setValue(scan);
            }

          } else if (res['code'] === '0101') {
            this.toastr.error('Error', res['data']['message']);
          }
        });
      }, (errorCode, errorString) => {
        this.toastr.error(errorString);
      });
 

Ответ №1:

Не уверен, как вы написали свой код. Пока у вас есть отсканированные документы в памяти, у вас не возникнет этой проблемы.

Вот простой пример Dynamic Web TWAIN v17.1 (пространство имен отличается от вашего), демонстрирующий, как использовать ConvertToBlob :

 <!DOCTYPE html>
<html>

<head>
    <title>Use Dynamic Web TWAIN to Scan</title>
    <script type="text/javascript" src="Resources/dynamsoft.webtwain.initiate.js"></script>
    <script type="text/javascript" src="Resources/dynamsoft.webtwain.config.js"></script>
</head>

<body>
    <select size="1" id="source" style="position: relative; width: 220px;"></select>
    <input type="button" value="Scan" onclick="AcquireImage();" />

    <div id="dwtcontrolContainer"></div>

    <script type="text/javascript">
        Dynamsoft.DWT.RegisterEvent('OnWebTwainReady', Dynamsoft_OnReady);

        var DWObject;

        function Dynamsoft_OnReady() {
            DWObject = Dynamsoft.DWT.GetWebTwain('dwtcontrolContainer');
            if (DWObject) {
                var count = DWObject.SourceCount;
                for (var i = 0; i < count; i  )
                    document.getElementById("source").options.add(new Option(DWObject.GetSourceNameItems(i), i));
            }
        }
        function AcquireImage() {
            if (DWObject) {
                var OnAcquireImageSuccess = function () {
                    DWObject.ConvertToBlob([0], Dynamsoft.DWT.EnumDWT_ImageType.IT_JPG, (result) => {
                        const data = new File([result], 'Scan.jpeg', result);
                        console.log(data);
                    }, (errorCode, errorString) => {
                        this.toastr.error(errorString);
                    });
                    DWObject.CloseSource();
                };

                DWObject.SelectSourceByIndex(document.getElementById("source").selectedIndex); 
                DWObject.OpenSource();
                DWObject.IfDisableSourceAfterAcquire = true;
                DWObject.AcquireImage(OnAcquireImageSuccess, () =>{});
            }
        }
    </script>
</body>

</html>