The following works in a Azure App Service Windows, but it fails with SkiaSharp DLL not found exception:
private void MergeAllSingleFields(Document wordDocumentTemplate, Dictionary<string, string> flattenedData)
{
var fieldNames = flattenedData.Keys.ToArray();
var fieldValues = flattenedData.Values.Cast<object>().ToArray();
wordDocumentTemplate.MailMerge.Execute(fieldNames, fieldValues);
wordDocumentTemplate.UpdateFields();
wordDocumentTemplate.UpdatePageLayout();
}
private Document ReplaceWordDocPlaceholders(Document wordDocumentTemplate, JObject data)
{
// 1) Merge single fields
var flattenedJson = FlattenJson(data);
MergeAllSingleFields(wordDocumentTemplate, flattenedJson);
// 2) Flatten the doc (to expose conditionals)
using var tempStream = new MemoryStream();
wordDocumentTemplate.Save(tempStream, SaveFormat.Docx);
tempStream.Position = 0;
var flattenedDoc = new Document(tempStream);
// 3) Identify all table placeholders
var existingTables = GetTablePlaceholders(flattenedDoc);
// 4) Merge arrays via ExecuteWithRegions
foreach (var tableName in existingTables)
{
var token = data.SelectToken(tableName);
if (token is JArray array)
{
var ds = new JsonMailMergeDataSource(tableName, array);
flattenedDoc.MailMerge.ExecuteWithRegions(ds);
}
}
flattenedDoc.MailMerge.DeleteFields();
flattenedDoc.UpdateFields();
flattenedDoc.UpdatePageLayout();
return flattenedDoc;
}
private void MergeAllSingleFields(Document wordDocumentTemplate, Dictionary<string, string> flattenedData)
{
var fieldNames = flattenedData.Keys.ToArray();
var fieldValues = flattenedData.Values.Cast<object>().ToArray();
wordDocumentTemplate.MailMerge.Execute(fieldNames, fieldValues);
wordDocumentTemplate.UpdateFields();
wordDocumentTemplate.UpdatePageLayout();
}
Exception Stack
Inner stack trace
Ok
2025-03-07T10:32:43.3702057
Ok
2025-03-07T10:32:43.3702057
/opt/startup/startup.sh: line 20: 1116 Aborted (core dumped) dotnet "InstaFormEngineAPI.dll"
Ok
2025-03-07T10:32:31.0942902
Ok
2025-03-07T10:32:31.0942902
at SkiaSharp.SKNativeObject.Finalize()
Ok
2025-03-07T10:32:31.0942854
at SkiaSharp.SKBitmap.Dispose(Boolean disposing)
Ok
2025-03-07T10:32:31.0942808
at SkiaSharp.SKObject.Dispose(Boolean disposing)
Ok
2025-03-07T10:32:31.0942754
at SkiaSharp.SKNativeObject.Dispose(Boolean disposing)
Ok
2025-03-07T10:32:31.0942567
at SkiaSharp.SKObject.set_Handle(IntPtr value)
Ok
2025-03-07T10:32:31.094252
at SkiaSharp.SKObject.DeregisterHandle(IntPtr handle, SKObject instance)
Warning
2025-03-07T10:32:31.0942473
--- End of inner exception stack trace ---
Ok
2025-03-07T10:32:31.0942425
at SkiaSharp.SKObject..cctor()
Ok
2025-03-07T10:32:31.0942378
at SkiaSharp.SkiaSharpVersion.CheckNativeLibraryCompatible(Boolean throwIfIncompatible)
Ok
2025-03-07T10:32:31.0942331
at SkiaSharp.SkiaSharpVersion.get_Native()
Ok
2025-03-07T10:32:31.0942283
at SkiaSharp.SkiaApi.sk_version_get_milestone()
Ok
2025-03-07T10:32:31.0942236
Error
2025-03-07T10:32:31.0942186
/home/site/wwwroot/liblibSkiaSharp: cannot open shared object file: No such file or directory
Error
2025-03-07T10:32:31.0942135
/usr/share/dotnet/shared/Microsoft.NETCore.App/8.0.12/liblibSkiaSharp: cannot open shared object file: No such file or directory
Error
2025-03-07T10:32:31.0942084
/home/site/wwwroot/libSkiaSharp: cannot open shared object file: No such file or directory
Error
2025-03-07T10:32:31.0942034
/usr/share/dotnet/shared/Microsoft.NETCore.App/8.0.12/libSkiaSharp: cannot open shared object file: No such file or directory
Error
2025-03-07T10:32:31.0941984
/home/site/wwwroot/liblibSkiaSharp.so: cannot open shared object file: No such file or directory
Error
2025-03-07T10:32:31.0941931
/usr/share/dotnet/shared/Microsoft.NETCore.App/8.0.12/liblibSkiaSharp.so: cannot open shared object file: No such file or directory
Error
2025-03-07T10:32:31.094188
/home/site/wwwroot/libSkiaSharp.so: cannot open shared object file: No such file or directory
Error
2025-03-07T10:32:31.0941826
/usr/share/dotnet/shared/Microsoft.NETCore.App/8.0.12/libSkiaSharp.so: cannot open shared object file: No such file or directory
This makes my Aspose.Words integration not work.