PDF viewer sample (Windows 8.1) 実行できる環境はまだ無いですが、内容は単純だったのでコメントを付けてみました。
//********************************************************* // // Copyright (c) Microsoft. All rights reserved. // //********************************************************* using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Navigation; using SDKTemplate; using System; using Windows.Foundation; using Windows.Storage; using Windows.Storage.Streams; using Windows.UI.Xaml; using Windows.UI.Xaml.Automation; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Media; using Windows.UI.Xaml.Media.Imaging; using Windows.UI.Xaml.Navigation; using Windows.UI.Xaml.Controls.Primitives; using System.Threading.Tasks; using Windows.Data.Pdf; namespace PDFAPI { public sealed partial class Scenario1 : SDKTemplate.Common.LayoutAwarePage { // A pointer back to the main page. This is needed if you want to call methods in MainPage such // as NotifyUser() // *************************************************** // 通知に使っていますが、機能とは関係ありません // *************************************************** MainPage rootPage = MainPage.Current; // *************************************************** // PDF を扱うクラス。インスタンスは、PdfDocument の // static メソッドで取得 // *************************************************** private PdfDocument _pdfDocument; enum RENDEROPTIONS { NORMAL, ZOOM, PORTION } uint PDF_PAGE_INDEX = 0; //first page uint ZOOM_FACTOR = 3; //300% zoom Rect PDF_PORTION_RECT = new Rect(100, 100, 300, 400); //portion of a page string PDFFILENAME = "Assets\\Windows_7_Product_Guide.pdf"; //Pdf file public Scenario1() { this.InitializeComponent(); } // *************************************************** // 未使用 // *************************************************** protected override void OnNavigatedTo(NavigationEventArgs e) { } // *************************************************** // ボタン毎に PDF を読み込んで簡単な加工してから表示 // *************************************************** public async Task DisplayImageFileAsync(StorageFile file) { // Display the image in the UI. BitmapImage src = new BitmapImage(); src.SetSource(await file.OpenAsync(FileAccessMode.Read)); // Image1 に表示 Image1.Source = src; } // *************************************************** /// PDF ページを読み込んで、png ファイルに書き出して /// 加工してイメージコントロールに表示 /// ■何故か変数名が jpgFile なのかは謎■ // *************************************************** private async Task RenderPDFPage(string pdfFileName,RENDEROPTIONS renderOptions) { try { // *************************************************** // まずファイルとして読み込み // *************************************************** StorageFile pdfFile = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(pdfFileName); // *************************************************** // インスタンスを取得 // *************************************************** _pdfDocument = await PdfDocument.LoadFromFileAsync(pdfFile); ; if (_pdfDocument != null && _pdfDocument.PageCount > 0) { // *************************************************** // 最初のページを取得 // *************************************************** var pdfPage = _pdfDocument.GetPage(PDF_PAGE_INDEX); if (pdfPage != null) { // *************************************************** // 書き込み用のフォルダ // *************************************************** StorageFolder tempFolder = ApplicationData.Current.TemporaryFolder; // *************************************************** // 書き込み用のファイル // *************************************************** StorageFile jpgFile = await tempFolder.CreateFileAsync(Guid.NewGuid().ToString() + ".png", CreationCollisionOption.ReplaceExisting); if (jpgFile != null) { // *************************************************** // 書き込み用のファイルのストリーム( ReadWrite ) // *************************************************** IRandomAccessStream randomStream = await jpgFile.OpenAsync(FileAccessMode.ReadWrite); // *************************************************** // 書き込み用のオプション // *************************************************** PdfPageRenderOptions pdfPageRenderOptions = new PdfPageRenderOptions(); switch (renderOptions) { case RENDEROPTIONS.NORMAL: //Render Pdf page with default options // *************************************************** // 書き込み // *************************************************** await pdfPage.RenderToStreamAsync(randomStream); break; case RENDEROPTIONS.ZOOM: //set PDFPageRenderOptions.DestinationWidth or DestinationHeight with expected zoom value Size pdfPageSize = pdfPage.Size; pdfPageRenderOptions.DestinationHeight = (uint)pdfPageSize.Height * ZOOM_FACTOR; //Render pdf page at a zoom level by passing pdfpageRenderOptions with DestinationLength set to the zoomed in length // *************************************************** // 書き込み // *************************************************** await pdfPage.RenderToStreamAsync(randomStream, pdfPageRenderOptions); break; case RENDEROPTIONS.PORTION: //Set PDFPageRenderOptions.SourceRect to render portion of a page pdfPageRenderOptions.SourceRect = PDF_PORTION_RECT; //Render portion of a page // *************************************************** // 書き込み // *************************************************** await pdfPage.RenderToStreamAsync(randomStream, pdfPageRenderOptions); break; } // *************************************************** // 書き込み完了 // *************************************************** await randomStream.FlushAsync(); // *************************************************** // 後始末 // *************************************************** randomStream.Dispose(); pdfPage.Dispose(); // *************************************************** // 表示 // *************************************************** await DisplayImageFileAsync(jpgFile); } } } } catch (Exception err) { rootPage.NotifyUser("Error: " + err.Message, NotifyType.ErrorMessage); } } // *************************************************** // 表示ボタン1 // *************************************************** private async void RenderPage_Click(object sender, RoutedEventArgs e) { try { rootPage.NotifyUser("Rendering page...", NotifyType.StatusMessage); await RenderPDFPage(PDFFILENAME, RENDEROPTIONS.NORMAL); rootPage.NotifyUser("Rendered page ", NotifyType.StatusMessage); } catch (Exception err) { rootPage.NotifyUser("Error: " + err.Message, NotifyType.ErrorMessage); } } // *************************************************** // 表示ボタン2 // *************************************************** private async void RenderPageZoom_Click(object sender, RoutedEventArgs e) { try { rootPage.NotifyUser("Rendering page at zoom level...", NotifyType.StatusMessage); await RenderPDFPage(PDFFILENAME, RENDEROPTIONS.ZOOM); rootPage.NotifyUser("Rendered page at zoom level", NotifyType.StatusMessage); } catch (Exception err) { rootPage.NotifyUser("Error: " + err.Message, NotifyType.ErrorMessage); } } // *************************************************** // 表示ボタン3 // *************************************************** private async void RenderPagePortion_Click(object sender, RoutedEventArgs e) { try { rootPage.NotifyUser("Rendering portion of a page...", NotifyType.StatusMessage); await RenderPDFPage(PDFFILENAME, RENDEROPTIONS.PORTION); rootPage.NotifyUser("Rendered portion of a page ", NotifyType.StatusMessage); } catch (Exception err) { rootPage.NotifyUser("Error: " + err.Message, NotifyType.ErrorMessage); } } } }
|
【Win8 ストアアプリの最新記事】
- C# : HttpClient で Post と Get する汎用 static クラス
- Win8.1 ストアアプリ(JS) : Visual Studio 2013 で Three.js(v65) の WebGLRenderer の動作を確認しました
- WinJS ストア : Three.js を組み込んで、『画像を飛ばす』テンプレート( Bird.js を利用 )
- WinJS ストア : 『背景画像をチェンジする2画面アプリ』のテンプレート
- VS2012ストア(C#) : WebView テンプレート
- VS2012(C#)ストア : ListView Twitter 検索テンプレート
- イラストを背景にして2ページの画面遷移を解りやすくした Windows Store テンプレート
- Twitter API の自分のアプリのトークンを使って投稿するだけの class VS2012_Twitter
- ストアアプリの TextBox のスクロールバー
- Win8 ストアアプリの、メモリ上にページを残す画面遷移と、前画面のコントロールの参照
- Win8 ストアアプリで、『選択肢を応答するダイアログ』を簡単に使うための MessageBox クラス
- Win8 ストアから Post 投稿
- Win8ストア XAML の AppBarButtonStyle のContent に指定する 16進数 Unicode の取得
- Win8 ストア : UrlEncode と UrlDecode
- Win8 ストア : HttpClient + XDocument で RSS の取得
- Win8 ストア : リストボックス テンプレート
- Win8 ストア : ファイルアクセス テンプレート
- Win8 ストア : ストアブランク テンプレート
- AppBar テンプレート / Win8 ストアアプリ(C#)
- Windows ストアアプリの AppBar を作成してテストする