Silverlight 2.0 ile Powerpoint dosyalarının Thumbnail'lerini göstermek.

0 dakikada yazıldı

6710 defa okundu

Düzenle

Her programcının hayatında en az birkaç defe Office dosya formatları ile
ilgilendiği projeler olmuştur. Bu durum ister yeni bir Word dosyası
yaratmak olsun, ister bir Excel dosyasından veri çekmek olsun
OpenXML öncesinde ciddi sıkıntılar çektiğimiz bir gerçek. En basit
bir sebep olarak binary formatlı dokümanlar ile uğraşmak zorunda
kaldığımızı söyleyebiliriz. Office 2007 ile beraber tanıştığımız ve
sonlarına X harfleri eklenen dosya uzantıları aslında OpenXML'in
geldiğinin bir işaretiydi. İyi ki geldin diyerek yavaş yavaş konumuza
geçiş yapalım.

Daha önceki yazılarımda Silverlight 2.0 ile istemci tarafındaki
dosyalara
OpenFileDialog
ile ulaşabildiğimizi görmüştük. Yine aynı sistemi kullanarak bu sefer
amacımız bir Powerpoint dosyasını açarak söz konusu dosyanın Thumbnail
görüntüsünü Silverlight içerisinde göstermek. Aslında çok şanslıyız,
neden mi? Çünkü OpenXML var.

OpenXML'in bize faydası ne?

OpenXML formatındaki her dosya aslında bir ZIP dosyasıdır. Eğer dosyanın
uzantısını ZIP olarak değiştirirseniz aslında içerisine girerek tüm
detayları görebilirsiniz.

OpenXML dosyalarının içinde herşey XML formatında, açık seçik karşımızda.
OpenXML dosyalarının içinde herşey XML formatında, açık seçik
karşımızda.

Yukarıdaki basit bir Powerpoint dosyasının içeriği görebilirsiniz.
Gördüğünüz üzere aslında her şey ayrı ayrı XML dosyaları şeklinde
kaydedilmiş. Yani bir Office 2007 dosyası yaratmak özünde XML'ler
yaratarak ZIP'lemekten farklı değil. Hele bir de bu dosyaları açarak
programlarınızda göstermek istiyorsanız LINQ2XML'in gücünden de
faydalanarak çok hızlı çözümler geliştirmeniz mümkün.

Konumuza dönersek; bize Powerpoint dosyasının Thumbnail'i lazımdı. Bunun
için XML'ler içerisinde ilk slayt ile ilgili bilgileri alarak gerekli
çizimleri hazırlayabiliriz fakat buna gerek yok. Çünkü her PowerPoint
dosyası zaten işletim sisteminde gösterilecek olan Thumbnail'i kendi
içinde barındırır. OpenXML formatı sağ olsun, dosyamızın içini biraz
karıştırdığımızda görüyoruz ki ZIP dosyası içerisinde docProps
adındaki bir klasörün içinde thumbnail.jpeg adında bir JPG dosyası
bulunuyor. İşte bu dosya bizim Silverlight tarafında göstereceğimiz
thumbnail görselini içeriyor.

ZIP'ten resmi nasıl alacağız?

Yine daha önceki bir yazımda bir ZIP dosyalarını Silverlight tarafında
açabilme
nin
yollarına değinmiştik. Hatta daha da ileri giderek Silverlight 2.0 XAP
dosyaları da birer ZIP dosyası olduğu için onları açmıştık. Şimdi ise
sıra başka bir ZIP dosyası açmaya geldi, Powerpoint dosyaları.

İlk olarak Powerpoint dosyasını açarak Thumbnail'i gösterecek olan
uygulamamızın tasarımını basit bir şekilde yapalım. Sahnede bir düğme ve
bir de Image nesnesi olsun. Düğmeye basında kullanıcıdan bilgisayarından
bir Powerpoint dosyası seçmesini isteyelim ve sonrasında da seçili
dosyanın Thumbnail'ini Image nesnesi içerisinde gösterelim.

<UserControl
x
:Class="SilverlightApplication58.Page"

   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

   Width="400"
Height
="300">

    <Grid
x
:Name="LayoutRoot"
Background
="White">

        <Button
Height
="32" HorizontalAlignment="Left"
Margin
="24,32,0,0" VerticalAlignment="Top"
Width
="104" Content="Button"
x
:Name="btnDosyaAc"/>

        <Image
Margin
="160,32,80,140" x:Name="imgOnIzleme"/>

    </Grid>

</UserControl>

Sıra geldi gerekli işlemleri sırası ile yapacak olan kodumuzu yazmaya.

[VB]

        Dim DosyaAc As New
OpenFileDialog

        DosyaAc.Filter = "PowerPoint 2008
Dosyaları (*.pptx)|*.pptx"

        DosyaAc.Multiselect = False

        DosyaAc.ShowDialog()

[C#]

            OpenFileDialog DosyaAc
= new OpenFileDialog();

            DosyaAc.Filter = "PowerPoint
2008 Dosyaları (*.pptx)|*.pptx"
;

            DosyaAc.Multiselect = false;

            DosyaAc.ShowDialog();

İlk olarak yukarıdaki şekilde Silverlight tarafında kullanıcıdan
bilgisayarından bir Powerpoint dosyası seçmesini isteyelim. Sonrasında
bize dosyanın Stream'i gelecek ve biz de içerisinden istediğimiz JPEG
dosyasını almaya çalışacağız. Kodumuz içerisinde istemcideki dosyalara
ulaşmak için bir OpenFileDialog kullanıyor, filtresini de sadece
PPTX'leri gösterecek şekilde ayarlıyoruz.

[VB]

        If DosyaAc.SelectedFile IsNot Nothing Then

            Dim Foto As New
Imaging.BitmapImage()

            Dim Gelen =
Application.GetResourceStream(New
Windows.Resources.StreamResourceInfo(DosyaAc.SelectedFile.OpenRead(),
Nothing), New Uri("docProps/thumbnail.jpeg",
UriKind.Relative)).Stream

            Foto.SetSource(Gelen)

            imgOnIzleme.Source = Foto

        End If

[C#]

            if (DosyaAc.SelectedFile
!= null) {

                System.Windows.Media.Imaging.BitmapImage Foto = new System.Windows.Media.Imaging.BitmapImage();

                System.IO.Stream
Gelen = Application.GetResourceStream(new System.Windows.Resources.StreamResourceInfo(DosyaAc.SelectedFile.OpenRead(),
null), new Uri("docProps/thumbnail.jpeg", UriKind.Relative)).Stream;

                Foto.SetSource(Gelen);

                imgOnIzleme.Source = Foto;

            }

Bu noktada Silverlight ile beraber gelen Resource yapısını kullanacağız
ve sanki harici bir kaynak açarmış gibi ZIP dosyasını açtıracağız.
Sonuçta hedefin bir Powerpoint dosyası olup olmadığı önemli değil. Bizim
istediğimiz ZIP dosyasındaki docProps klasöründe bir dosyayı
almak. Kullandığımız taktik daha önceleri Silverlight 2.0 XAP
dosyalarından dosya almak için kullandığımız taktik ile birebir aynı.
StreamResource olarak OpenFileDialog'dan gelen dosyanın
içerisinde JPEG dosyasını alıyor ve GetResourceStream ile de dosyayı
çekiyoruz. Çektiğimiz dosyayı daha önce Foto adında tanımladığımız
BitmapImage değişkenine SetSource ile atayarak sonunda da
delimizdeki resmi sahnedeki Image nesnesine aktarıyoruz.

Böylece Powerpoint dosyasında Thumbnail'i bularak Silverlight 2.0
içerisinde çok kolay bir şekilde gösterebildik. Bu aynı taktiği ASP.NET
ile de kullanarak gerektiğinde sunucu taraflı olarak Powerpoint
dosyalarında Thumbnail'ler yaratmak OpenXML sayesinde çocuk
oyuncağına dönüşmüş durumda.

Hepinize kolay gelsin.