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(); }
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(); } } }