Dsofile ile Office Belgelerinin Özelliklerini Değiştirmek

Dsofile ile Office Belgelerinin Özelliklerini düzenlemek Dsofile ile Office Belgelerinin Özelliklerini düzenlemek

 

0. Giriş

 

Metadata ifadesinin tanımına baktığımızda “veri hakkında veri” diye bir kavram ile karşılaşırız. En basit örneği ile MP3 dosyalarımızda dinlediğimiz müziğin ses bilgilerinin yanı sıra sanatçı, parça ismi, yapım yılı gibi bilgilerininde ID3 formatında bulunmasıdır. Bu bilgiler MP3 dosyalarının son 128 bitinde yer alır. Başka bir örnekte dijital fotoğraf makinesi ile çekilen fotoğraf belgelerinde bulunan EXIF bilgileridir. Buda çekilen fotoğrafın tarihi, makinenin markası ve ışık, pozlama gibi fotoğrafçılık ile ilgili bilgilerin aynı dosyada barındırılmasını sağlar. Bütün bu bilgilerini saklanma sebebi herhangi bir arama işleminde ulaşılacak veri hakkında özet verilere ulaşmaktır.

 

Günümüzde arama motorlarının önem kazanması ve bu konuda yapılan arge çalışmaları ve yatırımların artmasıda ulaşılmak istenen verinin daha kısa zamanda bulunması içindir.

 

Google ve MSN arama motorlarının Desktop versiyonları temelde IFilter arayüzü ile sistemimizdeki tüm dosyaları indeksler. [1] Bunun için yazılım firmaları kendi ürünleri için bir IFilter arayüzünü programlar. Microsoft Office’i kurduğunuzda bu sisteminizde otomatik kurulurken PDF dökümanları için Adobe firmasının sitesininden IFilter arayüzünü indirip kurmanız gerekmektedir.  [2]

 

Bazı komponent firmaları ise JPEG [3] ve Audio Video [4] formları için ücretli IFilter arayüzleri oluşturlardır.

 

Tüm bu IFilter arayüzlerinin temeli ise Object Linking and Embed teknolojisi altındaki IpropertyStorage arayüzünün kullanılması ile bağlantılıdır. [5] Buda bir programcı için Win32 sistem kaynaklarının kullanımının zorluğu demektirki her yazılım firmasının kendi IFilter arayüzünü yazması için bir sebeptir.

 

Microsoft, Office belgelerindeki bu metadata’ların programcı tarafından okunması ve değiştirilebilmesi için “Microsoft Developer Support OLE File Property Reader 2.0” ismi altında C++ ile geliştirdiği bir COM komponentini geliştirmiş. [6]

 

Herhangi bir Office belgesinin üzerine sağ tıklayıp özelliklerine girdiğimizde aşağıdaki gibi özet bilgilere ulaşabiliriz :

 

 

 

Buradaki bilgilerden bazılarını değiştirebilirken bazılarıda salt okunurdur.

 

1. Senaryo

 

Bir kitabevi yabancı dilden çevirdiği eserler için çeviri yapan kişiye kelime başına bedel ödemektedir. Aysonu geldiğinde içinde bulundukları ay boyunca yapılan tüm çeviler hesaplanıp ödeme planı çıkarılmaktadır. Buna ek olarak yapılan çevirilerin karakter sayıları, boşluklarla birlikte karakter sayıları, sayfa sayıları ve kelime sayıları istatistiki bilgi olarak tutulmaktadır. Çeviri bedellerini hesaplayan şahıs zaman zaman word belgelerinde bulunan Author özelliğinde düzenleme yapabilmelidir.

 

2. Çözüm

 

Kullanıcının kendi dosyaları arasında rahatça dolaşabilmesi için Form’umuza bir adet TreeView kontrolü ekledim. Ve Form’un Load ve TreeView’ın AfterSelect event’larına gerekli kodları yazdım.

 

 

Makalenin örnek projesinde detaylarını inceleyebilirsiniz. Biz asıl konumuza odaklanalım.

 

         2.1 Okuma

 

Herhangi bir word dosyası seçildiğinde

 

DSOFile.OleDocumentPropertiesClass namsespace’indeki class’ın bir instance’ını oluşturuyoruz :

 

DSOFile.OleDocumentPropertiesClass odp = new DSOFile.OleDocumentPropertiesClass();

 

Daha sonra Open metodu ile ilgili dosyayı açmamız gerekiyor. Open metodu üç parametre almaktadır :

 

void OleDocumentPropertiesClass.Open(

string fileName,

bool ReadOnly,

DSOFile.dsoFileOpenOptions Options

);

 

 

fileName : Bilgileri okunacak dosyanın yolu.

 

ReadOnly : True ise açılan dosya bilgileri değiştirilemez. False ise değiştirilebilir.

 

Options : DSOFile içinde bulunan enum tipinde değişkendir. Alabileceği değerler

 

·         dsoOptionDefault

·         dsoOptionDontAutoCreate

·         dsoOptionOnlyOpenOLEFiles

·         dsoOptionOpenReadOnlyIfNoWriteAccess

·         dsoOptionUseMBCStringsForNewSets

 

 

Artık dosyamızı bilgi okumak için açıyoruz :

 

odp.Open(fileInfo.FullName, true, DSOFile.dsoFileOpenOptions.dsoOptionDefault);

 

 

Bundan sonra ihtiyacımız olan verileri odp objesinden okuyabiliriz.

 

string author = odp.SummaryProperties.Author;

      int characterCount = odp.SummaryProperties.CharacterCount;

      int characterCountWithSpaces = odp.SummaryProperties.CharacterCountWithSpaces;

      int pageCount = odp.SummaryProperties.PageCount;

int wordCount = odp.SummaryProperties.WordCount;

 

İşimiz bittikten sonra objemizi Close metodu ile kapatabiliriz. Close metodu ise bir parametre almaktadır.

 

void OleDocumentPropertiesClass(bool SaveBeforeClose)

 

SaveBeforeClose : True ise yapılan değişiklikleri kaydeder ve kapatır,  false ise kaydetmeden kapatır.

 

Herhangi bir değişiklik yapmadığımız için false değeri ile close metodunu çalıştırıyoruz:

 

odp.Close(false);

 

2.2 Yazma

           

            Save butonu altında yaptığımız tek değişiklik Author kısmıdır bu yüzden benzer sadece Author özelliğini değiştirip nesnemizi kapatırken true değerini vereceğiz.

 

DSOFile.OleDocumentPropertiesClass odp = new DSOFile.OleDocumentPropertiesClass();

      odp.Open(fileInfo.FullName, false, DSOFile.dsoFileOpenOptions.dsoOptionDefault);

odp.SummaryProperties.Author = txtAuthor.Text;

 

      odp.Close(true);

[1] http://www.codeproject.com/csharp/IFilter.asp

[2] http://www.adobe.com/support/downloads/detail.jsp?ftpID=2611

[3] http://www.aimingtech.com/jpeg_ifilter/download.htm

[4] http://www.aimingtech.com/av_ifilter/index.htm

[5] http://msdn2.microsoft.com/en-us/library/aa379968.aspx

[6] http://www.microsoft.com/downloads/details.aspx?FamilyID=9ba6fac6-520b-4a0a-878a-53ec8300c4c2&DisplayLang=en

Döküman Arama

Başlık :

Kapat