using DocumentFormat.OpenXml.Packaging; using HiTeachCC.Model.PowerPoint; using HiTeachCC.Service.PowerPoint.Interface; using Microsoft.AspNetCore.Http; using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Threading.Tasks; using System.Xml; using System.Xml.Linq; using TEAMModelOS.SDK.Context.Constant; using TEAMModelOS.SDK.Context.Constant.Common; using TEAMModelOS.SDK.Context.Exception; using TEAMModelOS.SDK.Helper.Common.CollectionHelper; using TEAMModelOS.SDK.Helper.Security.ShaHash; using TEAMModelOS.SDK.Module.AzureBlob.Container; using TEAMModelOS.SDK.Module.AzureBlob.Interfaces; using TEAMModelOS.Service.Models.PowerPoint.Inner; using TEAMModelOS.Service.Services.PowerPoint.Implement; using Fill = HiTeachCC.Model.PowerPoint.Fill; using Media = HiTeachCC.Model.PowerPoint.Media; using Position = HiTeachCC.Model.PowerPoint.Position; namespace HiTeachCC.Service.PowerPoint.Implement { public class ShapeGenerator : IShapeGenerator { private string fileShaCode { get; set; } private bool isDone = false; private List MsgQueue = new List(); private Dictionary slideLayoutClrOvride { get; set; } // private XmlNode themeContent { get; set; } private int chartID = 0; private int _order = 1; private int titleFontSize = 42; private int bodyFontSize = 20; private int otherFontSize = 16; private bool isSlideMode = false; private Dictionary> styleTable = new Dictionary>(); private const double px96 = 96.00, px72 = 72.00, px914400 = 914400.00, px12700 = 12700.00; private const double rot60000 = 60000.00; public readonly IAzureBlobDBRepository azureBlobDBRepository; public ShapeGenerator(IAzureBlobDBRepository _azureBlobDBRepository) { azureBlobDBRepository = _azureBlobDBRepository; } public async Task> LoadPresentation(IFormFile file) { Dictionary resdict = new Dictionary(); if (FileType.GetExtention(file.FileName).ToLower().Equals("pptx")) { await ConvertPPTX(file, resdict); return resdict; } else if (FileType.GetExtention(file.FileName).ToLower().Equals("pdf")) { // await ProcessPDF(file, resdict); return resdict; } else { throw new BizException("file type does not support!", 500); } } public async Task> ConvertPPTX(IFormFile file, Dictionary resdict) { string shaCode = fileShaCode = ShaHashHelper.GetSHA1(file.OpenReadStream()); PresentationDocument presentationDocument = PresentationDocument.Open(file.OpenReadStream(), false); if (presentationDocument == null) { throw new ArgumentNullException("presentationDocument"); } XDocument xdoc = presentationDocument.ToFlatOpcDocument(); XmlDocument xmlDocument = new XmlDocument(); xmlDocument.LoadXml(xdoc.ToString()); var rslt_ary = await ProcessPPTX(xmlDocument, shaCode); //TODO return null; } /// /// 加载PPTX文件 /// /// /// public async Task>> ProcessPPTX(XmlDocument xdoc, string shaCode) { List> post_ary = new List>(); var dateBefore = DateTimeOffset.Now.UtcTicks; AzureBlobModel thumbnailModel = await GetThumbnailModel(xdoc, shaCode); post_ary.Add(new Dictionary { { "pptx-thumb", thumbnailModel } }); //获取全部的/ppt/slides/slide1.xml--->>/ppt/slides/slide(n).xml var slideNodes = xdoc.GetTextByPathList("//pkg:part[@pkg:contentType='application/vnd.openxmlformats-officedocument.presentationml.slide+xml']"); //获取全部的/ppt/slideLayouts/slideLayout1.xml--->>/ppt/slideLayouts/slideLayout(n).xml var slideLayoutNodes = xdoc.GetTextByPathList("//pkg:part[@pkg:contentType='application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml']"); //获取ppt的宽高 var slideSize = ShapeHelper.GetSlideSize(xdoc); post_ary.Add(new Dictionary { { "slideSize", slideSize } }); //加载当前PPT使用到的PPT节点 var themeContent = LoadTheme(xdoc); //获取所有的表格样式节点 var tableStyles = xdoc.GetTextByPath("//pkg:part[@pkg:name='/ppt/tableStyles.xml']/pkg:xmlData/a:tblStyleLst"); //处理slide1---slide(n) int numOfSlides = slideNodes.Count; for (int i = 0; i < numOfSlides; i++) { string filename = slideNodes[i].GetTextByPath("@pkg:name").Value; //处理当前页的幻灯片 string slideHtml = await ProcessSingleSlide(xdoc, slideNodes[i], filename, i, slideSize, themeContent); post_ary.Add(new Dictionary { { "slide", slideHtml } }); post_ary.Add(new Dictionary { { "progress-update", (i + 1) * 100 / numOfSlides } }); } post_ary.Add(new Dictionary { { "globalCSS", GenGlobalCSS() } }); var dateAfter = DateTimeOffset.Now.UtcTicks; post_ary.Add(new Dictionary { { "ExecutionTime", dateAfter - dateBefore } }); return post_ary; } public Dictionary GenGlobalCSS() { Dictionary cssText = new Dictionary(); foreach (var key in styleTable.Keys) { // cssText += "div ." + styleTable[key]["name"] + "{" + styleTable[key]["text"] + "}\n"; //section > div var cssTextKey = styleTable[key]["name"]; var cssTextValue = styleTable[key]["text"]; cssText.Add(cssTextKey, cssTextValue); } return cssText; } public async Task ProcessSingleSlide(XmlDocument xdoc, XmlNode xnode, string sldFileName, int index, dynamic slideSize, XmlNode themeContent) { var resName = sldFileName.Replace("slides/slide", "slides/_rels/slide") + ".rels"; var RelationshipArray = xdoc.GetTextByPathList("//pkg:part[@pkg:name='" + resName + "']/pkg:xmlData/rel:Relationships/rel:Relationship"); Dictionary> slideResObj = new Dictionary>(); var layoutFilename = ""; foreach (XmlNode Relationship in RelationshipArray) { var RelationshipType = Relationship.GetTextByPath("@Type"); if (RelationshipType.Value.Equals("http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout")) { layoutFilename = Relationship.GetTextByPath("@Target").Value.Replace("../", "/ppt/"); } else { //case "http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesSlide": //case "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image": //case "http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart": //case "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink": Dictionary dict = new Dictionary(); string Type = Relationship.GetTextByPath("@Type").Value.Replace("http://schemas.openxmlformats.org/officeDocument/2006/relationships/", ""); string Target = Relationship.GetTextByPath("@Target").Value.Replace("../", "/ppt/"); string Id = Relationship.GetTextByPath("@Id").Value; dict.Add("type", Type); dict.Add("target", Target); slideResObj.Add(Id, dict); } } // Open slideLayoutXX.xml var slideLayoutContent = xdoc.GetTextByPath("//pkg:part[@pkg:name='" + layoutFilename + "']"); NodesTable slideLayoutTables = ShapeHelper.IndexNodes(slideLayoutContent.GetTextByPath("pkg:xmlData/p:sldLayout")); ///ppt/slides/slide5.xml 也包含a:overrideClrMapping ////ppt/slideLayouts/slideLayout13.xml 也包含a:overrideClrMapping var sldLayoutClrOvr = slideLayoutContent.GetTextByPath("pkg:xmlData/p:sldLayout/p:clrMapOvr/a:overrideClrMapping"); if (sldLayoutClrOvr != null) { //获取 overrideClrMapping所有属性节点 slideLayoutClrOvride = new Dictionary() { { "accent1", sldLayoutClrOvr.GetTextByPath("@accent1").Value}, { "accent2", sldLayoutClrOvr.GetTextByPath("@accent2").Value}, { "accent3", sldLayoutClrOvr.GetTextByPath("@accent3").Value}, { "accent4", sldLayoutClrOvr.GetTextByPath("@accent4").Value}, { "accent5", sldLayoutClrOvr.GetTextByPath("@accent5").Value}, { "accent6", sldLayoutClrOvr.GetTextByPath("@accent6").Value}, { "bg1", sldLayoutClrOvr.GetTextByPath("@bg1").Value}, { "bg2", sldLayoutClrOvr.GetTextByPath("@bg2").Value}, { "folHlink", sldLayoutClrOvr.GetTextByPath("@folHlink").Value}, { "hlink", sldLayoutClrOvr.GetTextByPath("@hlink").Value}, { "tx1", sldLayoutClrOvr.GetTextByPath("@tx1").Value}, { "tx2", sldLayoutClrOvr.GetTextByPath("@tx2").Value} }; } // =====< Step 2 >===== // Read slide master filename of the slidelayout (Get slideMasterXX.xml) // @resName: ppt/slideLayouts/slideLayout1.xml // @masterName: ppt/slideLayouts/_rels/slideLayout1.xml.rels var slideLayoutResFilename = layoutFilename.Replace("slideLayouts/slideLayout", "slideLayouts/_rels/slideLayout") + ".rels"; var slideLayoutResContent = xdoc.GetTextByPath("//pkg:part[@pkg:name='" + slideLayoutResFilename + "']"); ///查看js 是替换之前 还是添加 RelationshipArray = slideLayoutResContent.GetTextByPathList("pkg:xmlData/rel:Relationships/rel:Relationship"); var masterFilename = ""; Dictionary> layoutResObj = new Dictionary>(); for (int i = 0; i < RelationshipArray.Count; i++) { if (RelationshipArray[i].GetTextByPath("@Type").Value.Equals("http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster")) { masterFilename = RelationshipArray[i].GetTextByPath("@Target").Value.Replace("../", "/ppt/"); } else { Dictionary dict = new Dictionary(); string Type = RelationshipArray[i].GetTextByPath("@Type").Value.Replace("http://schemas.openxmlformats.org/officeDocument/2006/relationships/", ""); string Target = RelationshipArray[i].GetTextByPath("@Target").Value.Replace("../", "/ppt/"); string Id = RelationshipArray[i].GetTextByPath("@Id").Value; dict.Add("type", Type); dict.Add("target", Target); layoutResObj.Add(Id, dict); } } // Open slideMasterXX.xml var slideMasterContent = xdoc.GetTextByPath("//pkg:part[@pkg:name='" + masterFilename + "']"); var slideMasterTextStyles = slideMasterContent.GetTextByPath("pkg:xmlData/p:sldMaster/p:txStyles"); var slideMasterTables = ShapeHelper.IndexNodes(slideMasterContent.GetTextByPath("pkg:xmlData/p:sldMaster")); /////////////////Amir///////////// //Open slideMasterXX.xml.rels var slideMasterResFilename = masterFilename.Replace("slideMasters/slideMaster", "slideMasters/_rels/slideMaster") + ".rels"; var slideMasterResContent = xdoc.GetTextByPath("//pkg:part[@pkg:name='" + slideMasterResFilename + "']"); RelationshipArray = slideMasterResContent.GetTextByPathList("pkg:xmlData/rel:Relationships/rel:Relationship"); var themeFilename = ""; Dictionary> masterResObj = new Dictionary>(); for (int i = 0; i < RelationshipArray.Count; i++) { if (RelationshipArray[i].GetTextByPath("@Type").Value.Equals("http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme")) { themeFilename = RelationshipArray[i].GetTextByPath("@Target").Value.Replace("../", "/ppt/"); } else { Dictionary dict = new Dictionary(); string Type = RelationshipArray[i].GetTextByPath("@Type").Value.Replace("http://schemas.openxmlformats.org/officeDocument/2006/relationships/", ""); string Target = RelationshipArray[i].GetTextByPath("@Target").Value.Replace("../", "/ppt/"); string Id = RelationshipArray[i].GetTextByPath("@Id").Value; dict.Add("type", Type); dict.Add("target", Target); masterResObj.Add(Id, dict); } } //Load Theme file if (!string.IsNullOrEmpty(themeFilename)) { themeContent = xdoc.GetTextByPath("//pkg:part[@pkg:name='" + themeFilename + "']"); } // =====< Step 3 >===== throw new NotImplementedException(); var slideContent = xdoc.GetTextByPath("//pkg:part[@pkg:name='" + sldFileName + "']"); var spTreeNode = slideContent.GetTextByPath("pkg:xmlData/p:sld/p:cSld/p:spTree"); WarpObj warpObj = new WarpObj { zip = xdoc, slideLayoutTables = slideLayoutTables, slideMasterTables = slideMasterTables, slideMasterTextStyles = slideMasterTextStyles, slideResObj = slideResObj, layoutResObj = layoutResObj, masterResObj = masterResObj, slideLayoutContent = slideLayoutContent, slideMasterContent = slideMasterContent, themeContent = themeContent }; var bgColor = GetSlideBackgroundFill(slideContent, index, warpObj); string result = "
"; //result += "
"+getBackgroundShapes(slideContent, slideLayoutContent, slideMasterContent,warpObj) + "
" - TODO if (spTreeNode != null) { var nodes = spTreeNode.ChildNodes; int order = 1; List items = new List(); foreach (XmlNode node in nodes) { await ProcessNodesInSlide(items, node.Name, node, order, warpObj); order += 1; } } return result; } public async Task ProcessNodesInSlide(List items, string nodeKey, XmlNode node, int order, WarpObj warpObj) { // string result = ""; switch (nodeKey) { case "p:sp": // Shape, Text await ProcessSpNode(node, order, warpObj); break; case "p:cxnSp": // Shape, Text (with connection) await ProcessCxnSpNode(node, order, warpObj); break; case "p:pic": // Picture items.Add(await ProcessPicNode(node, order, warpObj)); break; case "p:graphicFrame": // Chart, Diagram, Table ProcessGraphicFrameNode(items, node, order, warpObj); break; case "p:grpSp": await ProcessGroupSpNode(items, node, order, warpObj); break; case "mc:AlternateContent": //Equations and formulas as Image 处理公式 方程等 var mcFallbackNode = node.GetTextByPath("mc:Fallback/p:sp"); await ProcessSpNode(mcFallbackNode, order, warpObj); break; default: break; } } public async Task ProcessGroupSpNode(List items, XmlNode node, int order, WarpObj warpObj) { var factor = 1.00 * px96 / px914400; var xfrmNode = node.GetTextByPath("p:grpSpPr/a:xfrm"); var x = int.Parse(xfrmNode.GetTextByPath("a:off/@x").Value) * factor; var y = int.Parse(xfrmNode.GetTextByPath("a:off/@y").Value) * factor; var chx = int.Parse(xfrmNode.GetTextByPath("a:chOff/@x").Value) * factor; var chy = int.Parse(xfrmNode.GetTextByPath("a:chOff/@y").Value) * factor; var cx = int.Parse(xfrmNode.GetTextByPath("a:ext/@cx").Value) * factor; var cy = int.Parse(xfrmNode.GetTextByPath("a:ext/@cy").Value) * factor; var chcx = int.Parse(xfrmNode.GetTextByPath("a:chExt/@cx").Value) * factor; var chcy = int.Parse(xfrmNode.GetTextByPath("a:chExt/@cy").Value) * factor; var rotate = ShapeHelper.AngleToDegrees(xfrmNode.GetTextByPath("@rot")); string result = "
"; Group group = new Group(); group.Position = new Position { X = x - chx, Y = y - chy, Cx = cx - chcx, Cy = cy - chcy, Rot = rotate }; group.Type = "Group"; group.Index = order++; // Procsee all child nodes var nodes = node.ChildNodes; List gpIterm = new List(); foreach (XmlNode nd in nodes) { await ProcessNodesInSlide(gpIterm, nd.Name, nd, order, warpObj); order += 1; } group.Shapes = gpIterm; items.Add(group); result += "
"; //return result; } public string ProcessGraphicFrameNode(List items, XmlNode node, int order, WarpObj warpObj) { var result = ""; var graphicTypeUri = node.GetTextByPath("a:graphic/a:graphicData/uri"); if (graphicTypeUri != null) { switch (graphicTypeUri.Value) { case "http://schemas.openxmlformats.org/drawingml/2006/table": result = GenTable(node, warpObj); break; case "http://schemas.openxmlformats.org/drawingml/2006/chart": result = GenChart(node, warpObj); break; case "http://schemas.openxmlformats.org/drawingml/2006/diagram": result = GenDiagram(node, warpObj); break; default: break; } } return result; } public string GenDiagram(XmlNode node, WarpObj warpObj) { return ""; } public string GenChart(XmlNode node, WarpObj warpObj) { return ""; } public string GenTable(XmlNode node, WarpObj warpObj) { return ""; } public async Task ProcessCxnSpNode(XmlNode node, int order, WarpObj warpObj) { var id = node.GetTextByPath("p:nvCxnSpPr/p:cNvPr/@id"); var name = node.GetTextByPath("p:nvCxnSpPr/p:cNvPr/@name"); return await GenShape("CxnSp", node, null, null, id, name, null, null, order, warpObj); } public async Task ProcessSpNode(XmlNode node, int order, WarpObj warpObj) { /* * 958 * 959 * 960 * 961 * 962 * 963 * 964 * 965 * 966 */ var id = node.GetTextByPath("p:nvSpPr/p:cNvPr/@id"); var name = node.GetTextByPath("p:nvSpPr/p:cNvPr/@name"); var idx = node.GetTextByPath("p:nvSpPr/p:nvPr/p:ph/@idx"); var type = node.GetTextByPath("p:nvSpPr/p:nvPr/p:ph/@type"); XmlNode slideLayoutSpNode = ShapeHelper.GetNodesTable(id, idx, type, warpObj, "Layout"); XmlNode slideMasterSpNode = ShapeHelper.GetNodesTable(id, idx, type, warpObj, "Master"); if (type == null) { if (slideLayoutSpNode != null) { type = slideLayoutSpNode.GetTextByPath("p:nvSpPr/p:nvPr/p:ph/@type"); } // type = slideLayoutSpNode.TryGetValue"p:nvSpPr", "p:nvPr", "p:ph", "attrs", "type"]); if (type == null) { if (slideMasterSpNode != null) { type = slideMasterSpNode.GetTextByPath("p:nvSpPr/p:nvPr/p:ph/@type"); } // type = getTextByPathList(slideMasterSpNode, ["p:nvSpPr", "p:nvPr", "p:ph", "attrs", "type"]); } } string s = await GenShape("Sp", node, slideLayoutSpNode, slideMasterSpNode, id, name, idx, type, order, warpObj); return ""; } public async Task GenShape(string ShapeType, XmlNode node, XmlNode slideLayoutSpNode, XmlNode slideMasterSpNode, XmlNode id, XmlNode name, XmlNode idx, XmlNode type, int order, WarpObj warpObj) { var xfrmList = "p:spPr/a:xfrm"; var slideXfrmNode = node.GetTextByPath(xfrmList); XmlNode slideLayoutXfrmNode = null; if (slideLayoutSpNode != null) { slideLayoutXfrmNode = slideLayoutSpNode.GetTextByPath(xfrmList); } XmlNode slideMasterXfrmNode = null; if (slideMasterSpNode != null) { slideMasterXfrmNode = slideMasterSpNode.GetTextByPath(xfrmList); } if (slideXfrmNode == null) { slideXfrmNode = slideLayoutXfrmNode; } if (slideXfrmNode == null) { slideXfrmNode = slideMasterXfrmNode; } var result = ""; var shapeType = node.GetTextByPath("p:spPr/a:prstGeom/@prst"); var custShapType = node.GetTextByPath("p:spPr/a:custGeom"); var isFlipV = 0; var isFlipH = 0; if (slideXfrmNode.GetTextByPath("@flipV") != null && slideXfrmNode.GetTextByPath("@flipV").Value == "1") {// if ( getTextByPathList(slideXfrmNode, ["attrs", "flipV"]) === "1" || getTextByPathList(slideXfrmNode, ["attrs", "flipH"]) === "1") isFlipV = 1; } if (slideXfrmNode.GetTextByPath("@flipH") != null && slideXfrmNode.GetTextByPath("@flipH").Value == "1") { isFlipH = 1; } //rotate var rotate = ShapeHelper.AngleToDegrees(slideXfrmNode.GetTextByPath("@rot")); //console.log("rotate: "+rotate); double txtRotate; var txtXframeNode = node.GetTextByPath("p:txXfrm/@rot"); if (txtXframeNode != null) { txtRotate = ShapeHelper.AngleToDegrees(txtXframeNode) + 90; } else { txtRotate = rotate; } Position position = ShapeHelper.GetPosition(slideXfrmNode, slideLayoutXfrmNode, slideMasterXfrmNode); position.Rot = rotate; position.FlipH = isFlipH; position.FlipV = isFlipV; var grndFillFlg = false; var imgFillFlg = false; var Fill = await GetShapeFill(node, warpObj); // Border Color var shapeBorder = ShapeHelper.GetBorder(node, true, "shape", slideLayoutClrOvride, warpObj.slideMasterContent, warpObj.themeContent); var headEndNodeAttrs = node.GetTextByPath("p:spPr/a:ln/a:headEnd"); var tailEndNodeAttrs = node.GetTextByPath("p:spPr/a:ln/a:tailEnd"); Svg shapeSvg = new Svg { Id = order + "", Width = position.Cx + "", Height = position.Cy + "", Top = position.X + "", Left = position.Y + "", Transform = "rotate(" + position.Rot + "deg)" }; StringBuilder svgPath = new StringBuilder(""; //result += ""; // Fill Color var clrFillType = ShapeHelper.GetFillType(node.GetTextByPath("p:spPr")); ///////////////////////////////////////// if (clrFillType == "GRADIENT_FILL") { grndFillFlg = true; var color_arry = Fill.gradColor; var angl = Fill.Rot; var svgGrdnt = ShapeHelper.GetSvgGradient(position.Cx, position.Cy, angl, color_arry, order, slideLayoutClrOvride, warpObj.themeContent); shapeSvg.Defs = svgGrdnt; //fill="url(#linGrd)" Fill.SvgText = svgGrdnt; result += svgGrdnt; } else if (clrFillType == "PIC_FILL") { imgFillFlg = true; var svgBgImg = ShapeHelper.GetSvgImagePattern(Fill.Image, order); shapeSvg.Defs = svgBgImg; //fill="url(#imgPtrn)" //console.log(svgBgImg) Fill.SvgText = svgBgImg; result += svgBgImg; } else { if (clrFillType != null && clrFillType != "SOLID_FILL" && clrFillType != "PATTERN_FILL") { Fill.HtmlText = "none"; Fill.Color = "none"; } if (shapeType != null) { if (shapeType.Value == "arc" || shapeType.Value == "bracketPair" || shapeType.Value == "bracePair" || shapeType.Value == "leftBracket" || shapeType.Value == "leftBrace" || shapeType.Value == "rightBrace" || shapeType.Value == "rightBracket") { //Temp. solution - TODO Fill.HtmlText = "none"; Fill.Color = "none"; } } } // type: none, triangle, stealth, diamond, oval, arrow if ((headEndNodeAttrs != null && (headEndNodeAttrs.GetTextByPath("@type").Value == "triangle" || (headEndNodeAttrs.GetTextByPath("@type").Value == "arrow")) || (tailEndNodeAttrs != null && (tailEndNodeAttrs.GetTextByPath("@type").Value == "triangle" || (tailEndNodeAttrs.GetTextByPath("@type").Value == "arrow"))))) { var triangleMarker = ""; result += triangleMarker; } result += ""; } if (shapeType != null && custShapType == null) { Svg svg = ShapeSvg.GenShapeSvg(node, order, shapeType, isFlipV, position, grndFillFlg, imgFillFlg, Fill, shapeBorder, headEndNodeAttrs, tailEndNodeAttrs); shapeSvg.SvgShape = svg.SvgShape; shapeSvg.SvgData = svg.SvgData; if (ShapeType.Equals("Sp")) { Shape shape= new Shape { Border = shapeBorder, Fill = Fill, Svg = shapeSvg, Type = "Sp", Position = position, Index = order, ShapeType = shapeType.Value }; var txbody = node.GetTextByPath("p:txBody"); if (txbody != null) { List paragraphs= GenTextBody(txbody, node, slideLayoutSpNode, slideMasterSpNode, type, warpObj); } } else if (ShapeType.Equals("CxnSp")) { new Connector { Border = shapeBorder, Svg = shapeSvg, Type = "CxnSp", Position = position, Index = order, CxnType = shapeType.Value }; } } else { } return result; } private List GenTextBody(XmlNode textBodyNode, XmlNode node, XmlNode slideLayoutSpNode, XmlNode slideMasterSpNode, XmlNode type, WarpObj warpObj) { var slideMasterTextStyles = warpObj.slideMasterTextStyles; string vert = GetVerticalAlign(node, slideLayoutSpNode, slideMasterSpNode); var ps= textBodyNode.GetTextByPathList("a:p"); if (ps != null) { foreach (XmlNode pNode in ps) { var rNode = pNode.GetTextByPathList("a:r"); GetHorizontalAlign(pNode, slideLayoutSpNode, slideMasterSpNode, type, slideMasterTextStyles); BuChar buChar= GenBuChar(pNode, node, slideLayoutSpNode, slideMasterSpNode, type, warpObj); } } return null; } private BuChar GenBuChar(XmlNode node, XmlNode spNode, XmlNode slideLayoutSpNode, XmlNode slideMasterSpNode, XmlNode type, WarpObj warpObj) { var sldMstrTxtStyles = warpObj.slideMasterTextStyles; var slideMasterContent = warpObj.slideMasterContent; var themeContent = warpObj.themeContent; var rNodes= node.GetTextByPathList("a:r"); XmlNode rNode = null; if (rNodes != null) { rNode = rNodes[0]; } XmlNode dfltBultColor, dfltBultSize, bultColor, bultSize; if (rNode != null) { dfltBultColor = GetFontColorPr(rNode, spNode, type, sldMstrTxtStyles, slideMasterContent , themeContent); } throw new NotImplementedException(); } private XmlNode GetFontColorPr(XmlNode node, XmlNode spNode, XmlNode type, XmlNode sldMstrTxtStyles , XmlNode slideMasterContent ,XmlNode themeContent) { var rPrNode = node.GetTextByPath("a:rPr"); string filTyp, textBordr; string color = null; if (rPrNode != null) { filTyp = ShapeHelper.GetFillType(rPrNode); if (filTyp == "SOLID_FILL") { var solidFillNode = node.GetTextByPath( "a:rPr/a:solidFill"); string colorstr = ShapeHelper.GetSolidFill(solidFillNode , slideLayoutClrOvride, slideMasterContent , themeContent); color = PowerPointHelper.ColorToning(solidFillNode.OuterXml, colorstr); } else if (filTyp == "PATTERN_FILL") { var pattFill = node.GetTextByPath("a:rPr/a:pattFill"); Fill colorFill = ShapeHelper. GetPatternFill(pattFill ,slideLayoutClrOvride,slideMasterContent,themeContent); if (colorFill != null && colorFill.gradColor.IsNotEmpty()) { color = colorFill.gradColor[0]; } else { color = "000000"; } } else { var sPstyle = spNode.GetTextByPath("p:style/a:fontRef"); if (sPstyle !=null) { string colorstr = ShapeHelper.GetSolidFill(sPstyle,slideLayoutClrOvride,slideMasterContent,themeContent); color = PowerPointHelper.ColorToning(sPstyle.OuterXml, colorstr); } } } if (color == null) { color = "000000"; } var txtBrdrNode = node.GetTextByPath("a:rPr/a:ln"); if (txtBrdrNode != null) { var txBrd = ShapeHelper.GetBorder(node,true,"text",slideLayoutClrOvride,slideMasterContent,themeContent); } throw new NotImplementedException(); } public string GetVerticalAlign(XmlNode node, XmlNode slideLayoutSpNode, XmlNode slideMasterSpNode ) { XmlDocument doc = new XmlDocument(); doc.LoadXml(node.OuterXml); XmlNode anchor = doc.GetTextByPath("//p:txBody/a:bodyPr/@anchor"); if (anchor == null) { if (slideLayoutSpNode != null) { doc.LoadXml(slideLayoutSpNode.OuterXml); anchor = doc.GetTextByPath("//p:txBody/a:bodyPr/@anchor"); } if (anchor == null && slideMasterSpNode != null) { doc.LoadXml(slideMasterSpNode.OuterXml); anchor = doc.GetTextByPath("//p:txBody/a:bodyPr/@anchor"); } } if (anchor != null) { return anchor.Value.Equals("ctr") ? "v-mid" : anchor.Value.Equals("b") ? "v-down" : "v-up"; } else { return "v-up"; } } public string GetHorizontalAlign(XmlNode node, XmlNode slideLayoutSpNode, XmlNode slideMasterSpNode, XmlNode typeNode, XmlNode slideMasterTextStyles) { XmlDocument doc = new XmlDocument(); doc.LoadXml(node.OuterXml); XmlNode algn = doc.GetTextByPath("//a:pPr/@algn"); if (algn == null) { if (slideLayoutSpNode != null) { doc.LoadXml(slideLayoutSpNode.OuterXml); algn = doc.GetTextByPath("//p:txBody/a:p/a:pPr/@algn"); } if (algn == null && slideMasterSpNode != null) { doc.LoadXml(slideMasterSpNode.OuterXml); algn = doc.GetTextByPath("//p:txBody/a:p/a:pPr/@algn"); } if (algn == null && typeNode != null) { switch (typeNode.Value) { case "title": case "subTitle": case "ctrTitle": //doc.LoadXml(slideMasterStyle.TypeTable.OuterXml); doc.LoadXml(slideMasterTextStyles.OuterXml); algn = doc.GetTextByPath("//p:titleStyle/a:lvl1pPr/@algn"); break; case "body": doc.LoadXml(slideMasterTextStyles.OuterXml); algn = doc.GetTextByPath("//p:bodyStyle/a:lvl1pPr/@algn"); break; default: // doc.LoadXml(slideMasterStyle.TypeTable.OuterXml); doc.LoadXml(slideMasterTextStyles.OuterXml); algn = doc.GetTextByPath("//p:otherStyle/a:lvl1pPr/@algn"); break; } } } if (algn == null) { if (typeNode == null) { return "h-left"; } if (typeNode.Value.Equals("title") || typeNode.Value.Equals("subTitle") || typeNode.Value.Equals("ctrTitle")) { return "h-mid"; } else if (typeNode.Value == "sldNum") { return "h-right"; } else if (typeNode.Value.Equals("body")) { return "h-left"; } } return algn.Value.Equals("ctr") ? "h-mid" : algn.Value.Equals("r") ? "h-right" : "h-left"; } /// /// 幻灯片 背景色填充 /// /// /// /// /// /// /// public async Task GetSlideBackgroundFill(XmlNode slideContent, int index, WarpObj warpObj) { var bgPr = slideContent.GetTextByPath("p:sld/p:cSld/p:bg/p:bgPr"); var bgRef = slideContent.GetTextByPath("p:sld/p:cSld/p:bg/p:bgRef"); if (bgPr != null) { var bgFillTyp = ShapeHelper.GetFillType(bgPr); if (bgFillTyp == "SOLID_FILL") { var sldFill = bgPr.GetTextByPath("a:solidFill"); var bgColor = ShapeHelper.GetSolidFill(sldFill, slideLayoutClrOvride, warpObj.slideMasterContent, warpObj.themeContent); bgColor = PowerPointHelper.ColorToning(sldFill.OuterXml, bgColor); return new Fill { Type = 1, Color = bgColor }; } else if (bgFillTyp == "GRADIENT_FILL") { return ShapeHelper.GetBgGradientFill(bgPr, null, slideLayoutClrOvride, warpObj.slideMasterContent, warpObj.themeContent); } else if (bgFillTyp == "PIC_FILL") { return await GetPicFill("slideBg", bgPr.GetTextByPath("a:blipFill"), warpObj); } } else if (bgRef != null) { string phClr = ShapeHelper.GetSolidFill(bgRef, slideLayoutClrOvride, warpObj.slideMasterContent, warpObj.themeContent); phClr = PowerPointHelper.ColorToning(bgRef.OuterXml, phClr); var idx = bgRef.GetTextByPath("@idx"); if (idx != null) { int value = int.Parse(idx.Value); if (value == 0 || value == 1000) { return new Fill { Type = 0 }; //no background } else if (value > 0 && value < 1000) { //fillStyleLst in themeContent //themeContent["a:fmtScheme"]["a:fillStyleLst"] //bgcolor = "background: red;"; } else if (value > 1000) { var trueIdx = value - 1000; var bgFillLst = warpObj.themeContent.GetTextByPath("a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst"); if (bgFillLst != null) { XmlNodeList nodeList = bgFillLst.ChildNodes; if (trueIdx < nodeList.Count) { string type= ShapeHelper.GetFillType(nodeList[trueIdx - 1]); if (type.Equals("SOLID_FILL")) { if (string.IsNullOrEmpty(phClr)) { phClr = ShapeHelper.GetSolidFill(nodeList[trueIdx - 1], slideLayoutClrOvride, warpObj.slideMasterContent, warpObj.themeContent); } phClr = PowerPointHelper.ColorToning(nodeList[trueIdx - 1].Value, phClr); return new Fill { Type = 1, Color = phClr }; } else if (type.Equals("GRADIENT_FILL")) { return ShapeHelper.GetBgGradientFill(nodeList[trueIdx - 1], phClr, slideLayoutClrOvride, warpObj.slideMasterContent, warpObj.themeContent); } else if (type.Equals("PIC_FILL")) { return await GetPicFill("slideBg", nodeList[trueIdx - 1].GetTextByPath("a:blipFill"), warpObj); } else { return new Fill { Type = 0 }; } } } } } //var node = bgRef.GetTextByPath(""); //if (bgRef["a:srgbClr"] !== undefined) //{ // phClr = getTextByPathList(bgRef,["a:srgbClr", "attrs", "val"]); //#... //} //else if (bgRef["a:schemeClr"] !== undefined) //{ //a:schemeClr // var schemeClr = getTextByPathList(bgRef,["a:schemeClr", "attrs", "val"]); // phClr = getSchemeColorFromTheme("a:" + schemeClr, slideMasterContent); //#... // //console.log("schemeClr",schemeClr,"phClr=",phClr) //} } else { bgPr =warpObj. slideLayoutContent.GetTextByPath("p:sldLayout/p:cSld/p:bg/p:bgPr"); bgRef = warpObj. slideLayoutContent.GetTextByPath("p:sldLayout/p:cSld/p:bg/p:bgRef"); if (bgPr != null) { var bgFillTyp = ShapeHelper.GetFillType(bgPr); if (bgFillTyp == "SOLID_FILL") { var sldFill = bgPr.GetTextByPath("a:solidFill"); var bgColor = ShapeHelper.GetSolidFill(sldFill, slideLayoutClrOvride, warpObj.slideMasterContent, warpObj.themeContent); bgColor = PowerPointHelper.ColorToning(sldFill.OuterXml, bgColor); return new Fill { Type = 1, Color = bgColor }; } else if (bgFillTyp == "GRADIENT_FILL") { return ShapeHelper.GetBgGradientFill(bgPr, null, slideLayoutClrOvride, warpObj.slideMasterContent, warpObj.themeContent); } else if (bgFillTyp == "PIC_FILL") { return await GetPicFill("slideBg", bgPr.GetTextByPath("a:blipFill"), warpObj); } } else if (bgRef != null) { string phClr = ShapeHelper.GetSolidFill(bgRef, slideLayoutClrOvride, warpObj.slideMasterContent, warpObj.themeContent); phClr = PowerPointHelper.ColorToning(bgRef.OuterXml, phClr); var idx = bgRef.GetTextByPath("@idx"); if (idx != null) { int value = int.Parse(idx.Value); if (value == 0 || value == 1000) { return new Fill { Type = 0 }; //no background } else if (value > 0 && value < 1000) { //fillStyleLst in themeContent //themeContent["a:fmtScheme"]["a:fillStyleLst"] //bgcolor = "background: red;"; } else if (value > 1000) { var trueIdx = value - 1000; var bgFillLst = warpObj.themeContent.GetTextByPath("a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst"); if (bgFillLst != null) { XmlNodeList nodeList = bgFillLst.ChildNodes; if (trueIdx < nodeList.Count) { string type = ShapeHelper.GetFillType(nodeList[trueIdx - 1]); if (type.Equals("SOLID_FILL")) { if (string.IsNullOrEmpty(phClr)) { phClr = ShapeHelper.GetSolidFill(nodeList[trueIdx - 1], slideLayoutClrOvride, warpObj.slideMasterContent, warpObj.themeContent); } phClr = PowerPointHelper.ColorToning(nodeList[trueIdx - 1].Value, phClr); return new Fill { Type = 1, Color = phClr }; } else if (type.Equals("GRADIENT_FILL")) { return ShapeHelper.GetBgGradientFill(nodeList[trueIdx - 1], phClr, slideLayoutClrOvride, warpObj.slideMasterContent, warpObj.themeContent); } else if (type.Equals("PIC_FILL")) { return await GetPicFill("slideBg", nodeList[trueIdx - 1].GetTextByPath("a:blipFill"), warpObj); } else { return new Fill { Type = 0 }; } } } } } } } return null; } public async Task GetPicFill(string type, XmlNode node, WarpObj warpObj) { //Need to test///////////////////////////////////////////// //rId //TODO - Image Properties - Tile, Stretch, or Display Portion of Image //(http://officeopenxml.com/drwPic-tile.php) // var img = ""; var rId = node.GetTextByPath("a:blip/@r:embed");//node["a:blip"]["attrs"]["r:embed"]; Dictionary imgPath = new Dictionary(); if (type == "slideBg") { imgPath = warpObj.slideResObj[rId.Value]; } else if (type == "layoutBg") { imgPath = warpObj.layoutResObj[rId.Value]; } else if (type == "masterBg") { imgPath = warpObj.masterResObj[rId.Value]; } if (imgPath == null) { return null; } //var imgExt = imgPath["type"]; //if (imgExt == "xml") //{ // return null; //} var imgData = warpObj.zip.GetTextByPath("//pkg:part[@pkg:name='" + imgPath["target"] + "']"); if (imgData != null) { AzureBlobModel model = await SaveBase64ToBolob(imgData.InnerText, imgData.GetTextByPath("@pkg:contentType").Value, fileShaCode + "/imgs", null); return new Fill { Type = 3, Image = model.BlobUrl }; } else { return null; } // var imgArrayBuffer = warpObj.zip.GetTextByPath(imgPath).Value.asArrayBuffer(); //var imgMimeType = GetMimeType(imgExt); //img = "data:" + imgMimeType + ";base64," + base64ArrayBuffer(imgArrayBuffer); } public async Task GetShapeFill(XmlNode node, WarpObj warpObj) { // 1. presentationML // p:spPr/ [a:noFill, solidFill, gradFill, blipFill, pattFill, grpFill] // From slide //Fill Type: //console.log("ShapeFill: ", node) var fillType = ShapeHelper.GetFillType(node.GetTextByPath("p:spPr")); Fill fill =null; //0 if (fillType == "NO_FILL") { fill = new Fill { Type = 0, HtmlText = "background-color: initial;", SvgText = "node" }; //return isSvgMode ? "none" : "background-color: initial;"; } //1纯色填充 else if (fillType == "SOLID_FILL") { XmlNode shpFill = node.GetTextByPath("p:spPr/a:solidFill");// node["p:spPr"]["a:solidFill"]; string color = ShapeHelper.GetSolidFill(shpFill, slideLayoutClrOvride, warpObj.slideMasterContent, warpObj.themeContent); fill = new Fill { Type = 1, Color = color, }; } //2渐变色填充 else if (fillType == "GRADIENT_FILL") { var shpFill = node.GetTextByPath("p:spPr/a:gradFill");// node["p:spPr"]["a:gradFill"]; // fillColor = GetSolidFill(shpFill); fill = ShapeHelper.GetGradientFill(shpFill, slideLayoutClrOvride, warpObj.slideMasterContent, warpObj.themeContent); //console.log("shpFill",shpFill,grndColor.color) }//3图片 纹理填充 else if (fillType == "PIC_FILL") { var shpFill = node.GetTextByPath("p:spPr/a:blipFill"); //node["p:spPr"]["a:blipFill"]; fill = await GetPicFill("slideBg", shpFill, warpObj); }//4 图案填充 else if (fillType == "PATTERN_FILL") { /* * * */ var shpFill = node.GetTextByPath("p:spPr/a:pattFill");// node["p:spPr"]["a:pattFill"]; fill = ShapeHelper.GetPatternFill(shpFill, slideLayoutClrOvride, warpObj.slideMasterContent, warpObj.themeContent); } // 2. drawingML namespace if (fill == null) { var clrName = node.GetTextByPath("p:style/a:fillRef"); if (clrName != null) { fillType = "SOLID_FILL"; } string color = ShapeHelper.GetSolidFill(clrName, slideLayoutClrOvride, warpObj.slideMasterContent, warpObj.themeContent); color= PowerPointHelper.ColorToning(clrName.OuterXml,color); fill = new Fill { Type = 1, Color = color, }; } if (fill != null) { if (fillType == "GRADIENT_FILL") { //if (isSvgMode) //{ // // console.log("GRADIENT_FILL color", fillColor.color[0]) // return fill; //} //else //{ var colorAry = fill.gradColor; var rot = fill.Rot; var bgcolor = "background: linear-gradient(" + rot + "deg,"; for (var i = 0; i < colorAry.Count; i++) { if (i == colorAry.Count - 1) { bgcolor += colorAry[i] + ");"; } else { bgcolor += colorAry[i] + ", "; } } fill.HtmlText = bgcolor; return fill; // } } else if (fillType == "PIC_FILL") { //if (isSvgMode) //{ // return fill; //} //else //{ fill.HtmlText = "background-image:url(" + fill.Image + ");"; return fill; // } } else { Console.WriteLine("#" + fill.Color); //if (isSvgMode) //{ // var color = new colz.Color(fill); // fill = color.rgb.toString(); fill.HtmlText = "background-color: #" + fill.Color + ";"; return fill; //} //else //{ // //console.log(node,"fillColor: ",fillColor,"fillType: ",fillType,"isSvgMode: ",isSvgMode) // return fill; //} } } else { //if (isSvgMode) //{ // return fill; //} //else //{ fill.SvgText = "none"; fill.HtmlText = "background-color: initial;"; return fill; // } } } public async Task GetThumbnailModel(XmlDocument xdoc, string shaCode) { var thumbnailNode = xdoc.GetTextByPath("//pkg:part[@pkg:name='/docProps/thumbnail.jpeg']"); if (thumbnailNode != null) { var contentType = thumbnailNode.GetTextByPath("@pkg:contentType"); var thumbnail = thumbnailNode.InnerText; return await SaveBase64ToBolob(thumbnail, contentType.Value, shaCode + "/imgs", "thumbnail"); } return null; } public XmlNode LoadTheme(XmlDocument xdoc) { var themeRelationship = xdoc.GetTextByPath("//pkg:part[@pkg:name='/ppt/_rels/presentation.xml.rels']/pkg:xmlData/rel:Relationships/rel:Relationship[@Type='http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme']/@Target"); // "/ppt/theme/theme1.xml" string themeURI = "/ppt/" + themeRelationship.Value; return xdoc.GetTextByPath("//pkg:part[@pkg:name='" + themeURI + "']"); } public async Task SaveBase64ToBolob(string data, string contentType, string FolderName, string fileName) { string fileExt; if (ContentTypeDict.extdict.TryGetValue(contentType, out string ext)) { fileExt = ext; } else { //解决多种扩展名不能获取的 string[] sp = contentType.Split("/"); fileExt = sp[sp.Length - 1]; sp = fileExt.Split("+"); fileExt = "." + sp[sp.Length - 1]; } //data:image/jpeg;base64, if (string.IsNullOrEmpty(fileName)) { Stream stream = new MemoryStream(Convert.FromBase64String(data)); string shaCode = ShaHashHelper.GetSHA1(stream); fileName = shaCode + fileExt; } else { if (fileName.Split(".").Length == 1) { fileName += fileExt; } } Stream streamBlob = new MemoryStream(Convert.FromBase64String(data)); AzureBlobModel model = await azureBlobDBRepository.UploadFileByFolder(streamBlob, FolderName, fileName, "pptx", false); return model; } public async Task ProcessPicNode(XmlNode node, int order, WarpObj warpObj) { var xfrmList = "p:spPr/a:xfrm"; var xfrmNode = node.GetTextByPath(xfrmList); Media media = new Media() { Type = "Media" }; var id = node.GetTextByPath("p:nvPicPr/p:cNvPr/@id"); XmlNode slideLayoutSpNode = ShapeHelper.GetNodesTable(id, null, null, warpObj, "Layout"); XmlNode slideMasterSpNode = ShapeHelper.GetNodesTable(id, null, null, warpObj, "Master"); XmlNode slideLayoutXfrmNode = null; if (slideLayoutSpNode != null) { slideLayoutXfrmNode = slideLayoutSpNode.GetTextByPath(xfrmList); } XmlNode slideMasterXfrmNode = null; if (slideMasterSpNode != null) { slideMasterXfrmNode = slideMasterSpNode.GetTextByPath(xfrmList); } double rotate = 0; var rotateNode = node.GetTextByPath("p:spPr/a:xfrm/@rot"); if (rotateNode != null) { rotate = ShapeHelper.AngleToDegrees(rotateNode); } Fill fill = await GetShapeFill(node, warpObj); media.Fill = fill; Border border = ShapeHelper.GetBorder(node, true, "shape", slideLayoutClrOvride, warpObj.slideMasterContent, warpObj.themeContent); media.Border = border; Position position = ShapeHelper.GetPosition(xfrmNode, slideLayoutXfrmNode, slideMasterXfrmNode); media.Position = position; position.Rot = rotate; var rtrnData = ""; //image var rid = node.GetTextByPath("p:blipFill/a:blip/@r:embed"); if (rid != null) { var imgName = warpObj.slideResObj[rid.Value]["target"]; Console.WriteLine(imgName); if (!string.IsNullOrEmpty(imgName)) { var imgData = warpObj.zip.GetTextByPath("//pkg:part[@pkg:name='" + imgName + "']"); var imgFileExt = imgData.GetTextByPath("@pkg:contentType"); AzureBlobModel imgModel = await SaveBase64ToBolob(imgData.InnerText, imgFileExt.Value, fileShaCode + "/imgs", ""); media.Image = imgModel.BlobUrl; media.MediaType = "image"; } } ///////////////////////////////////////Amir////////////////////////////// //video var vdoNode = node.GetTextByPath("p:nvPicPr/p:nvPr/a:videoFile/@r:link"); if (vdoNode != null) { string vdoFile = warpObj.slideResObj[vdoNode.Value]["target"]; if (!string.IsNullOrEmpty(vdoFile)) { var videoData = warpObj.zip.GetTextByPath("//pkg:part[@pkg:name='" + vdoFile + "']"); var contentType = videoData.GetTextByPath("@pkg:contentType"); AzureBlobModel vdoModel = await SaveBase64ToBolob(videoData.InnerText, contentType.Value, fileShaCode + "/media", ""); media.Url = vdoModel.BlobUrl; media.MediaType = "video"; } /// 处理为AzureBlob 上传 // vdoMimeType = getMimeType(vdoFileExt); // blob = new Blob([uInt8Array], { // type: vdoMimeType // }); // vdoBlob = URL.createObjectURL(blob); } //audio var audioNode = node.GetTextByPath("p:nvPicPr/p:nvPr/a:audioFile/@r:link"); // var audioObjc; if (audioNode != null) { string audioFile = warpObj.slideResObj[audioNode.Value]["target"]; if (!string.IsNullOrEmpty(audioFile)) { var audioData = warpObj.zip.GetTextByPath("//pkg:part[@pkg:name='" + audioFile + "']"); var contentType = audioData.GetTextByPath("@pkg:contentType"); AzureBlobModel adoModel = await SaveBase64ToBolob(audioData.InnerText, contentType.Value, fileShaCode + "/media", ""); media.Url = adoModel.BlobUrl; media.MediaType = "audio"; } //uInt8ArrayAudio = zip.file(audioFile).asArrayBuffer(); //blobAudio = new Blob([uInt8ArrayAudio]); //audioBlob = URL.createObjectURL(blobAudio); //var cx = parseInt(xfrmNode["a:ext"]["attrs"]["cx"]) * 20; //var cy = xfrmNode["a:ext"]["attrs"]["cy"]; //var x = parseInt(xfrmNode["a:off"]["attrs"]["x"]) / 2.5; //var y = xfrmNode["a:off"]["attrs"]["y"]; //audioObjc = { // "a:ext" : { // "attrs":{ // "cx":cx, // "cy":cy // } // }, // "a:off":{ // "attrs":{ // "x":x, // "y":y // } // } //} // mediaSupportFlag = true; } //console.log(node) ////////////////////////////////////////////////////////////////////////// //mimeType = imgFileExt; //rtrnData = "
"; //if ((vdoNode ==null && audioNode ==null) || !mediaSupportFlag) //{ // rtrnData += ""; //} //else if ((vdoNode !=null || audioNode !=null) && mediaSupportFlag) //{ // if (vdoNode !=null) // { // rtrnData += ""; // } // if (audioNode !=null) // { // rtrnData += ""; // } //} rtrnData += "This media file Not supported by HTML5"; //if ((vdoNode != null || audioNode != null) && mediaSupportFlag) //{ // //console.log("Founded supported media file but media process disabled (mediaProcess=false)"); //} rtrnData += "
"; //console.log(rtrnData) return media; } } }