本文介绍了错误:只能遍历数组或java.lang.Iterable的实例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
请帮我看看我的错误似乎无法使其工作,因为它只能迭代一个数组或一个java.lang.Iterable的实例。我想创建一个条形码并读取它,并将其添加到word文档中。Update Post nodeCollection来自com.aspose.words 。
import com.aspose.barcode。*;
import com.aspose.barcoderecognition.BarCodeReadType;
import com.aspose.barcoderecognition.BarCodeReader;
import com.aspose.words.Document;
import com.aspose.words.DocumentBuilder;
import com.aspose.words.ImageType;
import com.aspose.words.NodeCollection;
import com.aspose.words.NodeType;
import com.aspose.words.Shape;
尝试
{
//生成条形码图片
BarCodeBuilder builder = new BarCodeBuilder();
builder.setSymbologyType(Symbology.Code39Standard);
builder.setCodeText(test-123);
String strBarCodeImageSave =img.jpg;
builder.save(strBarCodeImageSave);
//将图像添加到Word文档
Document doc = new Document();
DocumentBuilder docBuilder = new DocumentBuilder(doc);
docBuilder.insertImage(strBarCodeImageSave);
String strWordFile =docout.doc;
doc.save(strWordFile);
//识别部分
//从Word文档中提取图像
NodeCollection< Shape> shapes = doc.getChildNodes(NodeType.SHAPE,true,false);
int imageIndex = 0;
(shape shape:shapes)
{
if(shape.hasImage())
{
//如果这个图形是一个图像,将图像提取到文件
String extension = ImageTypeToExtension(shape.getImageData()。getImageType());
String imageFileName = MessageFormat.format(Image.ExportImages。{0} Out。{1},imageIndex,extension);
String strBarCodeImageExtracted =+ imageFileName;
shape.getImageData()。save(strBarCodeImageExtracted);
$ b $ //识别这张图片的条形码
BarCodeReader reader = new BarCodeReader((BufferedImage)Toolkit.getDefaultToolkit()。getImage(strBarCodeImageExtracted),BarCodeReadType.Code39Standard); (读者。读())
{
System.out.println(codetext:+ reader.getCodeText());
}
imageIndex ++;
$ b catch(Exception ex)
{
System.out.println(ex.getMessage());
private static String ImageTypeToExtension(int imageType)throws Exception
{
switch(imageType)
{
case ImageType.BMP:
returnbmp;
case ImageType.EMF:
returnemf;
case ImageType.JPEG:
returnjpeg;
case ImageType.PICT:
returnpict;
case ImageType.PNG:
returnpng;
case ImageType.WMF:
返回wmf;
默认值:
抛出新的异常(未知图像类型);
}}
解决方案
我假设Nodecollection是一个com.aspose.words.NodeCollection。
如果你想使用foreach语法,你最好这样做:
Node [] shapesArray = shapes.toArray();
for(Node node:shapesArray){...
please help me with my error can't seem to make it work because of that can only iterate over an array or an instance of java.lang.Iterable. i want to create a barcode and read it and add it to the word document
Update Post the nodeCollection is from the com.aspose.words.
import com.aspose.barcode.*;
import com.aspose.barcoderecognition.BarCodeReadType;
import com.aspose.barcoderecognition.BarCodeReader;
import com.aspose.words.Document;
import com.aspose.words.DocumentBuilder;
import com.aspose.words.ImageType;
import com.aspose.words.NodeCollection;
import com.aspose.words.NodeType;
import com.aspose.words.Shape;
try
{
// Generate barcode image
BarCodeBuilder builder = new BarCodeBuilder();
builder.setSymbologyType(Symbology.Code39Standard);
builder.setCodeText("test-123");
String strBarCodeImageSave = "img.jpg";
builder.save(strBarCodeImageSave);
// Add the image to a Word doc
Document doc = new Document();
DocumentBuilder docBuilder = new DocumentBuilder(doc);
docBuilder.insertImage(strBarCodeImageSave);
String strWordFile = "docout.doc";
doc.save(strWordFile);
// Recognition part
// Extract image from the Word document
NodeCollection<Shape> shapes = doc.getChildNodes(NodeType.SHAPE, true, false);
int imageIndex = 0;
for(Shape shape: shapes)
{
if (shape.hasImage())
{
// If this shape is an image, extract image to file
String extension = ImageTypeToExtension(shape.getImageData().getImageType());
String imageFileName = MessageFormat.format("Image.ExportImages.{0} Out.{1}", imageIndex, extension);
String strBarCodeImageExtracted = "" + imageFileName;
shape.getImageData().save(strBarCodeImageExtracted);
// Recognize barcode from this image
BarCodeReader reader = new BarCodeReader((BufferedImage) Toolkit.getDefaultToolkit().getImage(strBarCodeImageExtracted),BarCodeReadType.Code39Standard);
while (reader.read())
{
System.out.println("codetext: " + reader.getCodeText());
}
imageIndex++;
}
}
}
catch(Exception ex)
{
System.out.println(ex.getMessage());
}
}
private static String ImageTypeToExtension(int imageType) throws Exception
{
switch (imageType)
{
case ImageType.BMP:
return "bmp";
case ImageType.EMF:
return "emf";
case ImageType.JPEG:
return "jpeg";
case ImageType.PICT:
return "pict";
case ImageType.PNG:
return "png";
case ImageType.WMF:
return "wmf";
default:
throw new Exception("Unknown image type.");
}
}}
解决方案
I assume Nodecollection is a com.aspose.words.NodeCollection.
If you want to use the foreach syntax you better do:
Node[] shapesArray = shapes.toArray();
for (Node node : shapesArray ){ ...
这篇关于错误:只能遍历数组或java.lang.Iterable的实例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!