Beispiel #1
0
        private void WriteDefaultTextStyle(PowerpointDocument ppt, DocumentContainer documentRecord)
        {
            _writer.WriteStartElement("p", "defaultTextStyle", OpenXmlNamespaces.PresentationML);

            _writer.WriteStartElement("a", "defPPr", OpenXmlNamespaces.DrawingML);
            _writer.WriteStartElement("a", "defRPr", OpenXmlNamespaces.DrawingML);
            _writer.WriteAttributeString("lang", "en-US");
            _writer.WriteEndElement(); //defRPr
            _writer.WriteEndElement(); //defPPr


            TextMasterStyleAtom defaultStyle = _ctx.Ppt.DocumentRecord.FirstChildWithType <DIaLOGIKa.b2xtranslator.PptFileFormat.Environment>().FirstChildWithType <TextMasterStyleAtom>();

            TextMasterStyleMapping map = new TextMasterStyleMapping(_ctx, _writer, null);

            for (int i = 0; i < defaultStyle.IndentLevelCount; i++)
            {
                map.writepPr(defaultStyle.CRuns[i], defaultStyle.PRuns[i], null, i, false, true);
            }
            for (int i = defaultStyle.IndentLevelCount; i < 9; i++)
            {
                map.writepPr(defaultStyle.CRuns[0], defaultStyle.PRuns[0], null, i, false, true);
            }


            _writer.WriteEndElement(); //defaultTextStyle
        }
        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();
        }