タスク別ヘルプ > ファイルのアップロードとプレビュー |
Uploader for Silverlight と PDF for Silverlight を一緒に使用することで、PDF ファイルを作成してサーバーにアップロードできます。このトピックでは、ユーザーが印刷するファイルをプレビューできるように、C1Uploader クラスと C1Pdf を使用して、ストリームにアップロードされる PDF ファイルを作成します。簡略化のために、このプロジェクトでは、Uploader for Silverlight サンプルに含まれる C1UploaderHelper.cs コードファイルを使用します。
次の手順に従います。
Visual Studio 2008 で、[ファイル]→[新規作成]→[プロジェクト]を選択します。
[新しいプロジェクト]ダイアログボックスの左ペインから言語を選択し、テンプレートリストから[Silverlight アプリケーション]を選択します。プロジェクトの名前を入力し、[OK]をクリックします。[新しい Silverlight アプリケーション]ダイアログボックスが表示されます。
[OK]をクリックしてデフォルト設定を受け入れ、[新しい Silverlight アプリケーション]ダイアログボックスを閉じると、プロジェクトが作成されます。MainPage.xaml ファイルが開きます。
ソリューションエクスプローラウィンドウでプロジェクトを右クリックし、[参照の追加]を選択します。
[参照の追加]ダイアログボックスで、C1.Silverlight.Pdf.dll および C1.Silverlight.Uploader.dll アセンブリを見つけて選択し、[OK]をクリックしてプロジェクトに参照を追加します。
次の XAML マークアップを MainPage.xaml ファイルの <Grid> タグと </Grid> タグの間に追加します。
XAML |
コードのコピー
|
---|---|
<StackPanel Width="300" HorizontalAlignment="Center" VerticalAlignment="Center"> <TextBlock Text="Enter text here:" Margin="10"/> <TextBox Name="tb" Margin="10" Height="100" TextWrapping="Wrap"/> <Button Content="Print and Open PDF" Margin="10" Click="Button_Click" /> </StackPanel> |
このマークアップは、PDF に入れるテキストを入力するテキストボックスと、テキストを PDF に変換してファイルをサーバーにアップロードするためのボタンを作成します。
ソリューションエクスプローラで、MyProjectWeb アプリケーションを右クリックします。"MyProject" には、実際のプロジェクトアプリケーションの名前が入ります。[新しいフォルダ]を選択し、フォルダ名を "temp" に指定します。このフォルダには、PDF ファイルが置かれます。
ソリューションエクスプローラで、MainPage.xaml ファイルを右クリックして[コードの表示]を選択し、コードビューに切り替えます。
コードビューで、次の import 文をページの先頭に追加します(ページに含まれていない場合)。
コードのコピー
|
|
---|---|
Imports System.IO Imports C1.Silverlight.Pdf Imports C1.Silverlight.Uploader |
コードのコピー
|
|
---|---|
using System.IO; using C1.Silverlight.Pdf; using C1.Silverlight.Uploader; |
MainPage クラスに次のコードを追加します。
コードのコピー
|
|
---|---|
Private Sub Button_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) ' PDF を作成します Dim doc As New C1PdfDocument() Dim st As String = Nothing st = tb.Text doc.DrawString(st, New Font("Arial", 14), Colors.Black, New Rect(0, 0, 500, 100)) ' ストリームを生成します Dim stream As Stream stream = New MemoryStream() doc.Save(stream) ' ストリームをアップロードします Dim uploader = CreateUploader() uploader.AddFile("test.pdf", stream) uploader.BeginUploadFiles() AddHandler uploader.UploadCompleted, AddressOf uploader_UploadCompleted End Sub Private Sub uploader_UploadCompleted(ByVal sender As Object, ByVal e As UploadCompletedEventArgs) ' PDF に移動します If e.[Error] Is Nothing Then Dim url = New Uri(DirectCast(e.Response, String())(0)) System.Windows.Browser.HtmlPage.Window.Navigate(url) End If End Sub Private Function CreateUploader() As C1Uploader Dim mpUploader As New C1UploaderPost(FilesPerRequest.AllFilesInOneRequest) mpUploader.Settings.Address = C1.Silverlight.Extensions.GetAbsoluteUri("Handler.ashx") Return mpUploader End Function |
コードのコピー
|
|
---|---|
private void Button_Click(object sender, RoutedEventArgs e) { // PDF を作成します C1PdfDocument doc = new C1PdfDocument(); doc.DrawString(tb.Text, new Font("Arial", 12), Colors.Black, new Rect(0, 0, 500, 100)); // ストリームを生成します Stream stream; stream = new MemoryStream(); doc.Save(stream); // ストリームをアップロードします var uploader = CreateUploader(); uploader.AddFile("test.pdf", stream); uploader.BeginUploadFiles(); uploader.UploadCompleted += new EventHandler(uploader_UploadCompleted); } void uploader_UploadCompleted(object sender, UploadCompletedEventArgs e) { // PDF に移動します if (e.Error == null) { var url = new Uri(((string[])e.Response)[0]); System.Windows.Browser.HtmlPage.Window.Navigate(url); } } private C1Uploader CreateUploader() { C1UploaderPost mpUploader = new C1UploaderPost(FilesPerRequest.AllFilesInOneRequest); mpUploader.Settings.Address = C1.Silverlight.Extensions.GetAbsoluteUri("Handler.ashx"); return mpUploader; } |
Visual Studio のソリューションエクスプローラで、MyProjectWeb ソリューションを右クリックします。"MyProject" には、実際のプロジェクト名が入ります。[追加]→[既存の項目]オプションを選択します。
[既存項目の追加]ダイアログボックスで、サンプルがインストールされている ControlExplorerWeb フォルダに移動します。C1UploaderHelper.cs ファイルを選択し、[追加]ボタンをクリックします。デフォルトでは、ControlExplorerWeb フォルダは、ComponentOne Samples\Silverlight\ControlExplorer\ControlExplorerWeb の Documents フォルダに置かれています。
Visual Studio のソリューションエクスプローラで、MyProjectWeb ソリューションを右クリックします。"MyProject" には、実際のプロジェクト名が入ります。[追加]→[新しい項目]オプションを選択します。
[新しい項目の追加]ダイアログボックスで、[ジェネリックハンドラ]テンプレートを選択し、新しいクラスの名前を "Handler.ashx" に指定します。
[追加]をクリックしてプロジェクトにファイルを追加したら、[新しい項目の追加]ダイアログボックスを閉じます。
Handler.ashx コードファイルを開き、次の import 文が含まれていない場合は、これをページの先頭に追加します。"MyProject" には、ソリューションエクスプローラでの実際のプロジェクトアプリケーション名が入ります。
コードのコピー
|
|
---|---|
Imports System.Web Imports System.Web.Services Imports MyProject |
コードのコピー
|
|
---|---|
using System.Web; using System.Web.Services; using MyProject; |
ProcessRequest メソッドのデフォルトの実装を次のコードに置き換えます。
コードのコピー
|
|
---|---|
Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest Try ' カスタムパラメータを取得します Dim parameters As String = context.Request.Params("parameters") For i As Integer = 0 To context.Request.Files.Count - 1 ' アップロードされるファイルを取得し、完全パスを計算してサーバーに保存します Dim file As HttpPostedFile = context.Request.Files(i) Dim serverFileName As String = C1UploaderHelper.GetServerPath(context.Server, file.FileName) If C1UploaderHelper.ProcessPart(context, file.InputStream, serverFileName, 1, 1) Then ' アップロードされるファイルの URL を応答に追加します Dim url As String = C1UploaderHelper.GetUploadedFileUrl(context, "Handler.ashx", file.FileName) context.Response.Write((If(i > 0, " Else C1UploaderHelper.WriteError(context, C1UploaderHelper.ERROR_MESSAGE) Exit For End If Next Catch exc As Exception C1UploaderHelper.WriteError(context, exc.Message) context.Response.[End]() End Try End Sub |
コードのコピー
|
|
---|---|
public void ProcessRequest(HttpContext context) { try { // カスタムパラメータを取得します string parameters = context.Request.Params["parameters"]; for (int i = 0; i < context.Request.Files.Count; i++) { // アップロードされるファイルを取得し、完全パスを計算してサーバーに保存します HttpPostedFile file = context.Request.Files[i]; string serverFileName = C1UploaderHelper.GetServerPath(context.Server, file.FileName); if (File.Exists(file.FileName)) File.Delete(file.FileName); if (C1UploaderHelper.ProcessPart(context, file.InputStream, serverFileName, 1, 1)) { // アップロードされるファイルの URL を応答に追加します string url = C1UploaderHelper.GetUploadedFileUrl(context, "Handler.ashx", file.FileName); context.Response.Write((i > 0 ? " } else { C1UploaderHelper.WriteError(context, C1UploaderHelper.ERROR_MESSAGE); break; } } } catch (Exception exc) { C1UploaderHelper.WriteError(context, exc.Message); context.Response.End(); } } |
これで、テキストを PDF ファイルとしてアップロードしてプレビューする Silverlight アプリケーションを作成できました。アプリケーションの機能を確認するには、次の手順に従います。
[デバッグ]→[デバッグ開始]を選択して、アプリケーションを実行します。
テキストボックスにテキスト("Hello World!" など)を入力します。
[Print and Open PDF]ボタンをクリックします。
入力したテキストが test.pdf ファイルに追加されて開かれます。この PDF ファイルを閉じ、テキストボックスに別のテキストを入力し、同様にボタンをクリックします。PDF ファイルが開かれて、新しいテキストが表示されます。