问题描述
我正在制作一个文本识别应用程序,一个非常基本的应用程序。用户目前可以从他们的图库中抓取照片,它会出现在应用程序中,以及将图像中的文本转换为 pdf 格式的选项。问题是,我必须调用该函数两次,以便我的 String 变量正确获取它应该拥有的信息,特别是文本识别结果。第一次,我可以看到正在使用正确的位图,并且在构建字符串的方法中。我已经为这些情况制作了日志,以尝试追踪问题以及第一次没有正确制作的地方,但是经过数小时的搜索后我找不到任何东西。有人请指教。
private String processtextRecognitionToPDF(Text texts){
blocks = texts.getTextBlocks();
if (blocks.size() == 0) {
stringBuilder.append("There was no text found");
return null;
}
//resultText = texts.getText();
for (Text.TextBlock block : texts.getTextBlocks()) {
blockText += block.getText()+" ";
Log.e(TAG,"processtextRecognitionToPDF: checking blockText result "+blockText );
}
return blockText;
}
我已经尝试在上面显示的 for 循环内部,在它外部,在其他方法中使用 stringBuilder。奇怪的是,在这里,我放置了一个日志,blockText 被视为包含我想要的信息。
返回 blockText 是将其设置为等于某物的替代方法,我认为可能在 for 循环内部会使 blockText 被遗忘。
退出此方法后,日志显示 blockText 恢复为我为其设置的默认值。是的,我尝试使用 stringBuilder 在 for 循环内追加,因为无论如何这都是可取的。第一次没有任何效果。
然后,在我第二次点击按钮生成 PDF 时,blockText 神奇地选择了正确的信息并根据需要将其加载到 PDF 中。
另一个重要的信息。当我遇到这个问题后选择一张新照片时,该新照片的第一个按钮点击将是上一张照片的文本结果。我已经尝试一直跟踪到源头,但我找不到发生这种情况的位置或原因。
更多可能相关的代码:
mGeneratePDF.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// calling method to
// generate our PDF file.
new Handler().post(new Runnable() {
@Override
public void run() {
generatePDF();
}
});
}
});
~~~~~~~~
private void generatePDF() {
PdfDocument pdfDocument = null;
if(mSelectedImage != null){
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
generatePDFFileName();
pdfDocument = new PdfDocument();
Paint paint = new Paint();
Paint title = new Paint();
PdfDocument.PageInfo mypageInfo = new PdfDocument.PageInfo.Builder(pagewidth,pageHeight,1).create();
PdfDocument.Page myPage = pdfDocument.startPage(mypageInfo);
Canvas canvas = myPage.getCanvas();
title.setTypeface(Typeface.create(Typeface.DEFAULT,Typeface.norMAL));
title.setTextSize(10);
title.setColor(ContextCompat.getColor(this,R.color.purple_200));
title.setTextAlign(Paint.Align.CENTER);
title.setSubpixelText(true);
runTextRecogToPDF(canvas,title);
int length = stringBuilder.length();
// even though stringBuilder should be complete Now,it is still empty at this point on first click
Log.e(TAG,"generatePDF: checking stringbuilder "+ stringBuilder.toString() );
if (length == defaultTextLength){
Log.e(TAG,"generatePDF: checking blocktext "+ blockText );
stringBuilder.append(blockText);
}
canvas.drawText(stringBuilder.toString(),400,title);
Log.e(TAG,"generatePDF: checking mSelectedImage is valid "+ mSelectedImage );
stringBuilder.delete(0,stringBuilder.length());
stringBuilder.append(defaultText);
pdfDocument.finishPage(myPage);
FileOutputStream os = null;
File file = new File(Environment.getExternalStorageDirectory(),fileName);
if (file.exists()){
generatePDFFileName();
file = new File(Environment.getExternalStorageDirectory(),fileName);
}
try {
os = new FileOutputStream(file);
pdfDocument.writeto(os);
Toast.makeText(MainActivity.this,"PDF file generated succesfully.",Toast.LENGTH_SHORT).show();
} catch (IOException e) {
// below line is used
// to handle error
e.printstacktrace();
} finally {
pdfDocument.close();
try {
os.close();
} catch (IOException e) {
e.printstacktrace();
}
}
}
}
else{
showToast("No image selected for PDF generation");
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)