Soru & Cevap

Webview içinde pdf açma/indirme ...

04.10.2013 - 10:29

Html5 ile geliştirmiş olduğum projeyi webview içinde yayınladım.
Normal linkleri görüntülemede bir sıkıntı yaşamazken pdfleri görüntüleyemiyorum / indiremiyorum.
 

Daha önce bu konuda çalışma yapan varsa yardımcı olabilir mi?

406 Görüntülenme

8 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

Profile picture for user karargahh
karargahh
04.10.2013 - 04:45

eyvallah hocam (: bu çok iyi oldu gerisini hallederim (:

picture-472-1375079047.jpg
mehmet.altiparmak
04.10.2013 - 04:40

void Browser_Navigating(object sender, NavigatingEventArgs e)
        {
            e.Uri.AbsoluteUri; //Url burada istediğini yapabilirsin :) 

//Navigation'ı cancel etmek istersen e.Cancel = true ; yapman yeterli. 

        }

Profile picture for user karargahh
karargahh
04.10.2013 - 04:22

Birşey daha sormak istiyorum.

Açmak istediğim bazı dosyaların uzantısı .pdf değil. Pdf'i bir web sayfasının içerisinde açıyor.
Bu yüzden Android ortamında kullanmış olduğum aşağıdaki koda benzer bir kod kullanmak istiyorum.
 

public boolean shouldOverrideUrlLoading (WebView view, String url) {

        if (url.startsWith("http://mobile")){

        return true;

        }

        else

        {

                 startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));

                 return true;   

        } 

        } 

eğer uzantı http://mobile.  ile başlamıyorsa dışarı çıkmasına izin verecek.

Android'te kullanmış olduğum bu kod yapısını C# ile yazmam mümkün müdür?

picture-472-1375079047.jpg
mehmet.altiparmak
04.10.2013 - 03:31

Progress aslında bir ProgressBar nesnesi, sayfamda bir adet de ProgressBar vardı o satırları kaldırabilirsin istersen. Ya da uygulamanda sayfalar arası geçiş yaparken ekranda bir progress göstermek istersen sen de ekleyebilirsin. Basitçe Navigating handler'ında aktif hale getirip, Navigated ve NavigationFailed handlerlarında pasif hale getirebilirsin. 

void Browser_NavigationFailed(object sender, NavigationFailedEventArgs e)
        {
            Progress.Visibility = Visibility.Collapsed;
            Progress.IsEnabled = false;
        }

        void Browser_Navigated(object sender, NavigationEventArgs e)
        {
            Progress.Visibility = Visibility.Visible;
            Progress.IsEnabled = true;
        }

Sayfa xaml'ı da şu şekilde, 

<Grid x:Name="LayoutRoot" Background="Transparent">
       <phone:WebBrowser x:Name="Browser" />
        <ProgressBar x:Name="Progress" HorizontalContentAlignment="Stretch" IsIndeterminate="True" VerticalAlignment="Center" />
    </Grid>

 

Profile picture for user karargahh
karargahh
04.10.2013 - 02:01

Mehmet bey,

Yukarıdaki kodda bulunan şu kısmı alıp projeme dahil ettim.

 

void Browser_Navigating(object sender, NavigatingEventArgs e)
        {
            Progress.Visibility = Visibility.Visible;
            Progress.IsEnabled = true;

            var extension = Path.GetExtension(e.Uri.AbsoluteUri);
            if (!String.IsNullOrEmpty(extension) && extension == ".pdf")
            {
                Launcher.LaunchUriAsync(e.Uri);
                e.Cancel = true;

            }
        }

 

 

Yalnız  "Progress" ifadesinde hata verdi. Bu kısmı kullanmak için özel bir kütüphane tanımlamam gerekiyor mu?

Profile picture for user karargahh
karargahh
04.10.2013 - 11:20

Teşekkür ederim Adaş :)

Deneyip sonucu haber edeceğim.

picture-472-1375079047.jpg
mehmet.altiparmak
04.10.2013 - 11:13

Arka planda dosya indirmeyi gösteren örneğe buradan ulaşabilirsin buarada. 

picture-472-1375079047.jpg
mehmet.altiparmak
04.10.2013 - 11:10

Merhaba Adaş :) 

WebBrowser control'ünün pdf görüntüleme yeteneği bulunmuyor ne yazık ki. Yönlendirilen URL'in pdf olup olmadığını kontrol edip, pdf olduğu durumda download ettirebilirsin uygulamana. Ya da LauncherUriAsync fonksiyonunu kullanarak IE'a yönlendirebilirsin, IE pdf açmayı destekleyen bir uygulama var ise sistemde ona yönlendirecektir. Örneğin Adobe PDF Reader. Yölendirilen URL'i WebBrowser'ın Navigating event handler'i içerisinde kontrol etmen mümkün aşağıdaki gibi.

public MainPage()
        {
            InitializeComponent();
            Loaded += MainPage_Loaded;
            Browser.Navigating += Browser_Navigating;
            Browser.Navigated += Browser_Navigated;
            Browser.NavigationFailed += Browser_NavigationFailed;
        }

        void Browser_Navigating(object sender, NavigatingEventArgs e)
        {
            Progress.Visibility = Visibility.Visible;
            Progress.IsEnabled = true;

            var extension = Path.GetExtension(e.Uri.AbsoluteUri);
            if (!String.IsNullOrEmpty(extension) && extension == ".pdf")
            {
                Launcher.LaunchUriAsync(e.Uri);
                e.Cancel = true; //Ya da dosyayı indirecek kod bloğunu ekleyebilirsin buraya. 

            }
        }

        void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
            Browser.Navigate(new Uri("http://www.inkwelleditorial.com/pdfSample.pdf", UriKind.Absolute));
        }