public Prepisy NacistPrepisy(bool blnJenomZaklad) { DirectoryInfo di = new DirectoryInfo(mstrSlozka); if (String.IsNullOrEmpty(mstrMaska)) { mstrMaska = "*.do*?"; } FileInfo[] fis = di.GetFiles(mstrMaska, SearchOption.TopDirectoryOnly); Prepis[] dkm = new Prepis[fis.Length]; Prepisy prp = new Prepisy(); mintPocetSouboru = fis.Length; if (NacteniSouboru != null) { NacteniSouboru(this, new NacteniPrepisuEventArgs(mintPocetSouboru)); } for (int i = 0; i < fis.Length; i++) { if (NacteniSouboru != null) { NacteniSouboru(this, new NacteniPrepisuEventArgs(mintPocetSouboru, i + 1, fis[i].Name)); } string sSouborDocx = null; ISoubor sb = new Evidence.Soubor(); sb.Adresar = mstrSlozka; sb.Nazev = fis[i].Name; sb.Zmeneno = fis[i].LastWriteTime; sb.Velikost = fis[i].Length; if (fis[i].Extension.ToLower() == ".docx" | fis[i].Extension.ToLower() == ".docm") { sSouborDocx = sb.CelaCesta; sb.FormatWordu = FormatSouboru.Docx; } else if (fis[i].Extension.ToLower() == ".doc") { sb.FormatWordu = FormatSouboru.Doc; } else { sb.FormatWordu = FormatSouboru.Neznamy; } sb.KontrolniSoucet = KontrolniSoucet.GetMD5Hash(fis[i].FullName); if (!blnJenomZaklad) { if (sb.FormatWordu == FormatSouboru.Doc) { throw new FormatException("Sobory DOC nejsou podporovány"); sSouborDocx = System.IO.Path.GetTempPath() + fis[i].Name + "x"; //Konverze.Doc2Docx(fis[i].FullName, sSouborDocx); FileInfo fi = new FileInfo(sSouborDocx); if (fi.Exists) { sb.Velikost = fi.Length; } } } Hlavicka hl = new Hlavicka(); Zpracovani zp = new Zpracovani(); //object oGuid = Metadata.NactiUzivatelskouVlastnost(sb.CelaCesta, Enum.GetName(typeof(Metaudaje), Metaudaje.htx_id)); //if (oGuid != null) // dk.GUID = oGuid.ToString(); string[] asMetaudaje = Enum.GetNames(typeof(Metaudaje)); object[] aoUdaje = Metadata.NactiUzivatelskeVlastnosti(sb.CelaCesta, asMetaudaje); for (int j = 0; j < asMetaudaje.Length; j++) { if (aoUdaje[j] != null) { DateTime dtExport; switch (asMetaudaje[j]) { case "htx_id": zp.GUID = aoUdaje[j].ToString(); break; case "htx_posledniExport_1": if (PrevestNaDatum(aoUdaje[j], out dtExport)) { zp.Exporty.Add(new Export(ZpusobVyuziti.Manuscriptorium, dtExport)); } break; case "htx_posledniExport_2": if (PrevestNaDatum(aoUdaje[j], out dtExport)) { zp.Exporty.Add(new Export(ZpusobVyuziti.StaroceskyKorpus, dtExport)); } break; case "htx_posledniExport_4": if (PrevestNaDatum(aoUdaje[j], out dtExport)) { zp.Exporty.Add(new Export(ZpusobVyuziti.StredoceskyKorpus, dtExport)); } break; case "htx_fazeZpracovani": zp.FazeZpracovani = (FazeZpracovani)Enum.Parse(typeof(FazeZpracovani), aoUdaje[j].ToString()); break; case "ovj_casoveZarazeni": zp.CasoveZarazeni = (CasoveZarazeni)Enum.Parse(typeof(CasoveZarazeni), aoUdaje[j].ToString()); break; case "ovj_zpusobVyuziti": zp.ZpusobVyuziti = (ZpusobVyuziti)Enum.Parse(typeof(ZpusobVyuziti), aoUdaje[j].ToString()); break; case "htx_neexportovat": bool bNeexportovat; if (Boolean.TryParse(aoUdaje[j].ToString(), out bNeexportovat)) { zp.Neexportovat = bNeexportovat; } else { zp.Neexportovat = false; } break; default: break; } } } asMetaudaje = new string[] { "Titul", "Předmět", "Komentář", "Autor" }; aoUdaje = Metadata.NactiZabudovaneVlastnosti(sb.CelaCesta, asMetaudaje); for (int j = 0; j < asMetaudaje.Length; j++) { if (aoUdaje[j] != null) { switch (asMetaudaje[j]) { case "Titul": hl.Titul = aoUdaje[j].ToString(); break; case "Předmět": hl.InstituceUlozeni = aoUdaje[j].ToString(); break; case "Komentář": hl.Signatura = aoUdaje[j].ToString(); break; case "Autor": hl.EditoriPrepisu = GetCleanEditori(aoUdaje[j].ToString()); break; default: break; } } } string grantovaPodpora = null; if (!blnJenomZaklad) { NactiHlavickuZTabulky(sSouborDocx, ref hl); grantovaPodpora = ZjistiGrantovouPodporu(sSouborDocx); } Prepis dk = new Prepis(hl, sb, zp); //dk.Identifikator = i; dk.Zpracovani.GrantovaPodpora = grantovaPodpora; dkm[i] = dk; prp.Add(dk); if (dk.Soubor.CelaCesta != sSouborDocx & sSouborDocx != null) { File.Delete(sSouborDocx); } } return(prp); //return dkm; }
private void NactiHlavickuZTabulky(string sSouborDocx, ref Hlavicka hl) { if (!File.Exists(sSouborDocx)) { return; } string sTempXml = Path.GetTempFileName(); //OOXML.Pomucky.Dokument.ExtrahovatDoSouboru(sSouborDocx, sTempXml, true); OOXML.Pomucky.Dokument.ExtrahovatDoSouboru(sSouborDocx, sTempXml, false); XmlReaderSettings xrs = new XmlReaderSettings(); xrs.CloseInput = true; xrs.ConformanceLevel = ConformanceLevel.Document; XmlReader xr = XmlReader.Create(sTempXml, xrs); int iAktualniTabulka = 0; int iAktualniRadek = 0; int iAktualniSloupec = 0; string sText = null; List <string> glEditori = new List <string>(); try { while (xr.Read()) { if (xr.NodeType == XmlNodeType.Element) { switch (xr.Name) { case "w:tbl": iAktualniRadek = 0; iAktualniSloupec = 0; iAktualniTabulka++; if (iAktualniTabulka > 1) { return; } sText = null; glEditori = new List <string>(); break; case "w:tr": iAktualniRadek++; iAktualniSloupec = 0; break; case "w:tc": iAktualniSloupec++; sText = null; break; case "w:t": if (!xr.IsEmptyElement & iAktualniTabulka == 1) { sText += xr.ReadElementContentAsString(); } break; default: break; } } else if (xr.NodeType == XmlNodeType.EndElement) { switch (xr.Name) { case "w:tbl": if (iAktualniTabulka >= 1) { if (glEditori.Count > 0) { hl.EditoriPrepisu = glEditori.ToArray(); } return; } break; case "w:tc": if (sText == null || iAktualniSloupec != 2) { break; } sText = sText.Trim(); if (!String.IsNullOrEmpty(sText)) { switch (iAktualniRadek) { case 1: hl.Autor = sText; break; case 2: hl.Titul = sText; break; case 3: hl.DataceText = sText; break; case 4: hl.Tiskar = sText; break; case 5: hl.MistoTisku = sText; break; case 7: hl.TypPredlohyText = sText; break; case 9: hl.ZemeUlozeni = sText; break; case 10: hl.MestoUlozeni = sText; break; case 11: hl.InstituceUlozeni = sText; break; case 12: hl.Signatura = sText; break; case 13: hl.FoliacePaginace = sText; break; case 15: hl.TitulEdice = sText; break; case 16: hl.EditorEdice = sText; break; case 17: hl.MistoVydaniEdice = sText; break; case 18: hl.RokVydaniEdice = sText; break; case 19: hl.StranyEdice = sText; break; case 21: case 22: case 23: case 24: glEditori.Add(sText); break; default: break; } } break; default: break; } } } } catch (Exception e) { throw e; } finally { xr.Close(); File.Delete(sTempXml); } }