예제 #1
0
        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));
            }
        }