C# Dsofile ile Office Belgelerinin Özelliklerini Düzenlemek - C# Webmaster bilgi bankası, knowledge base Webmaster Araçları

AnaSayfa > C# > C# Dsofile ile Office Belgelerinin Özelliklerini Düzenlemek
Kategori: C#
Gönderen: Admin
Tarih: 2008-11-11
Puan: 5   Puan:5 | Katılımcı:4 | Katılımcı : 4
Okunma: 5521
  
 
1 puan 2 puan 3 puan 4 puan 5 puan 6 puan 7 puan 8 puan 9 puan 10 puan

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





Yorumlar
Henüz Kimse Yorum Yapmamış, ilk yorumu siz ekleyin!
Yorum Ekleme Aparatı
Yorum Eklemek için lütfen sol menuden giris yapınız..
Toplam 0 yorum listelendi.