KeepResourceStreamOpen

ResourceSavingArgs.KeepResourceStreamOpen property

Specifies whether Aspose.Words should keep the stream open or close it after saving a resource.

public bool KeepResourceStreamOpen { get; set; }

Remarks

Default is false and Aspose.Words will close the stream you provided in the ResourceStream property after writing a resource into it. Specify true to keep the stream open.

Examples

Shows how to use a callback to print the URIs of external resources created while converting a document to HTML.

Document doc = new Document(MyDir + "Rendering.docx");

ResourceUriPrinter callback = new ResourceUriPrinter();

HtmlFixedSaveOptions options = new HtmlFixedSaveOptions
{
    SaveFormat = SaveFormat.HtmlFixed,
    ExportEmbeddedImages = false,
    ResourcesFolder = ArtifactsDir + "HtmlFixedResourceFolder",
    ResourcesFolderAlias = ArtifactsDir + "HtmlFixedResourceFolderAlias",
    ShowPageBorder = false,
    ResourceSavingCallback = 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.
Directory.CreateDirectory(options.ResourcesFolderAlias);

doc.Save(ArtifactsDir + "HtmlFixedSaveOptions.HtmlFixedResourceFolder.html", options);

Console.WriteLine(callback.GetText());

string[] resourceFiles = Directory.GetFiles(ArtifactsDir + "HtmlFixedResourceFolderAlias");

Assert.That(Directory.Exists(ArtifactsDir + "HtmlFixedResourceFolder"), Is.False);
Assert.That(resourceFiles.Count(f => f.EndsWith(".jpeg") || f.EndsWith(".png") || f.EndsWith(".css")), Is.EqualTo(6));

Shows how to use a callback to print the URIs of external resources created while converting a document to HTML (ResourceUriPrinter).

/// <summary>
/// Counts and prints URIs of resources contained by as they are converted to fixed HTML.
/// </summary>
private class ResourceUriPrinter : IResourceSavingCallback
{
    void IResourceSavingCallback.ResourceSaving(ResourceSavingArgs args)
    {
        // If we set a folder alias in the SaveOptions object, we will be able to print it from here.
        mText.AppendLine($"Resource #{++mSavedResourceCount} \"{args.ResourceFileName}\"");

        string extension = Path.GetExtension(args.ResourceFileName);
        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.ResourceFileUri = ArtifactsDir + Path.DirectorySeparatorChar + args.ResourceFileName;
                break;
            }
        }

        mText.AppendLine("\t" + args.ResourceFileUri);

        // 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.ResourceStream = new FileStream(args.ResourceFileUri, FileMode.Create);
        args.KeepResourceStreamOpen = false;
    }

    public string GetText()
    {
        return mText.ToString();
    }

    private int mSavedResourceCount;
    private readonly StringBuilder mText = new StringBuilder();
}

See Also