com.aspose.words

Interface IResourceLoadingCallback

  • public interface IResourceLoadingCallback 

Implement this interface if you want to control how Aspose.Words loads external resource when importing a document from HTML or MHTML.

Example:

Shows how to process inserted resources differently.
public void resourceLoadingCallback() throws Exception {
    Document doc = new Document();

    // Images belong to NodeType.Shape
    // There are none in a blank document
    Assert.assertEquals(doc.getChildNodes(NodeType.SHAPE, true).getCount(), 0);

    // Enable our custom image loading
    doc.setResourceLoadingCallback(new ImageNameHandler());

    DocumentBuilder builder = new DocumentBuilder(doc);

    // We usually insert images as a uri or byte array, but there are many other possibilities with ResourceLoadingCallback
    // In this case we are referencing images with simple names and keep the image fetching logic somewhere else
    builder.insertImage("Google Logo");
    builder.insertImage("Aspose Logo");
    builder.insertImage("My Watermark");

    Assert.assertEquals(doc.getChildNodes(NodeType.SHAPE, true).getCount(), 3);

    doc.save(getArtifactsDir() + "DocumentBase.ResourceLoadingCallback.docx");
}

private static class ImageNameHandler implements IResourceLoadingCallback {
    public int resourceLoading(final ResourceLoadingArgs args) throws URISyntaxException, IOException {
        if (args.getResourceType() == ResourceType.IMAGE) {
            // builder.InsertImage expects a uri so inputs like "Google Logo" would normally trigger a FileNotFoundException
            // We can still process those inputs and find an image any way we like, as long as an image byte array is passed to args.SetData()
            if ("Google Logo".equals(args.getOriginalUri())) {
                args.setData(DocumentHelper.getBytesFromStream(new URI("http://www.google.com/images/logos/ps_logo2.png").toURL().openStream()));

                return ResourceLoadingAction.USER_PROVIDED;
            }

            if ("Aspose Logo".equals(args.getOriginalUri())) {
                args.setData(DocumentHelper.getBytesFromStream(getAsposelogoUri().toURL().openStream()));

                return ResourceLoadingAction.USER_PROVIDED;
            }

            // We can find and add an image any way we like, as long as args.SetData() is called with some image byte array as a parameter
            if ("My Watermark".equals(args.getOriginalUri())) {
                InputStream imageStream = new FileInputStream(getImageDir() + "Watermark.png");
                args.setData(DocumentHelper.getBytesFromStream(imageStream));

                return ResourceLoadingAction.USER_PROVIDED;
            }
        }

        // All other resources such as documents, CSS stylesheets and images passed as uris are handled as they were normally
        return ResourceLoadingAction.DEFAULT;
    }
}

Method Summary
abstract intresourceLoading(ResourceLoadingArgs args)
Called when Aspose.Words loads any external resource.
 

    • Method Detail

      • resourceLoading

        public abstract int resourceLoading(ResourceLoadingArgs args)
                                         throws java.lang.Exception
        Called when Aspose.Words loads any external resource.

        Example:

        Shows how to process inserted resources differently.
        public void resourceLoadingCallback() throws Exception {
            Document doc = new Document();
        
            // Images belong to NodeType.Shape
            // There are none in a blank document
            Assert.assertEquals(doc.getChildNodes(NodeType.SHAPE, true).getCount(), 0);
        
            // Enable our custom image loading
            doc.setResourceLoadingCallback(new ImageNameHandler());
        
            DocumentBuilder builder = new DocumentBuilder(doc);
        
            // We usually insert images as a uri or byte array, but there are many other possibilities with ResourceLoadingCallback
            // In this case we are referencing images with simple names and keep the image fetching logic somewhere else
            builder.insertImage("Google Logo");
            builder.insertImage("Aspose Logo");
            builder.insertImage("My Watermark");
        
            Assert.assertEquals(doc.getChildNodes(NodeType.SHAPE, true).getCount(), 3);
        
            doc.save(getArtifactsDir() + "DocumentBase.ResourceLoadingCallback.docx");
        }
        
        private static class ImageNameHandler implements IResourceLoadingCallback {
            public int resourceLoading(final ResourceLoadingArgs args) throws URISyntaxException, IOException {
                if (args.getResourceType() == ResourceType.IMAGE) {
                    // builder.InsertImage expects a uri so inputs like "Google Logo" would normally trigger a FileNotFoundException
                    // We can still process those inputs and find an image any way we like, as long as an image byte array is passed to args.SetData()
                    if ("Google Logo".equals(args.getOriginalUri())) {
                        args.setData(DocumentHelper.getBytesFromStream(new URI("http://www.google.com/images/logos/ps_logo2.png").toURL().openStream()));
        
                        return ResourceLoadingAction.USER_PROVIDED;
                    }
        
                    if ("Aspose Logo".equals(args.getOriginalUri())) {
                        args.setData(DocumentHelper.getBytesFromStream(getAsposelogoUri().toURL().openStream()));
        
                        return ResourceLoadingAction.USER_PROVIDED;
                    }
        
                    // We can find and add an image any way we like, as long as args.SetData() is called with some image byte array as a parameter
                    if ("My Watermark".equals(args.getOriginalUri())) {
                        InputStream imageStream = new FileInputStream(getImageDir() + "Watermark.png");
                        args.setData(DocumentHelper.getBytesFromStream(imageStream));
        
                        return ResourceLoadingAction.USER_PROVIDED;
                    }
                }
        
                // All other resources such as documents, CSS stylesheets and images passed as uris are handled as they were normally
                return ResourceLoadingAction.DEFAULT;
            }
        }