public void Apply(CharacterRun run, string startElement, RegularContainer slide, ref string lastColor, ref string lastSize, ref string lastTypeface, string lang, string altLang, TextMasterStyleAtom defaultStyle, int lvl, List <MouseClickInteractiveInfoContainer> mciics, ShapeTreeMapping parentShapeTreeMapping, uint position, bool insideTable) { _writer.WriteStartElement("a", startElement, OpenXmlNamespaces.DrawingML); if (lang.Length == 0) { TextSIExceptionAtom siea = _ctx.Ppt.DocumentRecord.FirstDescendantWithType <TextSIExceptionAtom>(); if (siea != null) { if (siea.si.lang) { switch (siea.si.lid) { case 0x0: // no language break; case 0x13: //Any Dutch language is preferred over non-Dutch languages when proofing the text break; case 0x400: //no proofing break; default: try { lang = System.Globalization.CultureInfo.GetCultureInfo(siea.si.lid).IetfLanguageTag; } catch (Exception) { //ignore } break; } } } } if (altLang.Length == 0) { TextSIExceptionAtom siea = _ctx.Ppt.DocumentRecord.FirstDescendantWithType <TextSIExceptionAtom>(); if (siea != null) { if (siea.si.altLang) { switch (siea.si.altLid) { case 0x0: // no language break; case 0x13: //Any Dutch language is preferred over non-Dutch languages when proofing the text break; case 0x400: //no proofing break; default: try { altLang = System.Globalization.CultureInfo.GetCultureInfo(siea.si.altLid).IetfLanguageTag; } catch (Exception) { //ignore } break; } } } } if (lang.Length > 0) { _writer.WriteAttributeString("lang", lang); } if (altLang.Length > 0) { _writer.WriteAttributeString("altLang", altLang); } bool runExists = run != null; if (runExists && run.SizePresent) { if (run.Size > 0) { _writer.WriteAttributeString("sz", (run.Size * 100).ToString()); lastSize = (run.Size * 100).ToString(); } } else if (lastSize.Length > 0) { _writer.WriteAttributeString("sz", lastSize); } else if (defaultStyle != null) { if (defaultStyle.CRuns[lvl].SizePresent) { _writer.WriteAttributeString("sz", (defaultStyle.CRuns[lvl].Size * 100).ToString()); } } if (runExists && run.StyleFlagsFieldPresent) { if ((run.Style & StyleMask.IsBold) == StyleMask.IsBold) { _writer.WriteAttributeString("b", "1"); } if ((run.Style & StyleMask.IsItalic) == StyleMask.IsItalic) { _writer.WriteAttributeString("i", "1"); } if ((run.Style & StyleMask.IsUnderlined) == StyleMask.IsUnderlined) { _writer.WriteAttributeString("u", "sng"); } } else if (defaultStyle != null && defaultStyle.CRuns[lvl].StyleFlagsFieldPresent) { if ((defaultStyle.CRuns[lvl].Style & StyleMask.IsBold) == StyleMask.IsBold) { _writer.WriteAttributeString("b", "1"); } if ((defaultStyle.CRuns[lvl].Style & StyleMask.IsItalic) == StyleMask.IsItalic) { _writer.WriteAttributeString("i", "1"); } if ((defaultStyle.CRuns[lvl].Style & StyleMask.IsUnderlined) == StyleMask.IsUnderlined) { _writer.WriteAttributeString("u", "sng"); } } if (runExists && run.ColorPresent) { writeSolidFill(slide, run, ref lastColor); } else if (lastColor.Length > 0) { _writer.WriteStartElement("a", "solidFill", OpenXmlNamespaces.DrawingML); _writer.WriteStartElement("a", "srgbClr", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("val", lastColor); _writer.WriteEndElement(); _writer.WriteEndElement(); } else if (defaultStyle != null) { if (defaultStyle.CRuns[lvl].ColorPresent) { writeSolidFill((RegularContainer)defaultStyle.ParentRecord, defaultStyle.CRuns[lvl], ref lastColor); } } if (runExists && run.StyleFlagsFieldPresent) { if ((run.Style & StyleMask.HasShadow) == StyleMask.HasShadow) { //TODO: these values are default and have to be replaced _writer.WriteStartElement("a", "effectLst", OpenXmlNamespaces.DrawingML); _writer.WriteStartElement("a", "outerShdw", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("blurRad", "38100"); _writer.WriteAttributeString("dist", "38100"); _writer.WriteAttributeString("dir", "2700000"); _writer.WriteAttributeString("algn", "tl"); _writer.WriteStartElement("a", "srgbClr", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("val", "C0C0C0"); _writer.WriteEndElement(); _writer.WriteEndElement(); _writer.WriteEndElement(); } if ((run.Style & StyleMask.IsEmbossed) == StyleMask.IsEmbossed) { //TODO: these values are default and have to be replaced _writer.WriteStartElement("a", "effectDag", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("name", ""); _writer.WriteStartElement("a", "cont", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("type", "tree"); _writer.WriteAttributeString("name", ""); _writer.WriteStartElement("a", "effect", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("ref", "fillLine"); _writer.WriteEndElement(); _writer.WriteStartElement("a", "outerShdw", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("dist", "38100"); _writer.WriteAttributeString("dir", "13500000"); _writer.WriteAttributeString("algn", "br"); _writer.WriteStartElement("a", "srgbClr", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("val", "FFFFFF"); _writer.WriteEndElement(); _writer.WriteEndElement(); _writer.WriteEndElement(); _writer.WriteStartElement("a", "cont", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("type", "tree"); _writer.WriteAttributeString("name", ""); _writer.WriteStartElement("a", "effect", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("ref", "fillLine"); _writer.WriteEndElement(); _writer.WriteStartElement("a", "outerShdw", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("dist", "38100"); _writer.WriteAttributeString("dir", "2700000"); _writer.WriteAttributeString("algn", "tl"); _writer.WriteStartElement("a", "srgbClr", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("val", "999999"); _writer.WriteEndElement(); _writer.WriteEndElement(); _writer.WriteEndElement(); _writer.WriteStartElement("a", "effect", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("ref", "fillLine"); _writer.WriteEndElement(); _writer.WriteEndElement(); } //TODOS //HasAsianSmartQuotes //HasHorizonNumRendering //ExtensionNibble } //TODOs: //run.ANSITypefacePresent //run.FEOldTypefacePresent //run.PositionPresent //run.SymbolTypefacePresent //run.TypefacePresent if (runExists && run.TypefacePresent) { _writer.WriteStartElement("a", "latin", OpenXmlNamespaces.DrawingML); try { FontCollection fonts = _ctx.Ppt.DocumentRecord.FirstChildWithType <DIaLOGIKa.b2xtranslator.PptFileFormat.Environment>().FirstChildWithType <FontCollection>(); FontEntityAtom entity = fonts.entities[(int)run.TypefaceIdx]; if (entity.TypeFace.IndexOf('\0') > 0) { _writer.WriteAttributeString("typeface", entity.TypeFace.Substring(0, entity.TypeFace.IndexOf('\0'))); lastTypeface = entity.TypeFace.Substring(0, entity.TypeFace.IndexOf('\0')); } else { _writer.WriteAttributeString("typeface", entity.TypeFace); lastTypeface = entity.TypeFace; } //_writer.WriteAttributeString("charset", "0"); } catch (Exception ex) { throw; } _writer.WriteEndElement(); } else if (lastTypeface.Length > 0) { _writer.WriteStartElement("a", "latin", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("typeface", lastTypeface); _writer.WriteEndElement(); } else if (defaultStyle != null && defaultStyle.CRuns[lvl].TypefacePresent) { _writer.WriteStartElement("a", "latin", OpenXmlNamespaces.DrawingML); try { FontCollection fonts = _ctx.Ppt.DocumentRecord.FirstChildWithType <DIaLOGIKa.b2xtranslator.PptFileFormat.Environment>().FirstChildWithType <FontCollection>(); FontEntityAtom entity = fonts.entities[(int)defaultStyle.CRuns[lvl].TypefaceIdx]; if (entity.TypeFace.IndexOf('\0') > 0) { _writer.WriteAttributeString("typeface", entity.TypeFace.Substring(0, entity.TypeFace.IndexOf('\0'))); lastTypeface = entity.TypeFace.Substring(0, entity.TypeFace.IndexOf('\0')); } else { _writer.WriteAttributeString("typeface", entity.TypeFace); lastTypeface = entity.TypeFace; } //_writer.WriteAttributeString("charset", "0"); } catch (Exception ex) { throw; } _writer.WriteEndElement(); } else { if (insideTable) { if (slide.FirstChildWithType <SlideAtom>() != null && _ctx.Ppt.FindMasterRecordById(slide.FirstChildWithType <SlideAtom>().MasterId) != null) { foreach (TextMasterStyleAtom item in _ctx.Ppt.FindMasterRecordById(slide.FirstChildWithType <SlideAtom>().MasterId).AllChildrenWithType <TextMasterStyleAtom>()) { if (item.Instance == 1) { if (item.CRuns.Count > 0 && item.CRuns[0].TypefacePresent) { _writer.WriteStartElement("a", "latin", OpenXmlNamespaces.DrawingML); try { FontCollection fonts = _ctx.Ppt.DocumentRecord.FirstChildWithType <DIaLOGIKa.b2xtranslator.PptFileFormat.Environment>().FirstChildWithType <FontCollection>(); FontEntityAtom entity = fonts.entities[(int)item.CRuns[0].TypefaceIdx]; if (entity.TypeFace.IndexOf('\0') > 0) { _writer.WriteAttributeString("typeface", entity.TypeFace.Substring(0, entity.TypeFace.IndexOf('\0'))); lastTypeface = entity.TypeFace.Substring(0, entity.TypeFace.IndexOf('\0')); } else { _writer.WriteAttributeString("typeface", entity.TypeFace); lastTypeface = entity.TypeFace; } //_writer.WriteAttributeString("charset", "0"); } catch (Exception ex) { throw; } _writer.WriteEndElement(); } } } } } // try // { // CharacterRun cr = _ctx.Ppt.DocumentRecord.FirstChildWithType<PptFileFormat.Environment>().FirstChildWithType<TextMasterStyleAtom>().CRuns[0]; // if (cr.TypefacePresent) // { // FontCollection fonts = _ctx.Ppt.DocumentRecord.FirstChildWithType<DIaLOGIKa.b2xtranslator.PptFileFormat.Environment>().FirstChildWithType<FontCollection>(); // FontEntityAtom entity = fonts.entities[(int)cr.TypefaceIdx]; // if (entity.TypeFace.IndexOf('\0') > 0) // { // _writer.WriteStartElement("a", "latin", OpenXmlNamespaces.DrawingML); // _writer.WriteAttributeString("typeface", entity.TypeFace.Substring(0, entity.TypeFace.IndexOf('\0'))); // _writer.WriteEndElement(); // } // else // { // _writer.WriteStartElement("a", "latin", OpenXmlNamespaces.DrawingML); // _writer.WriteAttributeString("typeface", entity.TypeFace); // _writer.WriteEndElement(); // } // } // } // catch (Exception ex) // { // //throw; // } } if (runExists && run.FEOldTypefacePresent) { try { FontCollection fonts = _ctx.Ppt.DocumentRecord.FirstChildWithType <DIaLOGIKa.b2xtranslator.PptFileFormat.Environment>().FirstChildWithType <FontCollection>(); FontEntityAtom entity = fonts.entities[(int)run.FEOldTypefaceIdx]; if (entity.TypeFace.IndexOf('\0') > 0) { _writer.WriteStartElement("a", "ea", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("typeface", entity.TypeFace.Substring(0, entity.TypeFace.IndexOf('\0'))); _writer.WriteEndElement(); } else { _writer.WriteStartElement("a", "ea", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("typeface", entity.TypeFace); _writer.WriteEndElement(); } } catch (Exception ex) { //throw; } } else { try { CharacterRun cr = _ctx.Ppt.DocumentRecord.FirstChildWithType <PptFileFormat.Environment>().FirstChildWithType <TextMasterStyleAtom>().CRuns[0]; if (cr.FEOldTypefacePresent) { FontCollection fonts = _ctx.Ppt.DocumentRecord.FirstChildWithType <DIaLOGIKa.b2xtranslator.PptFileFormat.Environment>().FirstChildWithType <FontCollection>(); FontEntityAtom entity = fonts.entities[(int)cr.FEOldTypefaceIdx]; if (entity.TypeFace.IndexOf('\0') > 0) { _writer.WriteStartElement("a", "ea", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("typeface", entity.TypeFace.Substring(0, entity.TypeFace.IndexOf('\0'))); _writer.WriteEndElement(); } else { _writer.WriteStartElement("a", "ea", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("typeface", entity.TypeFace); _writer.WriteEndElement(); } } } catch (Exception ex) { //throw; } } if (runExists && run.SymbolTypefacePresent) { try { FontCollection fonts = _ctx.Ppt.DocumentRecord.FirstChildWithType <DIaLOGIKa.b2xtranslator.PptFileFormat.Environment>().FirstChildWithType <FontCollection>(); FontEntityAtom entity = fonts.entities[(int)run.SymbolTypefaceIdx]; if (entity.TypeFace.IndexOf('\0') > 0) { _writer.WriteStartElement("a", "sym", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("typeface", entity.TypeFace.Substring(0, entity.TypeFace.IndexOf('\0'))); _writer.WriteEndElement(); } else { _writer.WriteStartElement("a", "sym", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("typeface", entity.TypeFace); _writer.WriteEndElement(); } } catch (Exception ex) { //throw; } } if (mciics != null && mciics.Count > 0) { foreach (MouseClickInteractiveInfoContainer mciic in mciics) { InteractiveInfoAtom iia = mciic.FirstChildWithType <InteractiveInfoAtom>(); MouseClickTextInteractiveInfoAtom tiia = mciic.Range; if (tiia.begin <= position && tiia.end > position) { if (iia != null) { if (iia.action == InteractiveInfoActionEnum.Hyperlink) { foreach (ExHyperlinkContainer c in _ctx.Ppt.DocumentRecord.FirstDescendantWithType <ExObjListContainer>().AllChildrenWithType <ExHyperlinkContainer>()) { ExHyperlinkAtom a = c.FirstChildWithType <ExHyperlinkAtom>(); if (a.exHyperlinkId == iia.exHyperlinkIdRef) { CStringAtom s = c.FirstChildWithType <CStringAtom>(); ExternalRelationship er = parentShapeTreeMapping.parentSlideMapping.targetPart.AddExternalRelationship(OpenXmlRelationshipTypes.HyperLink, s.Text); _writer.WriteStartElement("a", "hlinkClick", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("r", "id", OpenXmlNamespaces.Relationships, er.Id.ToString()); _writer.WriteEndElement(); } } } } } } } _writer.WriteEndElement(); }
public void SetHyperlink(Hyperlink link) { if (link.GetId() == -1) { throw new HSLFException("You must call SlideShow.AddHyperlink(Hyperlink link) first"); } EscherClientDataRecord cldata = new EscherClientDataRecord(); cldata.SetOptions((short)0xF); GetSpContainer().AddChildRecord(cldata); // TODO - junit to prove GetChildRecords().add is wrong InteractiveInfo info = new InteractiveInfo(); InteractiveInfoAtom infoAtom = info.GetInteractiveInfoAtom(); switch (link.GetType()) { case Hyperlink.LINK_FIRSTSLIDE: infoAtom.SetAction(InteractiveInfoAtom.ACTION_JUMP); infoAtom.SetJump(InteractiveInfoAtom.JUMP_FIRSTSLIDE); infoAtom.SetHyperlinkType(InteractiveInfoAtom.LINK_FirstSlide); break; case Hyperlink.LINK_LASTSLIDE: infoAtom.SetAction(InteractiveInfoAtom.ACTION_JUMP); infoAtom.SetJump(InteractiveInfoAtom.JUMP_LASTSLIDE); infoAtom.SetHyperlinkType(InteractiveInfoAtom.LINK_LastSlide); break; case Hyperlink.LINK_NEXTSLIDE: infoAtom.SetAction(InteractiveInfoAtom.ACTION_JUMP); infoAtom.SetJump(InteractiveInfoAtom.JUMP_NEXTSLIDE); infoAtom.SetHyperlinkType(InteractiveInfoAtom.LINK_NextSlide); break; case Hyperlink.LINK_PREVIOUSSLIDE: infoAtom.SetAction(InteractiveInfoAtom.ACTION_JUMP); infoAtom.SetJump(InteractiveInfoAtom.JUMP_PREVIOUSSLIDE); infoAtom.SetHyperlinkType(InteractiveInfoAtom.LINK_PreviousSlide); break; case Hyperlink.LINK_URL: infoAtom.SetAction(InteractiveInfoAtom.ACTION_HYPERLINK); infoAtom.SetJump(InteractiveInfoAtom.JUMP_NONE); infoAtom.SetHyperlinkType(InteractiveInfoAtom.LINK_Url); break; } infoAtom.SetHyperlinkID(link.GetId()); MemoryStream out1 = new MemoryStream(); try { info.WriteOut(out1); } catch (Exception e) { throw new HSLFException(e); } cldata.SetRemainingData(out1.ToArray()); }