Fout: kan alleen herhalen over een array of een instantie van java.lang.Iterable

help me alstublieft met mijn fout, het lijkt erop dat het niet werkt omdat het alleen kan herhalen over een array of een instantie van java.lang.Iterable. ik wil een streepjescode maken en deze lezen en toevoegen aan het Word-document

Update Postde nodeCollection is van de 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.");
        }
    }}

Antwoord 1, Autoriteit 100%

Ik neem aan dat NodeCollection een com.Spose.words.nodecollection is.

Als u de Foreach Syntax wilt gebruiken, doet u beter:

Node[] shapesArray = shapes.toArray();
for (Node node : shapesArray ){ ...

Antwoord 2, autoriteit 100%

Fout: kan alleen herhalen over een array of een instantie van java.lang.Iterable

Er staat duidelijk dat je alleen moet herhalen op objecten die itereerbaar zijn.

In uw code gebruikt u

NodeCollection<Shape> shapes = doc.getChildNodes(NodeType.SHAPE, true, false);
...    
for(Shape shape: shapes)

De for-lus mislukt tenzij de basisklasse shapeseen instantie is van een java.util.Collectionof java.lang.Iterable.

Controleer of NodeCollectioneen klasse van het type collectionis die java.lang.Iterableheeft geïmplementeerd.


Bewerken:

de nodeCollection is van de com.aspose.words.

NodeCollectionimplementeert generieke Iterablerechtstreeks, zonder het type objecten te specificeren dat het zou verwerken. Daarom moet u expliciet de Iteratorgenereren uit de NodeCollection-instantie en daarop kunt u itereren.

NodeCollection<Shape> shapes = doc.getChildNodes(NodeType.SHAPE, true, false);
Iterator<Shape> shapesIterator = shapes.iterator();
...    
// now use the above iterator in for loop, as below
for( Shape shape: shapesIterator )

Raadpleegeen soortgelijk antwoord op zo

Other episodes