错误:只能遍历数组或java.lang.Iterable的实例 [英] Error: can only iterate over an array or an instance of java.lang.Iterable

查看:1150
本文介绍了错误:只能遍历数组或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的实例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆