public void GetMetadata(MetaData FoundMetaData, Users FoundUsers, Dates FoundDates, Emails foundEmails) { String strCreator = string.Empty; String strLastModifiedBy = string.Empty; foreach (Body Cuerpo in this.Cuerpos) { if (CompareUID(Cuerpo.UID, Body.UIDSummaryInformation)) { foreach (Body.PropertyEntry Propiedad in Cuerpo.Propiedades) { String Valor = this.GetValue(Cuerpo.Offset + Propiedad.Offset); switch (Propiedad.IdPropiedad) { case Body.PropertyEntry.SUMMARYINFORMATION_TITULO: if (!string.IsNullOrEmpty(Valor.Trim())) { FoundMetaData.Title = Valor; } break; case Body.PropertyEntry.SUMMARYINFORMATION_SUBJECT: if (!string.IsNullOrEmpty(Valor.Trim())) { FoundMetaData.Subject = Valor; } break; case Body.PropertyEntry.SUMMARYINFORMATION_NUMBER_OF_PAGES: case Body.PropertyEntry.SUMMARYINFORMATION_NUMBER_OF_WORDS: case Body.PropertyEntry.SUMMARYINFORMATION_NUMBER_OF_CHARACTERS: if (!string.IsNullOrEmpty(Valor.Trim())) { FoundMetaData.Statistic += Body.PropertyEntry.SummaryInformationPropertyToString(Propiedad.IdPropiedad) + ": " + Valor + " "; } break; case Body.PropertyEntry.SUMMARYINFORMATION_APPLICATION: if (!string.IsNullOrEmpty(Valor.Trim())) { FoundMetaData.Applications.Items.Add(new ApplicationsItem(Analysis.ApplicationAnalysis.GetApplicationsFromString(Valor, this.Cabecera.OSH == 3 && this.Cabecera.OSL == 10))); } break; case Body.PropertyEntry.SUMMARYINFORMATION_KEYWORDS: if (!string.IsNullOrEmpty(Valor.Trim())) { FoundMetaData.Keywords = Valor; } break; case Body.PropertyEntry.SUMMARYINFORMATION_COMMENTS: if (!string.IsNullOrEmpty(Valor.Trim())) { FoundMetaData.Comments = Valor; } break; case Body.PropertyEntry.SUMMARYINFORMATION_TEMPLATE: if (!string.IsNullOrEmpty(Valor.Trim())) { FoundMetaData.Template = Valor; } break; case Body.PropertyEntry.SUMMARYINFORMATION_REVISIONNUMBER: if (!string.IsNullOrEmpty(Valor.Trim())) { Decimal d; if (Decimal.TryParse(Valor, out d)) { FoundMetaData.VersionNumber = d; } } break; case Body.PropertyEntry.SUMMARYINFORMATION_CREATETIME: if (!string.IsNullOrEmpty(Valor.Trim())) { DateTime d; if (DateTime.TryParse(Valor, out d)) { FoundDates.CreationDateSpecified = true; FoundDates.CreationDate = d.ToLocalTime(); } } break; case Body.PropertyEntry.SUMMARYINFORMATION_LASTSAVEDTIME: if (!string.IsNullOrEmpty(Valor.Trim())) { DateTime d; if (DateTime.TryParse(Valor, out d)) { FoundDates.ModificationDateSpecified = true; FoundDates.ModificationDate = d.ToLocalTime(); } } break; case Body.PropertyEntry.SUMMARYINFORMATION_LASTPRINTED: if (!string.IsNullOrEmpty(Valor.Trim())) { DateTime d; if (DateTime.TryParse(Valor, out d)) { FoundDates.DatePrintingSpecified = true; FoundDates.DatePrinting = d.ToLocalTime(); } } break; case Body.PropertyEntry.SUMMARYINFORMATION_TOTALEDITINGTIME: if (!string.IsNullOrEmpty(Valor.Trim())) { DateTime d; if (DateTime.TryParse(Valor, out d)) { d = new DateTime(d.ToFileTimeUtc()); FoundMetaData.EditTime = d.Ticks; } } break; case Body.PropertyEntry.SUMMARYINFORMATION_AUTHOR: if (!string.IsNullOrEmpty(Valor.Trim())) { strCreator = Valor; } break; case Body.PropertyEntry.SUMMARYINFORMATION_LASTSAVEDBY: if (!string.IsNullOrEmpty(Valor.Trim())) { strLastModifiedBy = Valor; } break; case Body.PropertyEntry.SUMMARYINFORMATION_CODEPAGE: Valor = CodePageToCodification(Convert.ToInt32(Valor)); if (!string.IsNullOrEmpty(Valor.Trim())) { FoundMetaData.Codification = Valor; } break; } } } else if (CompareUID(Cuerpo.UID, Body.UIDDocumentSummaryInformation)) { foreach (Body.PropertyEntry Propiedad in Cuerpo.Propiedades) { String Valor = this.GetValue(Cuerpo.Offset + Propiedad.Offset); switch (Propiedad.IdPropiedad) { case Body.PropertyEntry.DOCUMENTSUMMARYINFORMATION_CATEGORY: if (!string.IsNullOrEmpty(Valor.Trim())) { FoundMetaData.Category = Valor; } break; case Body.PropertyEntry.DOCUMENTSUMMARYINFORMATION_BYTES: case Body.PropertyEntry.DOCUMENTSUMMARYINFORMATION_LINES: case Body.PropertyEntry.DOCUMENTSUMMARYINFORMATION_PARAGRAPHS: case Body.PropertyEntry.DOCUMENTSUMMARYINFORMATION_SLIDES: case Body.PropertyEntry.DOCUMENTSUMMARYINFORMATION_NOTES: case Body.PropertyEntry.DOCUMENTSUMMARYINFORMATION_HIDDENSLIDES: case Body.PropertyEntry.DOCUMENTSUMMARYINFORMATION_MMCLIPS: if (!string.IsNullOrEmpty(Valor.Trim())) { FoundMetaData.Statistic += Body.PropertyEntry.DocumentSummaryInformationPropertyToString(Propiedad.IdPropiedad) + ": " + Valor + " "; } break; case Body.PropertyEntry.DOCUMENTSUMMARYINFORMATION_MANAGER: if (!string.IsNullOrEmpty(Valor.Trim())) { FoundUsers.AddUniqueItem(Valor, false); } break; case Body.PropertyEntry.DOCUMENTSUMMARYINFORMATION_COMPANY: if (!string.IsNullOrEmpty(Valor.Trim())) { FoundMetaData.Company = Valor; } break; case Body.PropertyEntry.DOCUMENTSUMMARYINFORMATION_HEADINGPAIRS: break; case Body.PropertyEntry.DOCUMENTSUMMARYINFORMATION_TITLESOFPARTS: break; } } } else if (CompareUID(Cuerpo.UID, Body.UIDDocumentSummaryInformationCustom)) { if (Cuerpo.Propiedades[0].IdPropiedad == 0) { this.stream.Seek(Cuerpo.Offset + Cuerpo.Propiedades[1].Offset, SeekOrigin.Begin); BinaryReader br = new BinaryReader(this.stream); br.ReadInt32(); Boolean UnicodeNames = br.ReadInt32() == 0x4B0; this.stream.Seek(Cuerpo.Offset + Cuerpo.Propiedades[0].Offset, SeekOrigin.Begin); FoundMetaData.UserInfo = string.Empty; for (int NumberOfCustomProperties = br.ReadInt32(); NumberOfCustomProperties > 0; NumberOfCustomProperties--) { int PropertyNumber = br.ReadInt32(); int CustomPropertyNameLength = br.ReadInt32(); String Name = UnicodeNames ? Encoding.Unicode.GetString(br.ReadBytes(CustomPropertyNameLength * 2)).Trim('\0') : Encoding.UTF8.GetString(br.ReadBytes(CustomPropertyNameLength)).Trim('\0'); if (PropertyNumber < Cuerpo.NumeroDePropiedades) { int i; for (i = 0; i < Cuerpo.Propiedades.Length && Cuerpo.Propiedades[i].IdPropiedad != PropertyNumber; i++) { ; } if (i < Cuerpo.Propiedades.Length) { long pos = this.stream.Position; if (UnicodeNames && pos % 4 != 0) { pos += 2; } String Valor = this.GetValue(Cuerpo.Offset + Cuerpo.Propiedades[i].Offset).Trim(); this.stream.Seek(pos, SeekOrigin.Begin); if (!string.IsNullOrEmpty(Valor.Trim())) { FoundMetaData.UserInfo += Name + ": " + Valor.Trim() + "\t"; if (Name == "_AuthorEmail") { foundEmails.AddUniqueItem(Valor.Trim()); } } } } } } } } if (!string.IsNullOrEmpty(strLastModifiedBy)) { FoundUsers.AddUniqueItem(strLastModifiedBy, true); } if (!string.IsNullOrEmpty(strCreator)) { FoundUsers.AddUniqueItem(strCreator, string.IsNullOrEmpty(strLastModifiedBy)); } }