com.aspose.words

Interface IResourceSavingCallback

  • public interface IResourceSavingCallback 

Implement this interface if you want to control how Aspose.Words saves external resources (images, fonts and css) when saving a document to fixed page HTML or SVG.

Example:

Shows how to use a callback to track external resources created while converting a document to HTML.
public void resourceSavingCallback() throws Exception {
    Document doc = new Document(getMyDir() + "Bullet points with alternative font.docx");

    FontSavingCallback callback = new FontSavingCallback();

    HtmlFixedSaveOptions saveOptions = new HtmlFixedSaveOptions();
    {
        saveOptions.setResourceSavingCallback(callback);
    }

    doc.save(getArtifactsDir() + "HtmlFixedSaveOptions.UsingMachineFonts.html", saveOptions);

    System.out.println(callback.getText());
}

private static class FontSavingCallback implements IResourceSavingCallback {
    /// <summary>
    /// Called when Aspose.Words saves an external resource to fixed page HTML or SVG.
    /// </summary>
    public void resourceSaving(ResourceSavingArgs args) {
        mText.append(MessageFormat.format("Original document URI:\t{0}", args.getDocument().getOriginalFileName()));
        mText.append(MessageFormat.format("Resource being saved:\t{0}", args.getResourceFileName()));
        mText.append(MessageFormat.format("Full uri after saving:\t{0}\n", args.getResourceFileUri()));
    }

    public String getText() {
        return mText.toString();
    }

    private final StringBuilder mText = new StringBuilder();
}

Example:

Shows how to use a callback to print the URIs of external resources created while converting a document to HTML.
public void htmlFixedResourceFolder() throws Exception {
    Document doc = new Document(getMyDir() + "Rendering.docx");

    ResourceUriPrinter callback = new ResourceUriPrinter();

    HtmlFixedSaveOptions options = new HtmlFixedSaveOptions();
    {
        options.setSaveFormat(SaveFormat.HTML_FIXED);
        options.setExportEmbeddedImages(false);
        options.setResourcesFolder(getArtifactsDir() + "HtmlFixedResourceFolder");
        options.setResourcesFolderAlias(getArtifactsDir() + "HtmlFixedResourceFolderAlias");
        options.setShowPageBorder(false);
        options.setResourceSavingCallback(callback);
    }

    // A folder specified by ResourcesFolderAlias will contain the resources instead of ResourcesFolder.
    // We must ensure the folder exists before the streams can put their resources into it.
    new File(options.getResourcesFolderAlias()).mkdir();

    doc.save(getArtifactsDir() + "HtmlFixedSaveOptions.HtmlFixedResourceFolder.html", options);

    System.out.println(callback.getText());

    String[] resourceFiles = new File(getArtifactsDir() + "HtmlFixedResourceFolderAlias").list();

    Assert.assertFalse(new File(getArtifactsDir() + "HtmlFixedResourceFolder").exists());
    Assert.assertEquals(6, IterableUtils.countMatches(Arrays.asList(resourceFiles),
            f -> f.endsWith(".jpeg") || f.endsWith(".png") || f.endsWith(".css")));
}

/// <summary>
/// Counts and prints URIs of resources contained by as they are converted to fixed HTML.
/// </summary>
private static class ResourceUriPrinter implements IResourceSavingCallback {
    public void resourceSaving(ResourceSavingArgs args) throws Exception {
        // If we set a folder alias in the SaveOptions object, we will be able to print it from here.
        mText.append(MessageFormat.format("Resource #{0} \"{1}\"", ++mSavedResourceCount, args.getResourceFileName()));

        String extension = FilenameUtils.getExtension(args.getResourceFileName());
        switch (extension) {
            case "ttf":
            case "woff": {
                // By default, 'ResourceFileUri' uses system folder for fonts.
                // To avoid problems in other platforms you must explicitly specify the path for the fonts.
                args.setResourceFileUri(getArtifactsDir() + File.separatorChar + args.getResourceFileName());
                break;
            }
        }

        mText.append("\t" + args.getResourceFileUri());

        // If we have specified a folder in the "ResourcesFolderAlias" property,
        // we will also need to redirect each stream to put its resource in that folder.
        args.setResourceStream(new FileOutputStream(args.getResourceFileUri()));
        args.setKeepResourceStreamOpen(false);
    }

    public String getText() {
        return mText.toString();
    }

    private int mSavedResourceCount;
    private final /*final*/ StringBuilder mText = new StringBuilder();
}

Method Summary
abstract voidresourceSaving(ResourceSavingArgs args)
Called when Aspose.Words saves an external resource to fixed page HTML or SVG formats.
 

    • Method Detail

      • resourceSaving

        public abstract void resourceSaving(ResourceSavingArgs args)
                                         throws java.lang.Exception
        Called when Aspose.Words saves an external resource to fixed page HTML or SVG formats.

        Example:

        Shows how to use a callback to print the URIs of external resources created while converting a document to HTML.
        public void htmlFixedResourceFolder() throws Exception {
            Document doc = new Document(getMyDir() + "Rendering.docx");
        
            ResourceUriPrinter callback = new ResourceUriPrinter();
        
            HtmlFixedSaveOptions options = new HtmlFixedSaveOptions();
            {
                options.setSaveFormat(SaveFormat.HTML_FIXED);
                options.setExportEmbeddedImages(false);
                options.setResourcesFolder(getArtifactsDir() + "HtmlFixedResourceFolder");
                options.setResourcesFolderAlias(getArtifactsDir() + "HtmlFixedResourceFolderAlias");
                options.setShowPageBorder(false);
                options.setResourceSavingCallback(callback);
            }
        
            // A folder specified by ResourcesFolderAlias will contain the resources instead of ResourcesFolder.
            // We must ensure the folder exists before the streams can put their resources into it.
            new File(options.getResourcesFolderAlias()).mkdir();
        
            doc.save(getArtifactsDir() + "HtmlFixedSaveOptions.HtmlFixedResourceFolder.html", options);
        
            System.out.println(callback.getText());
        
            String[] resourceFiles = new File(getArtifactsDir() + "HtmlFixedResourceFolderAlias").list();
        
            Assert.assertFalse(new File(getArtifactsDir() + "HtmlFixedResourceFolder").exists());
            Assert.assertEquals(6, IterableUtils.countMatches(Arrays.asList(resourceFiles),
                    f -> f.endsWith(".jpeg") || f.endsWith(".png") || f.endsWith(".css")));
        }
        
        /// <summary>
        /// Counts and prints URIs of resources contained by as they are converted to fixed HTML.
        /// </summary>
        private static class ResourceUriPrinter implements IResourceSavingCallback {
            public void resourceSaving(ResourceSavingArgs args) throws Exception {
                // If we set a folder alias in the SaveOptions object, we will be able to print it from here.
                mText.append(MessageFormat.format("Resource #{0} \"{1}\"", ++mSavedResourceCount, args.getResourceFileName()));
        
                String extension = FilenameUtils.getExtension(args.getResourceFileName());
                switch (extension) {
                    case "ttf":
                    case "woff": {
                        // By default, 'ResourceFileUri' uses system folder for fonts.
                        // To avoid problems in other platforms you must explicitly specify the path for the fonts.
                        args.setResourceFileUri(getArtifactsDir() + File.separatorChar + args.getResourceFileName());
                        break;
                    }
                }
        
                mText.append("\t" + args.getResourceFileUri());
        
                // If we have specified a folder in the "ResourcesFolderAlias" property,
                // we will also need to redirect each stream to put its resource in that folder.
                args.setResourceStream(new FileOutputStream(args.getResourceFileUri()));
                args.setKeepResourceStreamOpen(false);
            }
        
            public String getText() {
                return mText.toString();
            }
        
            private int mSavedResourceCount;
            private final /*final*/ StringBuilder mText = new StringBuilder();
        }

        Example:

        Shows how to use a callback to track external resources created while converting a document to HTML.
        public void resourceSavingCallback() throws Exception {
            Document doc = new Document(getMyDir() + "Bullet points with alternative font.docx");
        
            FontSavingCallback callback = new FontSavingCallback();
        
            HtmlFixedSaveOptions saveOptions = new HtmlFixedSaveOptions();
            {
                saveOptions.setResourceSavingCallback(callback);
            }
        
            doc.save(getArtifactsDir() + "HtmlFixedSaveOptions.UsingMachineFonts.html", saveOptions);
        
            System.out.println(callback.getText());
        }
        
        private static class FontSavingCallback implements IResourceSavingCallback {
            /// <summary>
            /// Called when Aspose.Words saves an external resource to fixed page HTML or SVG.
            /// </summary>
            public void resourceSaving(ResourceSavingArgs args) {
                mText.append(MessageFormat.format("Original document URI:\t{0}", args.getDocument().getOriginalFileName()));
                mText.append(MessageFormat.format("Resource being saved:\t{0}", args.getResourceFileName()));
                mText.append(MessageFormat.format("Full uri after saving:\t{0}\n", args.getResourceFileUri()));
            }
        
            public String getText() {
                return mText.toString();
            }
        
            private final StringBuilder mText = new StringBuilder();
        }