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 shapes
een instantie is van een java.util.Collection
of java.lang.Iterable
.
Controleer of NodeCollection
een klasse van het type collectionis die java.lang.Iterable
heeft geïmplementeerd.
Bewerken:
de nodeCollection is van de com.aspose.words.
NodeCollection
implementeert generieke Iterable
rechtstreeks, zonder het type objecten te specificeren dat het zou verwerken. Daarom moet u expliciet de Iterator
genereren 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