public void Apply(PictureDescriptor pict) { ImagePart imgPart = copyPicture(pict.BlipStoreEntry); if (imgPart != null) { Shape shape = (Shape)pict.ShapeContainer.Children[0]; List <ShapeOptions.OptionEntry> options = pict.ShapeContainer.ExtractOptions(); //v:shapetype PictureFrameType type = new PictureFrameType(); type.Convert(new VMLShapeTypeMapping(_writer)); //v:shape _writer.WriteStartElement("v", "shape", OpenXmlNamespaces.VectorML); _writer.WriteAttributeString("type", "#" + VMLShapeTypeMapping.GenerateTypeId(type)); StringBuilder style = new StringBuilder(); double xScaling = pict.mx / 1000.0; double yScaling = pict.my / 1000.0; TwipsValue width = new TwipsValue(pict.dxaGoal * xScaling); TwipsValue height = new TwipsValue(pict.dyaGoal * yScaling); string widthString = Convert.ToString(width.ToPoints(), CultureInfo.GetCultureInfo("en-US")); string heightString = Convert.ToString(height.ToPoints(), CultureInfo.GetCultureInfo("en-US")); style.Append("width:").Append(widthString).Append("pt;"); style.Append("height:").Append(heightString).Append("pt;"); _writer.WriteAttributeString("style", style.ToString()); _writer.WriteAttributeString("id", pict.ShapeContainer.GetHashCode().ToString()); if (_olePreview) { _writer.WriteAttributeString("o", "ole", OpenXmlNamespaces.Office, ""); } foreach (ShapeOptions.OptionEntry entry in options) { switch (entry.pid) { //BORDERS case ShapeOptions.PropertyId.borderBottomColor: RGBColor bottomColor = new RGBColor((int)entry.op, RGBColor.ByteOrder.RedFirst); _writer.WriteAttributeString("o", "borderbottomcolor", OpenXmlNamespaces.Office, "#" + bottomColor.SixDigitHexCode); break; case ShapeOptions.PropertyId.borderLeftColor: RGBColor leftColor = new RGBColor((int)entry.op, RGBColor.ByteOrder.RedFirst); _writer.WriteAttributeString("o", "borderleftcolor", OpenXmlNamespaces.Office, "#" + leftColor.SixDigitHexCode); break; case ShapeOptions.PropertyId.borderRightColor: RGBColor rightColor = new RGBColor((int)entry.op, RGBColor.ByteOrder.RedFirst); _writer.WriteAttributeString("o", "borderrightcolor", OpenXmlNamespaces.Office, "#" + rightColor.SixDigitHexCode); break; case ShapeOptions.PropertyId.borderTopColor: RGBColor topColor = new RGBColor((int)entry.op, RGBColor.ByteOrder.RedFirst); _writer.WriteAttributeString("o", "bordertopcolor", OpenXmlNamespaces.Office, "#" + topColor.SixDigitHexCode); break; //CROPPING case ShapeOptions.PropertyId.cropFromBottom: //cast to signed integer int cropBottom = (int)entry.op; appendValueAttribute(_imageData, null, "cropbottom", cropBottom + "f", null); break; case ShapeOptions.PropertyId.cropFromLeft: //cast to signed integer int cropLeft = (int)entry.op; appendValueAttribute(_imageData, null, "cropleft", cropLeft + "f", null); break; case ShapeOptions.PropertyId.cropFromRight: //cast to signed integer int cropRight = (int)entry.op; appendValueAttribute(_imageData, null, "cropright", cropRight + "f", null); break; case ShapeOptions.PropertyId.cropFromTop: //cast to signed integer int cropTop = (int)entry.op; appendValueAttribute(_imageData, null, "croptop", cropTop + "f", null); break; } } //v:imageData appendValueAttribute(_imageData, "r", "id", imgPart.RelIdToString, OpenXmlNamespaces.Relationships); appendValueAttribute(_imageData, "o", "title", "", OpenXmlNamespaces.Office); _imageData.WriteTo(_writer); //borders writePictureBorder("bordertop", pict.brcTop); writePictureBorder("borderleft", pict.brcLeft); writePictureBorder("borderbottom", pict.brcBottom); writePictureBorder("borderright", pict.brcRight); //close v:shape _writer.WriteEndElement(); } }
//public void Apply(BlipStoreEntry bse, Shape shape, ShapeOptions options, Rectangle bounds, ConversionContext ctx, string spid, ref Point size) public void Apply(List <ArrayList> VMLEntriesList, ConversionContext ctx) { _ctx = ctx; BlipStoreEntry bse; _writer.WriteStartDocument(); _writer.WriteStartElement("xml"); _writer.WriteStartElement("o", "shapelayout", OpenXmlNamespaces.Office); _writer.WriteAttributeString("v", "ext", OpenXmlNamespaces.VectorML, "edit"); _writer.WriteStartElement("o", "idmap", OpenXmlNamespaces.Office); _writer.WriteAttributeString("v", "ext", OpenXmlNamespaces.VectorML, "edit"); _writer.WriteAttributeString("data", "1079"); _writer.WriteEndElement(); //idmap _writer.WriteEndElement(); //shapelayout //v:shapetype PictureFrameType type = new PictureFrameType(); type.Convert(new VMLShapeTypeMapping(_ctx, _writer)); foreach (ArrayList VMLEntry in VMLEntriesList) { bse = (BlipStoreEntry)VMLEntry[0]; ShapeOptions options = (ShapeOptions)VMLEntry[2]; Rectangle bounds = (Rectangle)VMLEntry[3]; string spid = (string)VMLEntry[4]; Point size = (Point)VMLEntry[5]; ImagePart imgPart = copyPicture(bse, ref size); if (imgPart != null) { //v:shape _writer.WriteStartElement("v", "shape", OpenXmlNamespaces.VectorML); _writer.WriteAttributeString("id", spid); _writer.WriteAttributeString("type", "#" + VMLShapeTypeMapping.GenerateTypeId(type)); StringBuilder style = new StringBuilder(); style.Append("position:absolute;"); style.Append("left:" + (new EmuValue(Utils.MasterCoordToEMU(bounds.Left)).ToPoints()).ToString() + "pt;"); style.Append("top:" + (new EmuValue(Utils.MasterCoordToEMU(bounds.Top)).ToPoints()).ToString() + "pt;"); style.Append("width:").Append(new EmuValue(Utils.MasterCoordToEMU(bounds.Width)).ToPoints()).Append("pt;"); style.Append("height:").Append(new EmuValue(Utils.MasterCoordToEMU(bounds.Height)).ToPoints()).Append("pt;"); _writer.WriteAttributeString("style", style.ToString()); foreach (ShapeOptions.OptionEntry entry in options.OptionsByID.Values) { switch (entry.pid) { //BORDERS case ShapeOptions.PropertyId.borderBottomColor: RGBColor bottomColor = new RGBColor((int)entry.op, RGBColor.ByteOrder.RedFirst); _writer.WriteAttributeString("o", "borderbottomcolor", OpenXmlNamespaces.Office, "#" + bottomColor.SixDigitHexCode); break; case ShapeOptions.PropertyId.borderLeftColor: RGBColor leftColor = new RGBColor((int)entry.op, RGBColor.ByteOrder.RedFirst); _writer.WriteAttributeString("o", "borderleftcolor", OpenXmlNamespaces.Office, "#" + leftColor.SixDigitHexCode); break; case ShapeOptions.PropertyId.borderRightColor: RGBColor rightColor = new RGBColor((int)entry.op, RGBColor.ByteOrder.RedFirst); _writer.WriteAttributeString("o", "borderrightcolor", OpenXmlNamespaces.Office, "#" + rightColor.SixDigitHexCode); break; case ShapeOptions.PropertyId.borderTopColor: RGBColor topColor = new RGBColor((int)entry.op, RGBColor.ByteOrder.RedFirst); _writer.WriteAttributeString("o", "bordertopcolor", OpenXmlNamespaces.Office, "#" + topColor.SixDigitHexCode); break; } } //v:imageData _writer.WriteStartElement("v", "imagedata", OpenXmlNamespaces.VectorML); _writer.WriteAttributeString("o", "relid", OpenXmlNamespaces.Office, imgPart.RelIdToString); _writer.WriteAttributeString("o", "title", OpenXmlNamespaces.Office, ""); _writer.WriteEndElement(); //imagedata //close v:shape _writer.WriteEndElement(); } } _writer.WriteEndElement(); //xml _writer.WriteEndDocument(); _writer.Flush(); }