Trying to extract text from PDF in c# in UWP -
private void fvpdf_selectionchanged(object sender, selectionchangedeventargs e) { int index = fvpdf.selectedindex; if (resultlist.count > 0 && resultlist.count > index) { this.displaytext.text = resultlist[index]; } } private async void openpdf_click(object sender, routedeventargs e) { // this.openpdf.isenabled = false; fileopenpicker picker = new fileopenpicker(); picker.filetypefilter.add(".pdf"); storagefile pdffile = await picker.picksinglefileasync(); if (pdffile != null) { // load pdf file. pdfdocument pdfdoc = await pdfdocument.loadfromfileasync(pdffile); uint pagecount = pdfdoc.pagecount; progressbar.maximum = pagecount; fvpdf.items.clear(); resultlist.clear(); (uint = 0; < pagecount; i++) { using (pdfpage page = pdfdoc.getpage(i)) { inmemoryrandomaccessstream stream = new inmemoryrandomaccessstream(); // default actual size. render pdf page stream await page.rendertostreamasync(stream); // create bitmapimage image source bitmapimage bitmap = new bitmapimage(); // set stream bitmapimage's source await bitmap.setsourceasync(stream); // create image flipview item's source image img = new image(); img.source = bitmap; // add image item flipview. fvpdf.items.add(img); // update processbar progressbar.value++; // new ocrengine default language ocrengine ocrengine = ocrengine.trycreatefromuserprofilelanguages(); bitmapdecoder decoder = await bitmapdecoder.createasync(stream); softwarebitmap softwarebitmap = await decoder.getsoftwarebitmapasync(bitmappixelformat.bgra8, bitmapalphamode.premultiplied); // recognition result ocrresult result = await ocrengine.recognizeasync(softwarebitmap); // add result list resultlist.add(result.text); } } // show first page recognition result fvpdf_selectionchanged(null, null); } } well works fine in first attempt read pdf file whereas when trying read 2nd pdf, showing error , throwing exception:
system.argumentoutofrangeexception
in line:
this.displaytext.text = resultlist[index]; how clear "list" again work 2nd time , on?
i tested code snippet , throw following exception mentioned:
system.argumentoutofrangeexception: 'index out of range. must non-negative , less size of collection.'
actually exception, mkl said caused value of selectedindex "-1" resultlist[index] thrown exception. invoked fvpdf_selectionchanged(null, null); showing first page result , method selectedindex using, @ same time selectedindex "-1" default since there no item selected. details please reference selectedindex property.
so if want show first recognize page result, should set selectedindex 0 after loaded pdf file. updated code follows:
// show first page recognition result //fvpdf_selectionchanged(null, null); fvpdf.selectedindex = 0;
Comments
Post a Comment