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 and inserting images using DocumentBuilder.

Example:

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

    // 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");

    // Images belong to Shape objects, which are placed and scaled in the document
    Assert.assertEquals(3, doc.getChildNodes(NodeType.SHAPE, true).getCount());

    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()));
                // We need this return statement any time a resource is loaded in a custom manner
                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() + "Transparent background logo.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();

    // 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");

    // Images belong to Shape objects, which are placed and scaled in the document
    Assert.assertEquals(3, doc.getChildNodes(NodeType.SHAPE, true).getCount());

    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()));
                // We need this return statement any time a resource is loaded in a custom manner
                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() + "Transparent background logo.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;
    }
}

See Also:
          Aspose.Words Documentation - the home page for the Aspose.Words Product Documentation.
          Aspose.Words Support Forum - our preferred method of support.