Procházet zdrojové kódy

添加单个元素处理

黄贺彬 před 5 roky
rodič
revize
6bb2e00288

+ 87 - 0
TEAMModelOS.Service/Services/PowerPoint/Implement/ShapeGenerator.cs

@@ -267,8 +267,95 @@ namespace HiTeachCC.Service.PowerPoint.Implement
                 layoutResObj,
                 masterResObj
             };
+            var bgColor = GetSlideBackgroundFill(slideContent, slideLayoutContent, slideMasterContent, warpObj);
+            var result = "<div class='slide' style='width:" + slideSize.width + "px; height:" + slideSize.height + "px;" + bgColor + "'>";
+            //result += "<div>"+getBackgroundShapes(slideContent, slideLayoutContent, slideMasterContent,warpObj) + "</div>" - TODO
+            foreach (XmlNode node in nodes)
+            {
+                result += ProcessNodesInSlide(node.Name, node, warpObj);
+            }
             return "";
         }
+
+        private dynamic ProcessNodesInSlide(string nodeKey, XmlNode nodeValue, dynamic warpObj)
+        {
+            var result = "";
+
+            switch (nodeKey)
+            {
+                case "p:sp":    // Shape, Text
+                    result = ProcessSpNode(nodeValue, warpObj);
+                    break;
+                case "p:cxnSp":    // Shape, Text (with connection)
+                    result = ProcessCxnSpNode(nodeValue, warpObj);
+                    break;
+                case "p:pic":    // Picture
+                    result = ProcessPicNode(nodeValue, warpObj);
+                    break;
+                case "p:graphicFrame":    // Chart, Diagram, Table
+                    result = ProcessGraphicFrameNode(nodeValue, warpObj);
+                    break;
+                case "p:grpSp":
+                    result = ProcessGroupSpNode(nodeValue, warpObj);
+                    break;
+                case "mc:AlternateContent": //Equations and formulas as Image
+                    var mcFallbackNode = nodeValue.GetTextByPath("mc:Fallback/p:sp");
+                    result = ProcessSpNode(mcFallbackNode, warpObj);
+                    break;
+                default:
+                    break;
+            }
+            return result;
+        }
+
+        private string ProcessGroupSpNode(XmlNode node, dynamic 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 order = node["attrs"]["order"];
+            var result = "<div class='block group' style='z-index: " + order + "; top: " + (y - chy) + "px; left: " + (x - chx) + "px; width: " + (cx - chcx) + "px; height: " + (cy - chcy) + "px;'>";
+
+            // Procsee all child nodes
+            var nodes = node.ChildNodes;
+            foreach(XmlNode nd in nodes)
+            {
+                result += ProcessNodesInSlide(nd.Name, nd, warpObj);
+            }
+
+            result += "</div>";
+
+            return result;
+        }
+
+        private string ProcessGraphicFrameNode(XmlNode nodeValue, dynamic warpObj)
+        {
+            throw new NotImplementedException();
+        }
+
+        private string ProcessPicNode(XmlNode nodeValue, dynamic warpObj)
+        {
+            throw new NotImplementedException();
+        }
+
+        private string ProcessCxnSpNode(XmlNode nodeValue, dynamic warpObj)
+        {
+            throw new NotImplementedException();
+        }
+
+        private string ProcessSpNode(XmlNode nodeValue, dynamic warpObj)
+        {
+            throw new NotImplementedException();
+        }
+
         private Fill GetSlideBackgroundFill(XmlNode slideContent ,XmlNode slideLayoutContent  , XmlNode slideMasterContent , dynamic 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");