SQLの窓

2013年06月30日


Win8 ストア(C#) / PDF viewer sample (Windows 8.1)

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 ストアアプリの最新記事】
posted by lightbox at 2013-06-30 00:07 | Win8 ストアアプリ | このブログの読者になる | 更新情報をチェックする
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり