Beispiel #1
0
        public void Read()
        {
            if (mtrTransformace == null)
            {
                mtrTransformace = new Transformace(mstrSouborDoc2Xml);
                mtrTransformace.NactiZeSouboru();
                mblnZmenaSouboruDocx2Xml = false;
            }
            else
            {
                if (mblnZmenaSouboruDocx2Xml)
                {
                    mtrTransformace.Soubor = mstrSouborDoc2Xml;
                    mtrTransformace.NactiZeSouboru();
                    mblnZmenaSouboruDocx2Xml = false;
                }
            }

            mdxrReader = new DocxReader(mstrSouborDocx);
            mdxrReader.ReadUsedStyles();
            Styles stsUsed        = mdxrReader.UsedStyles;
            Styles stNedefinovane = new Styles();
            string sStyly         = null;

            foreach (Style st in stsUsed)
            {
                if (!mtrTransformace.Tagy.ContainsID(st.UIName))
                {
                    stNedefinovane.Add(st);
                    sStyly += st.UIName + "; ";
                }
            }
            if (stNedefinovane.Count > 0)
            {
                if (!mtrTransformace.Tagy.ContainsID("*"))
                {
                    throw new ArgumentException("Transofrmační soubor neobsahuje všechny styly použité v dokumentu: " + sStyly);
                }
            }


            //mdxrReader.ReadStyles();
            mdxrReader.CountStructures();
            //mstStyly = mdxrReader.Styles;


            //provést kontrolu, jestli Xml2Docx obsahuje pravidla pro všechny styly


            mdxrReader.ZacatekDokumentu += new DocxReader.Document(mdxrReader_ZacatekDokumentu);
            mdxrReader.KonecDokumentu   += new DocxReader.Document(mdxrReader_KonecDokumentu);

            mdxrReader.ZacatekTelaDokumentu += new DocxReader.Body(mdxrReader_ZacatekTelaDokumentu);
            mdxrReader.KonecTelaDokumentu   += new DocxReader.Body(mdxrReader_KonecTelaDokumentu);

            mdxrReader.ZacatekOdstavce += new DocxReader.Paragraph(mdxrReader_ZacatekOdstavce);
            mdxrReader.KonecOdstavce   += new DocxReader.Paragraph(mdxrReader_KonecOdstavce);
            mdxrReader.ZnakovyStyl     += new DocxReader.TextRun(mdxrReader_ZnakovyStyl);

            mdxrReader.ZacatekTabulky += new DocxReader.Table(mdxrReader_ZacatekTabulky);
            mdxrReader.ZacatekRadku   += new DocxReader.TableRow(mdxrReader_ZacatekRadku);
            mdxrReader.ZacatekBunky   += new DocxReader.TableCell(mdxrReader_ZacatekBunky);
            mdxrReader.KonecBunky     += new DocxReader.TableCell(mdxrReader_KonecBunky);
            mdxrReader.KonecRadku     += new DocxReader.TableRow(mdxrReader_KonecRadku);
            mdxrReader.KonecTabulky   += new DocxReader.Table(mdxrReader_KonecTabulky);

            mdxrReader.Pismo += new DocxReader.Font(mdxrReader_Pismo);

            mdxrReader.Prubeh += new DocxReader.Progress(mdxrReader_Prubeh);

            mdxrReader.Obrazek += new DocxReader.Picture(mdxrReader_Obrazek);

            mdxrReader.ZacatekPoznamkyPodCarou += new DocxReader.Footnote(mdxrReader_ZacatekPoznamkyPodCarou);
            mdxrReader.KonecPoznamkyPodCarou   += new DocxReader.Footnote(mdxrReader_KonecPoznamkyPodCarou);

            XmlWriterSettings xws = new XmlWriterSettings();

            xws.CloseOutput = true;
            xws.Encoding    = mnstSettings.OutputEncoding;
            xws.Indent      = mnstSettings.OutputIndent;
            xws.IndentChars = mnstSettings.OutputIndentChars;

            mxwWriter = XmlWriter.Create(mstrSouborXml, xws);

            mdxrReader.Read();

            mdxrReader = null;
            mxwWriter.Flush();
            mxwWriter.Close();
        }
Beispiel #2
0
        public void Generate()
        {
            if (mtrTransformace == null)
            {
                mtrTransformace = new Transformace(mstrSouborXml2Docx);
                mtrTransformace.NactiZeSouboru();
                mblnZmenaSouboruXml2Docx = false;
            }
            else
            {
                if (mblnZmenaSouboruXml2Docx)
                {
                    mtrTransformace.Soubor = mstrSouborXml2Docx;
                    mtrTransformace.NactiZeSouboru();
                    mblnZmenaSouboruXml2Docx = false;
                }
            }
            XmlWriterSettings xws = new XmlWriterSettings();

            xws.Indent             = true;
            xws.IndentChars        = "\t";
            xws.OmitXmlDeclaration = true;
            const string csNsW  = "http://schemas.openxmlformats.org/wordprocessingml/2006/main";
            const string csnNsR = "http://schemas.openxmlformats.org/officeDocument/2006/relationships";

            XmlReaderSettings xrs = new XmlReaderSettings();

            xrs.ProhibitDtd = false;

            string sText = null;

            using (XmlReader xr = XmlReader.Create(mstrSouborXml, xrs))
            {
                using (XmlWriter xw = XmlWriter.Create(mstrSouborDocx, xws))
                {
                    xw.WriteStartDocument();
                    xw.WriteStartElement("w", "document", csNsW);
                    xw.WriteAttributeString("xmlns", "r", null, csnNsR);
                    InsertManuscriptoriumProlog(xw);

                    while (xr.Read())
                    {
                        string sName = xr.Name;
                        sName = sName.Replace("_", ""); //identifikátory jsou bez podtržítek
                        if (xr.NodeType == XmlNodeType.Element && !xr.IsEmptyElement)
                        {
                            if (sName == "body")
                            {
                                continue;
                            }

                            //if (mgdcTag2ZnakovyStyl.ContainsKey(sName)) {
                            //    //vytvořit run

                            //}

                            if (sName[0] == sName.ToLower()[0]) //jde o malé písmeno => odstavcový styl
                            {
                                //vytvořit run
                                xw.WriteStartElement("w", "r", csNsW);
                                xw.WriteStartElement("w", "rPr", csNsW);

                                xw.WriteStartElement("w", "rStyle", csNsW);
                                xw.WriteAttributeString("w", "val", csNsW, sName);
                                xw.WriteEndElement();
                                xw.WriteEndElement();

                                sText = xr.ReadString();
                                ZapsatWText(csNsW, sText, xw);
                            }
                            else if (sName[0] == sName.ToUpper()[0])
                            {
                                xw.WriteStartElement("w", "p", csNsW);
                                xw.WriteStartElement("w", "pPr", csNsW);
                                xw.WriteStartElement("w", "pStyle", csNsW);
                                xw.WriteAttributeString("w", "val", csNsW, sName);
                                xw.WriteEndElement();
                                xw.WriteEndElement();
                            }

                            #region původní kód

                            //else if (mgdcTag2OdstavcovyStyl.ContainsKey(sName)) {
                            //    xw.WriteStartElement("w", "p", csNsW);
                            //    xw.WriteStartElement("w", "pPr", csNsW);
                            //    xw.WriteStartElement("w", "pStyle", csNsW);
                            //    xw.WriteAttributeString("w", "val", csNsW, mgdcTag2OdstavcovyStyl[sName]);
                            //    xw.WriteEndElement();
                            //    xw.WriteEndElement();
                            //}
                            //else if (sName == "letter") {
                            //    xw.WriteStartElement("w", "p", csNsW);
                            //    xw.WriteStartElement("w", "pPr", csNsW);
                            //    xw.WriteStartElement("w", "pStyle", csNsW);
                            //    xw.WriteAttributeString("w", "val", csNsW, "Pismeno");
                            //    xw.WriteEndElement();
                            //    xw.WriteEndElement();

                            //    xw.WriteStartElement("w", "r", csNsW);
                            //    xw.WriteStartElement("w", "rPr", csNsW);
                            //    xw.WriteStartElement("w", "rStyle", csNsW);

                            //    xw.WriteAttributeString("w", "val", csNsW, "text");

                            //    xw.WriteEndElement();
                            //    xw.WriteEndElement();

                            //    sText = xr.GetAttribute("character");
                            //    ZapsatWText(csNsW, sText, xw);
                            //    xw.WriteEndElement();
                            //    xw.WriteEndElement();

                            //}

                            #endregion
                        }
                        if (xr.NodeType == XmlNodeType.EndElement && !xr.IsEmptyElement)
                        {
                            if (sName == "letter")
                            {
                                continue;
                            }
                            if (sName == "body")
                            {
                                continue;
                            }
                            else
                            {
                                xw.WriteEndElement();
                            }

                            //else if (mgdcTag2ZnakovyStyl.ContainsKey(sName) || mgdcTag2OdstavcovyStyl.ContainsKey(sName)) {
                            //    //ukončit run ne odstavec
                            //    xw.WriteEndElement();
                            //}
                        }

                        if (xr.NodeType == XmlNodeType.Text && !String.IsNullOrEmpty(xr.Value) && xr.Value[0] != 8233)
                        {
                            xw.WriteStartElement("w", "r", csNsW);
                            xw.WriteStartElement("w", "rPr", csNsW);

                            xw.WriteStartElement("w", "rStyle", csNsW);
                            xw.WriteAttributeString("w", "val", csNsW, "text");
                            xw.WriteEndElement();
                            xw.WriteEndElement();

                            ZapsatWText(csNsW, xr.Value, xw);
                            xw.WriteEndElement();//w:p - nejspíš konec odstavce
                        }
                    }
                    InsertManuscriptoriumEpilog(xw);
                    xw.WriteEndElement();//w:document
                    xw.WriteEndDocument();
                    xw.Flush();
                }
            }
        }