Loading of external resources containing by a document

If the document contains external resources, such as images, GroupDocs.Viewer loads them when rendering a document. This allows the document to display correctly, but is a potential security risk.

GroupDocs.Viewer allows you to manage loading of external resources contained by a document. These features are supported for the following formats:

Use the LoadOptions object to manage loading of external resources.

Skip loading of external resources

The following code snippet shows how to deny loading of external resources:

LoadOptions loadOptions = new LoadOptions();
loadOptions.setSkipExternalResources(true); // Skip loading of external resources

try (Viewer viewer = new Viewer("business-flyer.docx", loadOptions)) {
    HtmlViewOptions viewOptions = HtmlViewOptions.forEmbeddedResources();

    viewer.view(viewOptions);
}
val loadOptions = LoadOptions()
loadOptions.isSkipExternalResources = true // Skip loading of external resources

Viewer("business-flyer.docx", loadOptions).use { viewer ->
    val viewOptions = HtmlViewOptions.forEmbeddedResources()

    viewer.view(viewOptions)
}

The following images show the output file with and without external resources (see top right corner):

loadOptions.setSkipExternalResources(false)loadOptions.setSkipExternalResources(true)
FalseTrue

Manage a safelist for loading external resources

The following code snippet shows how to allow loading of external resources from specific URLs:

LoadOptions loadOptions = new LoadOptions();
loadOptions.setSkipExternalResources(true); // Skip loading of all external resources
loadOptions.getWhitelistedResources().add("avatars.githubusercontent.com"); // Enable loading of external resources that has `avatars.githubusercontent.com` fragment in resource URL.

try (Viewer viewer = new Viewer("business-flyer.docx", loadOptions)) {
   HtmlViewOptions viewOptions = HtmlViewOptions.forEmbeddedResources();
   viewer.view(viewOptions);
}
val loadOptions = LoadOptions()
loadOptions.isSkipExternalResources = true // Skip loading of all external resources
loadOptions.whitelistedResources.add("avatars.githubusercontent.com") // Enable loading of external resources that has `avatars.githubusercontent.com` fragment in resource URL.

val viewer = Viewer("business-flyer.docx", loadOptions)
val viewOptions = HtmlViewOptions.forEmbeddedResources()
viewer.use {
    it.view(viewOptions)
}

Set timeout for loading of external resources

The default timeout is 10 seconds. GroupDocs.Viewer allows you to change this value.

The following code snippet shows how to set a timeout to load external resources:

// Specify a timeout.
LoadOptions loadOptions = new LoadOptions();
loadOptions.setResourceLoadingTimeout(5000);
// Render a file.
try (Viewer viewer = new Viewer("sample.docx", loadOptions)) {
   HtmlViewOptions viewOptions = HtmlViewOptions.forEmbeddedResources();
   viewer.view(viewOptions);
}
// Specify a timeout.
val loadOptions = LoadOptions()
loadOptions.setResourceLoadingTimeout(5000)
// Render a file.
Viewer("sample.docx", loadOptions).use { viewer ->
   val viewOptions = HtmlViewOptions.forEmbeddedResources()
   viewer.view(viewOptions)
}