using System.Web.Http;
using System.Threading.Tasks;
using Aspose.App.Models;
using System.Collections.Generic;
using System.IO;
using System;
using System.Reflection;
using Aspose.Cells.Properties;
using Aspose.Pdf;
using Aspose.Slides;
using Tools.Foundation.Models;
using Aspose.Email.Mapi;
using System.Text;
using Aspose.App.LibraryHelpers;
using System.Linq;
namespace Aspose.App.Controllers
{
///<Summary>
/// AsposeMetadataController class to get metadata properties
///</Summary>
public class AsposeMetadataController : ApiControllerBase
{
private List<string> allowedTypes = new List<string> { "Boolean", "DateTime", "Double", "Number", "Int32", "String" };
private Boolean IsAllowedType(string propertyType)
{
return allowedTypes.Contains(propertyType);
}
private void AddWordsCustomPropertyValue(Words.Properties.CustomDocumentProperties customDocumentProperties, AsposeMetadataObject metadataObj)
{
if (metadataObj.ValueType == "Boolean")
{
customDocumentProperties.Add(metadataObj.Property, Boolean.Parse(metadataObj.Value));
}
else if (metadataObj.ValueType == "DateTime")
{
customDocumentProperties.Add(metadataObj.Property, DateTime.Parse(metadataObj.Value));
}
else if (metadataObj.ValueType == "Double")
{
customDocumentProperties.Add(metadataObj.Property, Double.Parse(metadataObj.Value));
}
else if (metadataObj.ValueType == "Number" || metadataObj.ValueType == "Int32")
{
customDocumentProperties.Add(metadataObj.Property, Int32.Parse(metadataObj.Value));
}
else if (metadataObj.ValueType == "String")
{
customDocumentProperties.Add(metadataObj.Property, metadataObj.Value);
}
}
private void AddCellsCustomPropertyValue(CustomDocumentPropertyCollection customDocumentProperties, AsposeMetadataObject metadataObj)
{
if (metadataObj.ValueType == "Boolean")
{
customDocumentProperties.Add(metadataObj.Property, Boolean.Parse(metadataObj.Value));
}
else if (metadataObj.ValueType == "DateTime")
{
customDocumentProperties.Add(metadataObj.Property, DateTime.Parse(metadataObj.Value));
}
else if (metadataObj.ValueType == "Double")
{
customDocumentProperties.Add(metadataObj.Property, Double.Parse(metadataObj.Value));
}
else if (metadataObj.ValueType == "Number" || metadataObj.ValueType == "Int32")
{
customDocumentProperties.Add(metadataObj.Property, Int32.Parse(metadataObj.Value));
}
else if (metadataObj.ValueType == "String")
{
customDocumentProperties.Add(metadataObj.Property, metadataObj.Value);
}
}
private void AddPdfCustomPropertyValue(Metadata customDocumentProperties, AsposeMetadataObject metadataObj)
{
if (!metadataObj.Property.Contains(':'))
{
metadataObj.Property=metadataObj.Property.Insert(0, "pdfx:");
}
if (metadataObj.ValueType == "Boolean")
{
customDocumentProperties.Add(new KeyValuePair<string, XmpValue>(metadataObj.Property,
metadataObj.Value));
}
else if (metadataObj.ValueType == "DateTime")
{
customDocumentProperties.Add(new KeyValuePair<string, XmpValue>(metadataObj.Property, DateTime.Parse(metadataObj.Value)));
}
else if (metadataObj.ValueType == "Double")
{
customDocumentProperties.Add(new KeyValuePair<string, XmpValue>(metadataObj.Property, Double.Parse(metadataObj.Value)));
}
else if (metadataObj.ValueType == "Number" || metadataObj.ValueType == "Int32")
{
customDocumentProperties.Add(new KeyValuePair<string, XmpValue>(metadataObj.Property,
Int32.Parse(metadataObj.Value)));
}
else if (metadataObj.ValueType == "String")
{
customDocumentProperties.Add(metadataObj.Property, metadataObj.Value);
}
}
private void AddSlidesCustomPropertyValue(IDocumentProperties customDocumentProperties, AsposeMetadataObject metadataObj)
{
if (metadataObj.ValueType == "Boolean")
{
customDocumentProperties.SetCustomPropertyValue(metadataObj.Property, Boolean.Parse(metadataObj.Value));
}
else if (metadataObj.ValueType == "DateTime")
{
customDocumentProperties.SetCustomPropertyValue(metadataObj.Property, DateTime.Parse(metadataObj.Value));
}
else if (metadataObj.ValueType == "Double")
{
customDocumentProperties.SetCustomPropertyValue(metadataObj.Property, Double.Parse(metadataObj.Value));
}
else if (metadataObj.ValueType == "Number" || metadataObj.ValueType == "Int32")
{
customDocumentProperties.SetCustomPropertyValue(metadataObj.Property, Int32.Parse(metadataObj.Value));
}
else if (metadataObj.ValueType == "String")
{
customDocumentProperties.SetCustomPropertyValue(metadataObj.Property, metadataObj.Value);
}
}
private void SetBuiltInPropertyValue(PropertyInfo prop, Object props, string value)
{
try
{
Object obj = null;
if (prop.PropertyType.Name == "Boolean")
{
obj = Boolean.Parse(value);
}
else if (prop.PropertyType.Name == "DateTime")
{
obj = DateTime.Parse(value);
}
else if (prop.PropertyType.Name == "Double")
{
obj = Double.Parse(value);
}
else if (prop.PropertyType.Name == "Number" || prop.PropertyType.Name == "Int32")
{
obj = Int32.Parse(value);
}
else if (prop.PropertyType.Name == "String")
{
obj = value;
}
prop.SetValue(props, obj);
}
catch (Exception) { }
}
///<Summary>
/// GetAsposeMetadata method to get metadata
///</Summary>
[HttpGet]
[ActionName("GetAsposeMetadata")]
public async Task<AsposeMetadataResponse> GetAsposeMetadata(string product, string fileNamePath)
{
string logMsg = "ControllerName = " + this.GetType().Name + ", " + "MethodName = " + "GetAsposeMetadata" + ", " + "Folder = " + Path.GetFileName(Path.GetDirectoryName(fileNamePath));
ProductFamilyNameKeysEnum productFamily = ProductFamilyNameKeysEnum.unassigned;
string productName = "";
var productInLowerCase = product.ToLowerInvariant();
if (productInLowerCase == "words")
{
productName = AsposeWords;
productFamily = ProductFamilyNameKeysEnum.words;
}
else if (productInLowerCase == "cells")
{
productName = AsposeCells;
productFamily = ProductFamilyNameKeysEnum.cells;
}
else if (productInLowerCase == "slides")
{
productName = AsposeSlides;
productFamily = ProductFamilyNameKeysEnum.slides;
}
else if (productInLowerCase == "pdf")
{
productName = AsposePDF;
productFamily = ProductFamilyNameKeysEnum.pdf;
}
else if (productInLowerCase == "email")
{
productName = AsposeEmail;
productFamily = ProductFamilyNameKeysEnum.email;
}
productName += MetadataApp;
try
{
AsposeMetadataResponse response = null;
if (productInLowerCase == "words")
{
response = GetAsposeWordsMetadata(fileNamePath);
}
else if (productInLowerCase == "cells")
{
response = GetAsposeCellsMetadata(fileNamePath);
}
else if (productInLowerCase == "slides")
{
response = GetAsposeSlidesMetadata(fileNamePath);
}
else if (productInLowerCase == "pdf")
{
response = GetAsposePdfMetadata(fileNamePath);
}
else if (productInLowerCase == "email")
{
response = GetAsposeEmailMetadata(fileNamePath);
}
NLogger.LogInfo(logMsg, productName, productFamily, Path.GetFileName(fileNamePath));
return await Task.FromResult(response);
}
catch (Exception e)
{
NLogger.LogError(e, logMsg, productName, productFamily, Path.GetFileName(fileNamePath));
AsposeMetadataResponse response = new AsposeMetadataResponse
{
Status = e.Message,
StatusCode = 500
};
return response;
}
}
private string GetValueString(object objValue)
{
string retVal = "";
if(objValue != null)
{
retVal = objValue.ToString();
}
return retVal;
}
private AsposeMetadataResponse GetAsposeWordsMetadata(string fileNamePath)
{
Words.Document doc = new Aspose.Words.Document(fileNamePath);
int i = 0;
List<AsposeMetadataObject> builtInMetadataList = new List<AsposeMetadataObject>();
Words.Properties.BuiltInDocumentProperties props = doc.BuiltInDocumentProperties;
Type t = props.GetType();
foreach(var prop in t.GetProperties())
{
if (prop.CanWrite && IsAllowedType(prop.PropertyType.Name)) {
AsposeMetadataObject metadataObject = new AsposeMetadataObject {
PropertyId = i++,
Property = prop.Name,
Value = GetValueString(prop.GetValue(props)),
ValueType = prop.PropertyType.Name
};
builtInMetadataList.Add(metadataObject);
}
}
i = 0;
List<AsposeMetadataObject> customMetadataList = new List<AsposeMetadataObject>();
foreach (Aspose.Words.Properties.DocumentProperty obj in doc.CustomDocumentProperties)
{
AsposeMetadataObject metadataObject = new AsposeMetadataObject
{
PropertyId = i++,
Property = obj.Name,
Value = GetValueString(obj.Value),
ValueType = obj.Type.ToString()
};
customMetadataList.Add(metadataObject);
}
AsposeMetadataResponse response = new AsposeMetadataResponse
{
BuiltInMetadataList = builtInMetadataList,
CustomMetadataList = customMetadataList,
Status = "OK",
StatusCode = 200
};
return response;
}
private AsposeMetadataResponse GetAsposeCellsMetadata(string fileNamePath)
{
Aspose.Cells.Workbook doc = new Aspose.Cells.Workbook(fileNamePath);
int i = 0;
List<AsposeMetadataObject> builtInMetadataList = new List<AsposeMetadataObject>();
Cells.Properties.BuiltInDocumentPropertyCollection props = doc.BuiltInDocumentProperties;
Type t = props.GetType();
foreach (var prop in t.GetProperties())
{
if (prop.CanWrite && IsAllowedType(prop.PropertyType.Name))
{
AsposeMetadataObject metadataObject = new AsposeMetadataObject
{
PropertyId = i++,
Property = prop.Name,
Value = GetValueString(prop.GetValue(props)),
ValueType = prop.PropertyType.Name
};
builtInMetadataList.Add(metadataObject);
}
}
i = 0;
List<AsposeMetadataObject> customMetadataList = new List<AsposeMetadataObject>();
foreach (Aspose.Cells.Properties.DocumentProperty obj in doc.CustomDocumentProperties)
{
AsposeMetadataObject metadataObject = new AsposeMetadataObject
{
PropertyId = i++,
Property = obj.Name,
Value = GetValueString(obj.Value),
ValueType = obj.Type.ToString()
};
customMetadataList.Add(metadataObject);
}
AsposeMetadataResponse response = new AsposeMetadataResponse
{
BuiltInMetadataList = builtInMetadataList,
CustomMetadataList = customMetadataList,
Status = "OK",
StatusCode = 200
};
return response;
}
private AsposeMetadataResponse GetAsposePdfMetadata(string fileNamePath)
{
Aspose.Pdf.Document doc = new Aspose.Pdf.Document(fileNamePath);
int i = 0;
List<AsposeMetadataObject> builtInMetadataList = new List<AsposeMetadataObject>();
Pdf.DocumentInfo props = doc.Info;
Type t = props.GetType();
foreach (var prop in t.GetProperties())
{
if (IsPdfBuiltInProperty(prop.Name) && IsAllowedType((prop.PropertyType.Name)))
{
object obj = null;
try
{
obj = prop.GetValue(props);
}
catch (Exception) { }
AsposeMetadataObject metadataObject = new AsposeMetadataObject
{
PropertyId = i++,
Property = prop.Name,
Value = GetValueString(obj),
ValueType = prop.PropertyType.Name
};
builtInMetadataList.Add(metadataObject);
}
}
i = 0;
List<AsposeMetadataObject> customMetadataList = new List<AsposeMetadataObject>();
foreach (string key in doc.Metadata.Keys)
{
AsposeMetadataObject metadataObject = new AsposeMetadataObject
{
PropertyId = i++,
Property = key,
Value = GetValueString(doc.Metadata[key]),
ValueType = "String"
};
customMetadataList.Add(metadataObject);
}
AsposeMetadataResponse response = new AsposeMetadataResponse
{
BuiltInMetadataList = builtInMetadataList,
CustomMetadataList = customMetadataList,
Status = "OK",
StatusCode = 200
};
return response;
}
private bool IsPdfBuiltInProperty(string name)
{
var allowedProperties = new HashSet<string> {"Author","CreationDate","Creator","Keywords","ModDate","Subject", "Title","Trapped" };
return allowedProperties.Contains(name);
}
private AsposeMetadataResponse GetAsposeSlidesMetadata(string fileNamePath)
{
Aspose.Slides.Presentation doc = new Aspose.Slides.Presentation(fileNamePath);
int i = 0;
List<AsposeMetadataObject> builtInMetadataList = new List<AsposeMetadataObject>();
var props = doc.DocumentProperties;
Type t = props.GetType();
foreach (var prop in t.GetProperties())
{
if (prop.CanWrite && IsAllowedType(prop.PropertyType.Name))
{
AsposeMetadataObject metadataObject = new AsposeMetadataObject
{
PropertyId = i++,
Property = prop.Name,
Value = GetValueString(prop.GetValue(props)),
ValueType = prop.PropertyType.Name
};
builtInMetadataList.Add(metadataObject);
}
}
i = 0;
List<AsposeMetadataObject> customMetadataList = new List<AsposeMetadataObject>();
for (int j=0; j < doc.DocumentProperties.CountOfCustomProperties; j++)
{
string propName = doc.DocumentProperties.GetCustomPropertyName(j);
var prop = doc.DocumentProperties[propName];
AsposeMetadataObject metadataObject = new AsposeMetadataObject
{
PropertyId = i++,
Property = propName,
Value = GetValueString(prop),
ValueType = prop.GetType().ToString()
};
customMetadataList.Add(metadataObject);
}
AsposeMetadataResponse response = new AsposeMetadataResponse
{
BuiltInMetadataList = builtInMetadataList,
CustomMetadataList = customMetadataList,
Status = "OK",
StatusCode = 200
};
return response;
}
private AsposeMetadataResponse GetAsposeEmailMetadata(string fileNamePath)
{
var formatInfo = Email.Tools.FileFormatUtil.DetectFileFormat(fileNamePath);
Aspose.Email.Mapi.MapiMessage mail;
if (formatInfo.FileFormatType == Email.FileFormatType.Eml)
mail = Aspose.Email.Mapi.MapiMessage.Load(fileNamePath, new Email.EmlLoadOptions());
else
if (formatInfo.FileFormatType == Email.FileFormatType.Msg)
mail = Aspose.Email.Mapi.MapiMessage.Load(fileNamePath, new Email.MsgLoadOptions());
else
return new AsposeMetadataResponse()
{
StatusCode = 400,
Status = "Invalid file format"
};
int i = 0;
List<AsposeMetadataObject> builtInMetadataList = new List<AsposeMetadataObject>();
Type t = mail.GetType();
foreach (var prop in t.GetProperties())
{
if (prop.CanWrite && IsAllowedType(prop.PropertyType.Name))
{
AsposeMetadataObject metadataObject = new AsposeMetadataObject
{
PropertyId = i++,
Property = prop.Name,
Value = GetValueString(prop.GetValue(mail)),
ValueType = prop.PropertyType.Name
};
builtInMetadataList.Add(metadataObject);
}
}
i = 0;
List<AsposeMetadataObject> customMetadataList = new List<AsposeMetadataObject>();
foreach (var pair in mail.GetCustomProperties())
{
var name = pair.Value.Name;
var prop = pair.Value.Property;
var value = prop.GetValue();
AsposeMetadataObject metadataObject = new AsposeMetadataObject
{
PropertyId = i++,
Property = name,
Value = GetValueString(prop.Data, value, (MapiPropertyType)prop.DataType),
ValueType = ConvertMailPropertyType((MapiPropertyType)prop.DataType)
};
customMetadataList.Add(metadataObject);
}
AsposeMetadataResponse response = new AsposeMetadataResponse
{
BuiltInMetadataList = builtInMetadataList,
CustomMetadataList = customMetadataList,
Status = "OK",
StatusCode = 200
};
return response;
}
private string ConvertMailPropertyType(MapiPropertyType type)
{
switch (type)
{
case MapiPropertyType.PT_BOOLEAN:
return "Boolean";
case MapiPropertyType.PT_DOUBLE:
return "Double";
case MapiPropertyType.PT_LONG:
return "Number";
case MapiPropertyType.PT_SYSTIME:
return "DateTime";
case MapiPropertyType.PT_UNICODE:
return "String";
default:
return type.ToString();
}
}
private string GetValueString(byte[] bytesValue, object objValue, MapiPropertyType type)
{
string retVal = "";
if (objValue != null)
{
switch (type)
{
case MapiPropertyType.PT_LONG:
retVal = Convert.ToInt64(objValue).ToString();
break;
case MapiPropertyType.PT_BOOLEAN:
retVal = Convert.ToBoolean(objValue).ToString();
break;
case MapiPropertyType.PT_DOUBLE:
retVal = Convert.ToDouble(objValue).ToString("F2");
break;
case MapiPropertyType.PT_SYSTIME:
retVal = Convert.ToDateTime(objValue).ToString();
break;
case MapiPropertyType.PT_UNICODE:
retVal = objValue.ToString();
break;
default:
retVal = Encoding.Unicode.GetString(bytesValue);
break;
}
}
return retVal;
}
///////////////////////////////////////////////////////////////////////
///<Summary>
/// SaveAsposeMetadata method to save metadata properties
///</Summary>
[HttpPost]
[ActionName("SaveAsposeMetadata")]
public Task<AsposeMetadataSaveResponse> SaveAsposeMetadata(AsposeMetadataSaveRequest request)
{
string guid = Guid.NewGuid().ToString();
//string logMsg = "Product: " + request.Product + " FileNamePath: " + request.FileNamePath;
string logMsg = "ControllerName = " + "AsposeMetadataController" + ", " + "MethodName = " + "SaveAsposeMetadata" + ", " + "Folder = " + guid;
ProductFamilyNameKeysEnum productFamily = ProductFamilyNameKeysEnum.unassigned;
string productName = "";
var productInLowerCase = request.Product.ToLowerInvariant();
if (productInLowerCase == "words")
{
productName = AsposeWords;
productFamily = ProductFamilyNameKeysEnum.words;
}
else if (productInLowerCase == "cells")
{
productName = AsposeCells;
productFamily = ProductFamilyNameKeysEnum.cells;
}
else if (productInLowerCase == "slides")
{
productName = AsposeSlides;
productFamily = ProductFamilyNameKeysEnum.slides;
}
else if (productInLowerCase == "pdf")
{
productName = AsposePDF;
productFamily = ProductFamilyNameKeysEnum.pdf;
}
else if (productInLowerCase == "email")
{
productName = AsposeEmail;
productFamily = ProductFamilyNameKeysEnum.email;
}
productName += MetadataApp;
string outfileName = Path.GetFileName(request.FileNamePath);
try
{
AsposeMetadataSaveResponse response = null;
string outPath = AppSettings.OutputDirectory + guid;
if (!Directory.Exists(outPath))
{
Directory.CreateDirectory(outPath);
outPath += "/" + outfileName;
}
System.IO.File.Copy(request.FileNamePath, outPath, true);
string fileNamePath = outPath;
if (productInLowerCase == "words")
{
Aspose.App.Models.License.SetAsposeWordsLicense();
response = SaveAsposeWordsMetadata(fileNamePath, request);
}
else if (productInLowerCase == "cells")
{
Aspose.App.Models.License.SetAsposeCellsLicense();
response = SaveAsposeCellsMetadata(fileNamePath, request);
}
else if (productInLowerCase == "slides")
{
Aspose.App.Models.License.SetAsposeSlidesLicense();
response = SaveAsposeSlidesMetadata(fileNamePath, request);
}
else if (productInLowerCase == "pdf")
{
Aspose.App.Models.License.SetAsposePdfLicense();
response = SaveAsposePdfMetadata(fileNamePath, request);
}
else if (productInLowerCase == "email")
{
Aspose.App.Models.License.SetAsposeEmailLicense();
response = SaveAsposeEmailMetadata(fileNamePath, request);
}
response.FileName = outfileName;
response.FolderName = guid;
NLogger.LogInfo(logMsg,productName , productFamily, outfileName);
return Task.FromResult(response);
}
catch (Exception e)
{
NLogger.LogError(e, logMsg, productName, productFamily, outfileName);
return Task.FromResult(new AsposeMetadataSaveResponse
{
Status = e.ToString(),
StatusCode = 500,
});
}
}
private AsposeMetadataSaveResponse SaveAsposeWordsMetadata(string fileNamePath, AsposeMetadataSaveRequest request)
{
Words.Document doc = new Words.Document(fileNamePath);
Words.Properties.BuiltInDocumentProperties props = doc.BuiltInDocumentProperties;
Type t = props.GetType();
foreach (var metadataObj in request.BuiltInMetadataList)
{
var prop = t.GetProperty(metadataObj.Property);
SetBuiltInPropertyValue(prop, props, metadataObj.Value);
}
doc.CustomDocumentProperties.Clear();
foreach (var metadataObj in request.CustomMetadataList)
{
AddWordsCustomPropertyValue(doc.CustomDocumentProperties, metadataObj);
}
doc.Save(fileNamePath);
return (new AsposeMetadataSaveResponse
{
Status = "OK",
StatusCode = 200,
});
}
private AsposeMetadataSaveResponse SaveAsposeCellsMetadata(string fileNamePath, AsposeMetadataSaveRequest request)
{
Aspose.Cells.Workbook doc = new Aspose.Cells.Workbook(fileNamePath);
Cells.Properties.BuiltInDocumentPropertyCollection props = doc.BuiltInDocumentProperties;
Type t = props.GetType();
foreach (var metadataObj in request.BuiltInMetadataList)
{
var prop = t.GetProperty(metadataObj.Property);
SetBuiltInPropertyValue(prop, props, metadataObj.Value);
}
doc.CustomDocumentProperties.Clear();
foreach (var metadataObj in request.CustomMetadataList)
{
AddCellsCustomPropertyValue(doc.CustomDocumentProperties, metadataObj);
}
doc.Save(fileNamePath);
return (new AsposeMetadataSaveResponse
{
Status = "OK",
StatusCode = 200,
});
}
private AsposeMetadataSaveResponse SaveAsposePdfMetadata(string fileNamePath, AsposeMetadataSaveRequest request)
{
Pdf.Document doc = new Aspose.Pdf.Document(fileNamePath);
Pdf.DocumentInfo props = doc.Info;
Type t = props.GetType();
foreach (var metadataObj in request.BuiltInMetadataList)
{
try
{
switch (metadataObj.Property)
{
case "Author":
doc.Info.Author = metadataObj.Value;
break;
case "CreationDate":
doc.Info.CreationDate = DateTime.Parse(metadataObj.Value);
break;
case "Keywords":
doc.Info.Keywords = metadataObj.Value;
break;
case "ModDate":
doc.Info.ModDate = DateTime.Parse(metadataObj.Value);
break;
case "Subject":
doc.Info.Subject = metadataObj.Value;
break;
case "Title":
doc.Info.Title = metadataObj.Value;
break;
case "Trapped":
if (!string.IsNullOrWhiteSpace(metadataObj.Value))
{
var str = metadataObj.Value.ToUpper();
if ((str=="TRUE") || (str == "FALSE"))
doc.Info.Trapped = metadataObj.Value;
}
break;
}
}
catch (Exception)
{
throw;
}
}
//doc.Metadata.Clear();
foreach (var metadataObj in request.CustomMetadataList)
{
AddPdfCustomPropertyValue(doc.Metadata, metadataObj);
}
doc.Save(fileNamePath);
return (new AsposeMetadataSaveResponse
{
Status = "OK",
StatusCode = 200,
});
}
private AsposeMetadataSaveResponse SaveAsposeEmailMetadata(string fileNamePath, AsposeMetadataSaveRequest request)
{
var mail = MapiHelper.GetMapiMessageFromFile(fileNamePath);
if (mail == null)
return new AsposeMetadataSaveResponse()
{
StatusCode = 400,
Status = "Invalid file format"
};
Type t = mail.GetType();
foreach (var metadataObj in request.BuiltInMetadataList)
{
if (metadataObj.Property != "Item")
{
var prop = t.GetProperty(metadataObj.Property);
SetBuiltInPropertyValue(prop, mail, metadataObj.Value);
}
}
var customProps = mail.GetCustomProperties();
foreach (var item in customProps)
mail.RemoveProperty(item.Key);
foreach (var metadataObj in request.CustomMetadataList)
{
var name = metadataObj.Property;
switch (metadataObj.ValueType)
{
case "Double":
mail.AddCustomProperty(name, Convert.ToDouble(metadataObj.Value));
break;
case "Boolean":
mail.AddCustomProperty(name, Convert.ToBoolean(metadataObj.Value));
break;
case "Number":
mail.AddCustomProperty(name, Convert.ToInt64(metadataObj.Value));
break;
case "DateTime":
mail.AddCustomProperty(name, Convert.ToDateTime(metadataObj.Value));
break;
case "String":
mail.AddCustomProperty(name, metadataObj.Value);
break;
default:
mail.AddCustomProperty(name, (MapiPropertyType)Enum.Parse(typeof(MapiPropertyType), metadataObj.ValueType), Encoding.Unicode.GetBytes(metadataObj.Value));
break;
}
}
mail.Save(fileNamePath);
return new AsposeMetadataSaveResponse()
{
Status = "OK",
StatusCode = 200
};
}
private AsposeMetadataSaveResponse SaveAsposeSlidesMetadata(string fileNamePath, AsposeMetadataSaveRequest request)
{
var doc = new Aspose.Slides.Presentation(fileNamePath);
var props = doc.DocumentProperties;
Type t = props.GetType();
foreach (var metadataObj in request.BuiltInMetadataList)
{
var prop = t.GetProperty(metadataObj.Property);
SetBuiltInPropertyValue(prop, props, metadataObj.Value);
}
doc.DocumentProperties.ClearCustomProperties();
foreach (var metadataObj in request.CustomMetadataList)
{
AddSlidesCustomPropertyValue(doc.DocumentProperties, metadataObj);
}
string ext = Path.GetExtension(fileNamePath).ToLower();
Aspose.Slides.Export.SaveFormat saveFormat = Aspose.Slides.Export.SaveFormat.Pptx;
switch (ext)
{
case "ppt":
saveFormat = Aspose.Slides.Export.SaveFormat.Ppt;
break;
case "pptx":
saveFormat = Aspose.Slides.Export.SaveFormat.Pptx;
break;
case "odp":
saveFormat = Aspose.Slides.Export.SaveFormat.Odp;
break;
}
doc.Save(fileNamePath, saveFormat);
return (new AsposeMetadataSaveResponse
{
Status = "OK",
StatusCode = 200,
});
}
}
}
Comments