How to Optimize SFDT Files in TypeScript DOCX Editor

28 Aug 20263 minutes to read

Starting from version v21.1.x, the SFDT file generated in the DOCX Editor component is optimized by default to reduce the file size. All static keys are minified, and the final JSON string is compressed. This helps reduce the SFDT file size relative to a DOCX file and provides the following benefits:

  • File transfer between the client and server through the internet is faster.
  • The new optimized SFDT files require less storage space than the old SFDT files.

Hence, the optimized SFDT file can’t be directly manipulated as a JSON string.

This feature comes with a public API to switch between the old and new optimized SFDT formats, allowing backward compatibility.

For backward compatibility to create older-format SFDT files, refer to the following code changes.

Client/Server Old Code New Code from v21.1.x
Client-side
let container: DocumentEditorContainer = new DocumentEditorContainer();
let container: DocumentEditorContainer = new DocumentEditorContainer({ documentEditorSettings: { optimizeSfdt: false } });
Server-side C#
WordDocument sfdtDocument = WordDocument.Load(stream, formatType);
string sfdt = Newtonsoft.Json.JsonConvert.SerializeObject(sfdtDocument);
WordDocument sfdtDocument = WordDocument.Load(stream, formatType);
sfdtDocument.OptimizeSfdt = false;
string sfdt = Newtonsoft.Json.JsonConvert.SerializeObject(sfdtDocument);
Server-side Java
String sfdtDocument = WordProcessorHelper.load(stream, formatType);
String sfdtDocument = WordProcessorHelper.load(stream, formatType, false);

To convert a new optimized SFDT file to the older SFDT format, refer to the following code example.

Client/Server Code example
Client-side
let container: DocumentEditorContainer = new DocumentEditorContainer({ documentEditorSettings: { optimizeSfdt: false } });
Server-side C#
using (Syncfusion.DocIO.DLS.WordDocument docIODocument = WordDocument.Save(optimizedSfdt)) {
   sfdtDocument = WordDocument.Load(docIODocument);
   sfdtDocument.OptimizeSfdt = false;
   string oldSfdt = JsonSerializer.Serialize(sfdtDocument);
}
Server-side Java
WordDocument docIODocument = WordProcessorHelper.save(optimizedSfdt);
String oldSfdt = WordProcessorHelper.load(docIODocument, false);