Interface IResourceSavingCallback

Interface IResourceSavingCallback

Namespace: Aspose.Words.Saving
Assembly: Aspose.Words.dll (25.12.0)

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.

public interface IResourceSavingCallback

Examples

Shows how to use a callback to change the resource URI.

public void ResourceSavingCallback()
                                                                  {
                                                                      string outputPath = ArtifactsDir + "MarkdownSaveOptions.ResourceSavingCallback.md";

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

                                                                      MarkdownSaveOptions saveOptions = new MarkdownSaveOptions();
                                                                      saveOptions.ResourceSavingCallback = new ChangeUriPath();

                                                                      doc.Save(outputPath, saveOptions);

                                                                      DocumentHelper.FindTextInFile(outputPath, "/uri/for/");
                                                                  }

                                                                  /// <summary>
                                                                  /// Class implementing <see cref="IResourceSavingCallback"/>.
                                                                  /// </summary>
                                                                  private class ChangeUriPath : IResourceSavingCallback
                                                                  {
                                                                      public void ResourceSaving(ResourceSavingArgs args)
                                                                      {
                                                                          args.ResourceFileUri = string.Format("/uri/for/{0}", args.ResourceFileName);
                                                                      }
                                                                  }

Shows how to use a callback to track external resources created while converting a document to HTML.

public void ResourceSavingCallback()
                                                                                                               {
                                                                                                                   Document doc = new Document(MyDir + "Bullet points with alternative font.docx");

                                                                                                                   FontSavingCallback callback = new FontSavingCallback();

                                                                                                                   HtmlFixedSaveOptions saveOptions = new HtmlFixedSaveOptions
                                                                                                                   {
                                                                                                                       ResourceSavingCallback = callback
                                                                                                                   };

                                                                                                                   doc.Save(ArtifactsDir + "HtmlFixedSaveOptions.UsingMachineFonts.html", saveOptions);

                                                                                                                   Console.WriteLine(callback.GetText());
                                                                                                               }

                                                                                                               private class FontSavingCallback : IResourceSavingCallback
                                                                                                               {
                                                                                                                   /// <summary>
                                                                                                                   /// Called when Aspose.Words saves an external resource to fixed page HTML or SVG.
                                                                                                                   /// </summary>
                                                                                                                   public void ResourceSaving(ResourceSavingArgs args)
                                                                                                                   {
                                                                                                                       mText.AppendLine($"Original document URI:\t{args.Document.OriginalFileName}");
                                                                                                                       mText.AppendLine($"Resource being saved:\t{args.ResourceFileName}");
                                                                                                                       mText.AppendLine($"Full uri after saving:\t{args.ResourceFileUri}\n");
                                                                                                                   }

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

                                                                                                                   private readonly StringBuilder mText = new StringBuilder();
                                                                                                               }

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

public void HtmlFixedResourceFolder()
                                                                                                                           {
                                                                                                                               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));
                                                                                                                           }

                                                                                                                           /// <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();
                                                                                                                           }

Methods

ResourceSaving(ResourceSavingArgs)

Called when Aspose.Words saves an external resource to fixed page HTML or SVG formats.

void ResourceSaving(ResourceSavingArgs args)

Parameters

args ResourceSavingArgs

Examples

Shows how to use a callback to track external resources created while converting a document to HTML.

public void ResourceSavingCallback()
                                                                                                               {
                                                                                                                   Document doc = new Document(MyDir + "Bullet points with alternative font.docx");

                                                                                                                   FontSavingCallback callback = new FontSavingCallback();

                                                                                                                   HtmlFixedSaveOptions saveOptions = new HtmlFixedSaveOptions
                                                                                                                   {
                                                                                                                       ResourceSavingCallback = callback
                                                                                                                   };

                                                                                                                   doc.Save(ArtifactsDir + "HtmlFixedSaveOptions.UsingMachineFonts.html", saveOptions);

                                                                                                                   Console.WriteLine(callback.GetText());
                                                                                                               }

                                                                                                               private class FontSavingCallback : IResourceSavingCallback
                                                                                                               {
                                                                                                                   /// <summary>
                                                                                                                   /// Called when Aspose.Words saves an external resource to fixed page HTML or SVG.
                                                                                                                   /// </summary>
                                                                                                                   public void ResourceSaving(ResourceSavingArgs args)
                                                                                                                   {
                                                                                                                       mText.AppendLine($"Original document URI:\t{args.Document.OriginalFileName}");
                                                                                                                       mText.AppendLine($"Resource being saved:\t{args.ResourceFileName}");
                                                                                                                       mText.AppendLine($"Full uri after saving:\t{args.ResourceFileUri}\n");
                                                                                                                   }

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

                                                                                                                   private readonly StringBuilder mText = new StringBuilder();
                                                                                                               }

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

public void HtmlFixedResourceFolder()
                                                                                                                           {
                                                                                                                               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));
                                                                                                                           }

                                                                                                                           /// <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();
                                                                                                                           }
 English