|
@@ -71,6 +71,8 @@ namespace HiTeachCC.Service.PowerPoint.Implement
|
|
|
double x = presentation.SlideSize.Cx * inchpixel / pxBase;
|
|
|
double y = presentation.SlideSize.Cy * inchpixel / pxBase;
|
|
|
List<HiTeachCC.Model.PowerPoint.Slide> slides = new List<HiTeachCC.Model.PowerPoint.Slide>();
|
|
|
+ string slideMasterXml = slideMaster.OuterXml;
|
|
|
+ Style slideMasterStyle = PowerPointHelper.IndexNodes(slideMasterXml);
|
|
|
if (presentation.SlideIdList != null)
|
|
|
{
|
|
|
|
|
@@ -86,7 +88,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
|
|
|
//获取当前页 PPT 的所有元素
|
|
|
// slide.Items = GetSlideElement(slidePart, theme, colorMap);
|
|
|
//slide.Xml = slidePart.Slide.OuterXml;
|
|
|
- GetSlideElement(slidePart, slideMaster, slideMasterColors, theme);
|
|
|
+ GetSlideElement(slidePart, slideMaster, slideMasterColors, theme, slideMasterStyle);
|
|
|
slides.Add(slide);
|
|
|
pageSize++;
|
|
|
}
|
|
@@ -97,15 +99,23 @@ namespace HiTeachCC.Service.PowerPoint.Implement
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
- public HiTeachCC.Model.PowerPoint.Slide GetSlideElement(SlidePart slidePart, SlideMaster slideMaster, Dictionary<string, string> slideMasterColors, Theme theme)
|
|
|
+ /// <summary>
|
|
|
+ /// 处理图形非可视化信息
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="slidePart"></param>
|
|
|
+ /// <param name="slideMaster"></param>
|
|
|
+ /// <param name="slideMasterColors"></param>
|
|
|
+ /// <param name="theme"></param>
|
|
|
+ /// <param name="slideMasterStyle"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public HiTeachCC.Model.PowerPoint.Slide GetSlideElement(SlidePart slidePart, SlideMaster slideMaster, Dictionary<string, string> slideMasterColors, Theme theme, Style slideMasterStyle)
|
|
|
{
|
|
|
//slidePart.SlideLayoutPart;
|
|
|
string bgColor = PowerPointHelper.GetSlideBackgroundFill(slidePart, slideMaster, slideMasterColors, theme);
|
|
|
- string slideLayoutXml = slidePart.SlideLayoutPart.SlideLayout.OuterXml;
|
|
|
+ string slideLayoutXml = slidePart.SlideLayoutPart.SlideLayout.OuterXml;
|
|
|
+
|
|
|
+ var slideLayoutStyle = PowerPointHelper.IndexNodes(slideLayoutXml);
|
|
|
|
|
|
- PowerPointHelper.IndexNodes(slideLayoutXml);
|
|
|
- string slideMasterXml = slideMaster.OuterXml;
|
|
|
- PowerPointHelper.IndexNodes(slideMasterXml);
|
|
|
var shapeTrees = from shap in slidePart.Slide.Descendants<ShapeTree>() select shap;
|
|
|
if (shapeTrees.Count() > 0 && shapeTrees.First().ChildElements.Count > 0)
|
|
|
{
|
|
@@ -127,48 +137,83 @@ namespace HiTeachCC.Service.PowerPoint.Implement
|
|
|
int index = 0;
|
|
|
foreach (OpenXmlElement element in openXmlElements)
|
|
|
{
|
|
|
- ProcessNodesInSlide(element, slidePart, slideMaster, slideMasterColors, index, position);
|
|
|
+ ProcessNodesInSlide(element, slidePart, slideMaster, slideMasterColors, index, position, slideLayoutStyle, slideMasterStyle);
|
|
|
index++;
|
|
|
}
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
- public string ProcessNodesInSlide(OpenXmlElement element, SlidePart slidePart, SlideMaster slideMaster, Dictionary<string, string> slideMasterColors, int index, HiTeachCC.Model.PowerPoint.Position position)
|
|
|
+ /// <summary>
|
|
|
+ /// 单个元素分类
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="element"></param>
|
|
|
+ /// <param name="slidePart"></param>
|
|
|
+ /// <param name="slideMaster"></param>
|
|
|
+ /// <param name="slideMasterColors"></param>
|
|
|
+ /// <param name="index"></param>
|
|
|
+ /// <param name="position"></param>
|
|
|
+ /// <param name="slideLayoutStyle"></param>
|
|
|
+ /// <param name="slideMasterStyle"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public string ProcessNodesInSlide(OpenXmlElement element,
|
|
|
+ SlidePart slidePart,
|
|
|
+ SlideMaster slideMaster,
|
|
|
+ Dictionary<string, string> slideMasterColors,
|
|
|
+ int index,
|
|
|
+ HiTeachCC.Model.PowerPoint.Position position,
|
|
|
+ Style slideLayoutStyle,
|
|
|
+ Style slideMasterStyle)
|
|
|
{
|
|
|
if (element is DocumentFormat.OpenXml.Presentation.Shape sp)//p:sp
|
|
|
{
|
|
|
// pptElement = ShapeConvert(shape, theme, colorMap, index);
|
|
|
- ProcessSpNode(sp, slidePart, slideMaster, slideMasterColors, index, position);
|
|
|
+ ProcessSpNode(sp, slidePart, slideMaster, slideMasterColors, index, position, slideLayoutStyle, slideMasterStyle);
|
|
|
}
|
|
|
else if (element is DocumentFormat.OpenXml.Presentation.Picture pic)//p:pic
|
|
|
{
|
|
|
- ProcessPicNode(pic, slidePart, slideMaster, slideMasterColors, index, position);
|
|
|
+ ProcessPicNode(pic, slidePart, slideMaster, slideMasterColors, index, position, slideLayoutStyle, slideMasterStyle);
|
|
|
// pptElement = PictureConvert(picture, theme, colorMap, slidePart, index);
|
|
|
}
|
|
|
else if (element is DocumentFormat.OpenXml.AlternateContent mc)//mc:alternatecontent
|
|
|
{
|
|
|
- ProcessMcNode(mc, slidePart, slideMaster, slideMasterColors, index, position);
|
|
|
+ ProcessMcNode(mc, slidePart, slideMaster, slideMasterColors, index, position, slideLayoutStyle, slideMasterStyle);
|
|
|
/// pptElement = AlternateContentConvert(content, theme, colorMap, slidePart, index);
|
|
|
}
|
|
|
else if (element is DocumentFormat.OpenXml.Presentation.GraphicFrame graphicFrame)//p:graphicFrame
|
|
|
{
|
|
|
- ProcessGraphicFrameNode(graphicFrame, slidePart, slideMaster, slideMasterColors, index, position);
|
|
|
+ ProcessGraphicFrameNode(graphicFrame, slidePart, slideMaster, slideMasterColors, index, position, slideLayoutStyle, slideMasterStyle);
|
|
|
/// pptElement = GraphicFrameConvert(graphicFrame, theme, colorMap, index);
|
|
|
}
|
|
|
else if (element is DocumentFormat.OpenXml.Presentation.GroupShape grpSp)//p:grpSp
|
|
|
{
|
|
|
- ProcessGrpSpNode(grpSp, slidePart, slideMaster, slideMasterColors, index, position);
|
|
|
+ ProcessGrpSpNode(grpSp, slidePart, slideMaster, slideMasterColors, index, position, slideLayoutStyle, slideMasterStyle);
|
|
|
/// pptElement = GroupShapeConvert(groupShape, theme, colorMap, index);
|
|
|
}
|
|
|
else if (element is DocumentFormat.OpenXml.Presentation.ConnectionShape cxnSp) // p:cxnSp
|
|
|
{
|
|
|
- ProcessCxnSpNode(cxnSp, slidePart, slideMaster, slideMasterColors, index, position);
|
|
|
+ ProcessCxnSpNode(cxnSp, slidePart, slideMaster, slideMasterColors, index, position, slideLayoutStyle, slideMasterStyle);
|
|
|
/// pptElement = ConnectionShapeConvert(connectionShape, theme, colorMap, index);
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 处理Shape的样式 位置信息
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="element"></param>
|
|
|
+ /// <param name="slidePart"></param>
|
|
|
+ /// <param name="slideMaster"></param>
|
|
|
+ /// <param name="colors"></param>
|
|
|
+ /// <param name="index"></param>
|
|
|
+ /// <param name="position"></param>
|
|
|
+ /// <param name="slideLayoutStyle"></param>
|
|
|
+ /// <param name="slideMasterStyle"></param>
|
|
|
+ /// <returns></returns>
|
|
|
public string ProcessSpNode(DocumentFormat.OpenXml.Presentation.Shape element, SlidePart slidePart, SlideMaster slideMaster,
|
|
|
- Dictionary<string, string> colors, int index, HiTeachCC.Model.PowerPoint.Position position)
|
|
|
+ Dictionary<string, string> colors, int index, HiTeachCC.Model.PowerPoint.Position position,
|
|
|
+ Style slideLayoutStyle,
|
|
|
+ Style slideMasterStyle)
|
|
|
{
|
|
|
HiTeachCC.Model.PowerPoint.Shape shape = new HiTeachCC.Model.PowerPoint.Shape();
|
|
|
HiTeachCC.Model.PowerPoint.Position spPosition = null;
|
|
@@ -185,12 +230,85 @@ namespace HiTeachCC.Service.PowerPoint.Implement
|
|
|
doc.LoadXml(element.OuterXml);
|
|
|
//获取当前节点的相关样式属性
|
|
|
XmlNode idNode = doc.SelectSingleNode("//p:nvSpPr/p:cNvPr/@id", PowerPointHelper.GetXmlnsManager(doc.NameTable));
|
|
|
- XmlNode NameNode = doc.SelectSingleNode("//p:nvSpPr/p:cNvPr/@name", PowerPointHelper.GetXmlnsManager(doc.NameTable));
|
|
|
+ XmlNode nameNode = doc.SelectSingleNode("//p:nvSpPr/p:cNvPr/@name", PowerPointHelper.GetXmlnsManager(doc.NameTable));
|
|
|
XmlNode idxNode = doc.SelectSingleNode("//p:nvSpPr/p:nvPr/p:ph/@idx", PowerPointHelper.GetXmlnsManager(doc.NameTable));
|
|
|
XmlNode typeNode = doc.SelectSingleNode("//p:nvSpPr/p:nvPr/p:ph/@type", PowerPointHelper.GetXmlnsManager(doc.NameTable));
|
|
|
+ XmlDocument slideLayoutSpNode = null;
|
|
|
+ XmlDocument slideMasterSpNode = null;
|
|
|
+ if (typeNode != null)
|
|
|
+ {
|
|
|
+ slideLayoutSpNode = slideLayoutStyle.TypeTable;
|
|
|
+ slideMasterSpNode = slideMasterStyle.TypeTable;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (idxNode != null)
|
|
|
+ {
|
|
|
+ slideLayoutSpNode = slideLayoutStyle.IdxTable;
|
|
|
+ slideMasterSpNode = slideMasterStyle.IdxTable;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (typeNode == null)
|
|
|
+ {
|
|
|
+ typeNode = slideLayoutSpNode.SelectSingleNode("//p:nvSpPr/p:nvPr/p:ph/@type", PowerPointHelper.GetXmlnsManager(slideLayoutSpNode.NameTable));
|
|
|
+ //getTextByPathList(slideLayoutSpNode, ["p:nvSpPr", "p:nvPr", "p:ph", "attrs", "type"]);
|
|
|
+ if (typeNode == null)
|
|
|
+ {
|
|
|
+ typeNode = slideLayoutSpNode.SelectSingleNode("//p:nvSpPr/p:nvPr/p:ph/@type", PowerPointHelper.GetXmlnsManager(slideLayoutSpNode.NameTable));
|
|
|
+ // typeNode = getTextByPathList(slideMasterSpNode, ["p:nvSpPr", "p:nvPr", "p:ph", "attrs", "type"]);
|
|
|
+ }
|
|
|
+ }
|
|
|
return null;
|
|
|
}
|
|
|
+ /// <summary>
|
|
|
+ /// 处理图形的具体信息
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="element"></param>
|
|
|
+ /// <param name="slidePart"></param>
|
|
|
+ /// <param name="slideMaster"></param>
|
|
|
+ /// <param name="colors"></param>
|
|
|
+ /// <param name="index"></param>
|
|
|
+ /// <param name="position"></param>
|
|
|
+ /// <param name="slideLayoutStyle"></param>
|
|
|
+ /// <param name="slideMasterStyle"></param>
|
|
|
+ /// <param name="idNode"></param>
|
|
|
+ /// <param name="nameNode"></param>
|
|
|
+ /// <param name="idxNode"></param>
|
|
|
+ /// <param name="typeNode"></param>
|
|
|
+ /// <param name="slideLayoutSpNode"></param>
|
|
|
+ /// <param name="slideMasterSpNode"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public object GenShape(DocumentFormat.OpenXml.Presentation.Shape element, SlidePart slidePart, SlideMaster slideMaster,
|
|
|
+ Dictionary<string, string> colors, int index, HiTeachCC.Model.PowerPoint.Position position,
|
|
|
+ Style slideLayoutStyle,
|
|
|
+ Style slideMasterStyle, XmlNode idNode, XmlNode nameNode, XmlNode idxNode, XmlNode typeNode, XmlDocument slideLayoutSpNode, XmlDocument slideMasterSpNode)
|
|
|
+ {
|
|
|
+ XmlDocument doc = new XmlDocument();
|
|
|
+ doc.LoadXml(element.OuterXml);
|
|
|
+ XmlNode shapeType = doc.SelectSingleNode("//p:spPr/a:prstGeom/@prst", PowerPointHelper.GetXmlnsManager(doc.NameTable));
|
|
|
+ if (shapeType != null)
|
|
|
+ {
|
|
|
+ //常规图形
|
|
|
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ shapeType = doc.SelectSingleNode("//p:spPr/a:custGeom", PowerPointHelper.GetXmlnsManager(doc.NameTable));
|
|
|
+ if (shapeType != null)
|
|
|
+ {
|
|
|
+ //自定义图形 画线 轨迹
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ //都不是的图形 如页眉 页脚
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 获取位置信息
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="transform2D"></param>
|
|
|
+ /// <returns></returns>
|
|
|
private static HiTeachCC.Model.PowerPoint.Position GetPositionByTransform2D(Transform2D transform2D)
|
|
|
{
|
|
|
HiTeachCC.Model.PowerPoint.Position spPosition = new HiTeachCC.Model.PowerPoint.Position();
|
|
@@ -203,29 +321,110 @@ namespace HiTeachCC.Service.PowerPoint.Implement
|
|
|
spPosition.Cy = transform2D.Extents.Cy == null ? 0 : transform2D.Extents.Cy.Value;
|
|
|
return spPosition;
|
|
|
}
|
|
|
-
|
|
|
- public string ProcessPicNode(DocumentFormat.OpenXml.Presentation.Picture element, SlidePart slidePart, SlideMaster slideMaster, Dictionary<string, string> colors, int index, HiTeachCC.Model.PowerPoint.Position position)
|
|
|
+ /// <summary>
|
|
|
+ /// 处理图片
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="element"></param>
|
|
|
+ /// <param name="slidePart"></param>
|
|
|
+ /// <param name="slideMaster"></param>
|
|
|
+ /// <param name="colors"></param>
|
|
|
+ /// <param name="index"></param>
|
|
|
+ /// <param name="position"></param>
|
|
|
+ /// <param name="slideLayoutStyle"></param>
|
|
|
+ /// <param name="slideMasterStyle"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public string ProcessPicNode(DocumentFormat.OpenXml.Presentation.Picture element,
|
|
|
+ SlidePart slidePart, SlideMaster slideMaster, Dictionary<string, string> colors, int index,
|
|
|
+ HiTeachCC.Model.PowerPoint.Position position,
|
|
|
+ Style slideLayoutStyle,
|
|
|
+ Style slideMasterStyle)
|
|
|
{
|
|
|
return null;
|
|
|
}
|
|
|
- public string ProcessMcNode(DocumentFormat.OpenXml.AlternateContent element, SlidePart slidePart, SlideMaster slideMaster, Dictionary<string, string> colors, int index, HiTeachCC.Model.PowerPoint.Position position)
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 处理包含公式等的信息
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="element"></param>
|
|
|
+ /// <param name="slidePart"></param>
|
|
|
+ /// <param name="slideMaster"></param>
|
|
|
+ /// <param name="colors"></param>
|
|
|
+ /// <param name="index"></param>
|
|
|
+ /// <param name="position"></param>
|
|
|
+ /// <param name="slideLayoutStyle"></param>
|
|
|
+ /// <param name="slideMasterStyle"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public string ProcessMcNode(DocumentFormat.OpenXml.AlternateContent element, SlidePart slidePart,
|
|
|
+ SlideMaster slideMaster, Dictionary<string, string> colors,
|
|
|
+ int index, HiTeachCC.Model.PowerPoint.Position position,
|
|
|
+ Style slideLayoutStyle,
|
|
|
+ Style slideMasterStyle)
|
|
|
{
|
|
|
return null;
|
|
|
}
|
|
|
- public string ProcessGraphicFrameNode(DocumentFormat.OpenXml.Presentation.GraphicFrame element, SlidePart slidePart, SlideMaster slideMaster, Dictionary<string, string> colors, int index, HiTeachCC.Model.PowerPoint.Position position)
|
|
|
+ /// <summary>
|
|
|
+ /// 处理复杂图形的
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="element"></param>
|
|
|
+ /// <param name="slidePart"></param>
|
|
|
+ /// <param name="slideMaster"></param>
|
|
|
+ /// <param name="colors"></param>
|
|
|
+ /// <param name="index"></param>
|
|
|
+ /// <param name="position"></param>
|
|
|
+ /// <param name="slideLayoutStyle"></param>
|
|
|
+ /// <param name="slideMasterStyle"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public string ProcessGraphicFrameNode(DocumentFormat.OpenXml.Presentation.GraphicFrame element,
|
|
|
+ SlidePart slidePart, SlideMaster slideMaster, Dictionary<string, string> colors,
|
|
|
+ int index, HiTeachCC.Model.PowerPoint.Position position,
|
|
|
+ Style slideLayoutStyle,
|
|
|
+ Style slideMasterStyle)
|
|
|
{
|
|
|
return null;
|
|
|
}
|
|
|
- public string ProcessGrpSpNode(DocumentFormat.OpenXml.Presentation.GroupShape element, SlidePart slidePart, SlideMaster slideMaster, Dictionary<string, string> colors, int index, HiTeachCC.Model.PowerPoint.Position position)
|
|
|
+ /// <summary>
|
|
|
+ /// 处理组合图形
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="element"></param>
|
|
|
+ /// <param name="slidePart"></param>
|
|
|
+ /// <param name="slideMaster"></param>
|
|
|
+ /// <param name="colors"></param>
|
|
|
+ /// <param name="index"></param>
|
|
|
+ /// <param name="position"></param>
|
|
|
+ /// <param name="slideLayoutStyle"></param>
|
|
|
+ /// <param name="slideMasterStyle"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public string ProcessGrpSpNode(DocumentFormat.OpenXml.Presentation.GroupShape element, SlidePart slidePart,
|
|
|
+ SlideMaster slideMaster, Dictionary<string, string> colors, int index,
|
|
|
+ HiTeachCC.Model.PowerPoint.Position position,
|
|
|
+ Style slideLayoutStyle,
|
|
|
+ Style slideMasterStyle)
|
|
|
{
|
|
|
var shapes = from shap in element.Descendants<DocumentFormat.OpenXml.Presentation.Shape>() select shap;
|
|
|
foreach (var shape in shapes)
|
|
|
{
|
|
|
- string s = ProcessNodesInSlide(shape, slidePart, slideMaster, colors, index, position);
|
|
|
+ string s = ProcessNodesInSlide(shape, slidePart, slideMaster, colors, index, position, slideLayoutStyle, slideMasterStyle);
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
- public string ProcessCxnSpNode(DocumentFormat.OpenXml.Presentation.ConnectionShape element, SlidePart slidePart, SlideMaster slideMaster, Dictionary<string, string> colors, int index, HiTeachCC.Model.PowerPoint.Position position)
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 处理连接线的信息
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="element"></param>
|
|
|
+ /// <param name="slidePart"></param>
|
|
|
+ /// <param name="slideMaster"></param>
|
|
|
+ /// <param name="colors"></param>
|
|
|
+ /// <param name="index"></param>
|
|
|
+ /// <param name="position"></param>
|
|
|
+ /// <param name="slideLayoutStyle"></param>
|
|
|
+ /// <param name="slideMasterStyle"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public string ProcessCxnSpNode(DocumentFormat.OpenXml.Presentation.ConnectionShape element,
|
|
|
+ SlidePart slidePart, SlideMaster slideMaster, Dictionary<string, string> colors,
|
|
|
+ int index, HiTeachCC.Model.PowerPoint.Position position,
|
|
|
+ Style slideLayoutStyle,
|
|
|
+ Style slideMasterStyle)
|
|
|
{
|
|
|
return null;
|
|
|
}
|