SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

現役エンジニア直伝! 「現場」で使えるコンポーネント活用術(ActiveReports)

Windows Azure上で帳票コンポーネント「ActiveReports for .NET 6.0J」を動作させてみた

  • このエントリーをはてなブックマークに追加

ASP.NET medium trustでのActiveReportsの動作を試す

 Windows Azure trustがASP.NET medium trust相当だとするならば、まずはActiveReportsをASP.NET medium trustで動作させ、どのような制限が加わるか、そして、それをどのように解決すればよいかを調べてみます。

 ASP.NET 4でのActiveReports for .NET 6.0Jの使用は、Visual Studio 2010対応版で動作保障されています。そのため、ASP.NET medium trustの動きを事前に把握することで、動作保障のないWindows Azure環境での動きで不具合が生じたときに、Windows Azure環境特有の問題かどうかの判断ができるはずです。

プログラムの流れ

  1. 「Default.aspx」で[PDF]ボタンをクリックし、「CZ1009Reports.aspx」にリダイレクトする
  2. 「CZ1009Reports.aspx」では、PDF形式のバイナリデータを「CZ1009Reports.aspx」からブラウザへのレスポンスとする
  3. ブラウザ側でAdobe ReaderによりPDF表示
リスト1 PDFファイルをバイナリデータとして生成
Imports DataDynamics.ActiveReports
Imports DataDynamics.ActiveReports.Export.Pdf

Public Class ActiveReportsClass
    Private block As Object = Nothing
    ''' <summary>
    ''' PDFデータを取得する
    ''' </summary>
    Public Function GetPdfDatas() As Byte()
        Dim memStream As System.IO.MemoryStream
        Dim ds As DataSet = GetRecords()

        Using _rpt As New CZ1009ReportsClass
            _rpt.Document.Printer.PrinterName = ""
            _rpt.PageSettings.PaperKind = System.Drawing.Printing.PaperKind.A4
            _rpt.PageSettings.Orientation = Document.PageOrientation.Portrait
            _rpt.PageSettings.Margins.Top = ActiveReport.CmToInch(0.5F)
            _rpt.PageSettings.Margins.Bottom = ActiveReport.CmToInch(0.5F)
            'データを割り当てる
            _rpt.DataSource = ds.Tables("Enviroment")
            ' レポートを作成
            _rpt.Run(False)
            'pdfエクスポートオブジェクトを生成します
            Using _pdf = New PdfExport
                ' PDFの出力用のメモリストリームを作成します
                memStream = New System.IO.MemoryStream
                ' メモリストリームにPDFエクスポートを行います
                _pdf.Security.Use128Bit = True
                _pdf.Security.OwnerPassword = "hatsune"
                _pdf.Security.Permissions = PdfPermissions.AllowPrint
                _pdf.Security.Encrypt = True
                _pdf.Export(_rpt.Document, memStream)
            End Using
        End Using
        Return memStream.ToArray()
    End Function
End Class

medium trust制限をかけないときの動作

 Visual Studio 2010のASP.NET Webアプリケーションテンプレートで新規作成したASP.NET Webアプリケーションは、medium trust制限がかかっていません。この状態でまずは動作させて、プログラムコードが意図したとおりに動くかを確認します。

図3 medium trust制限をかけないときの動作
図3 medium trust制限をかけないときの動作

ASP.NET medium trustでの動作

 ASP.NET medium trustに設定するためには、「Web.config」にtrust要素を追加します。

リスト2 ASP.NET medium trust を設定するWeb.config

<?xml version="1.0" encoding="utf-8"?>

<configuration>
    <system.web>
      <trust level="Medium"></trust>
      <compilation debug="true" strict="false" explicit="true" targetFramework="4.0" />
    </system.web>

</configuration>
図4 ASP.NET medium trustでの動作
図4 ASP.NET medium trustでの動作

 図4のとおり、medium trustの場合、指定したフォントと異なるフォントが印字され、位置なども正しくありません。

PDFフォントファクトリを設定する

 ActiveReportsのヘルプに、「PDFフォントファクトリ」を使えばmedium trustであっても、指定したフォントが印字されることが記載されていたので、試してみます。

 PDFフォントファクトリの設定は「Web.config」で行います。

リスト3 PDFフォントファクトリを設定するWeb.config
<?xml version="1.0" encoding="utf-8"?>

<configuration>
  <configSections>
    <sectionGroup name="ActiveReports.PdfExport">
      <section name="FontFactory"
        type="DataDynamics.ActiveReports.Web.FontFactorySectionHandler,ActiveReports.Web,
    	Version=6.2.2659.1, Culture=neutral,PublicKeyToken=cc4967777c49a3ff"
        requirePermission="false"/>
    </sectionGroup>
  </configSections>
  <ActiveReports.PdfExport>
    <FontFactory Mode="File">
      <AddFolder VirtualPath="~/Fonts" Recurse="true"/>
      <Substitute Font="Helv" To="Helvetica"/>
      <SetFallbackFont Font="Arial"/>
      <!-- font link nodes -->
      <AddFontLink Font="Arial" List="SimSun,gulim,PMingLiU"/>
      <AddFontLink Font="Tahoma" List="MS UI Gothic,SimSun,gulim,PMingLiU"/>
      <AddFontLink Font="MS UI Gothic" List="SimSun,gulim,PMingLiU,Microsoft Sans Serif" IsDefault="true"/>
    </FontFactory>
  </ActiveReports.PdfExport>

  <system.web>
      <trust level="Medium"></trust>
      <compilation debug="true" strict="false" explicit="true" targetFramework="4.0" />
    </system.web>

</configuration>

 次に、プロジェクトに「Fonts」フォルダを作成して、そこに「C:\Windows\Fonts」フォルダから目的のフォントファイルをコピーしておきます(サンプルにはフォルダが含まれていますが、フォントファイルは含んでいません)。

 PDFフォントファクトリを設定し、実際に動かしてみると、図5のように正しいPDFへの印字結果を得ることができました。プログラムコード側は1行の変更も必要ありませんでした。

図5 PDFフォントファクトリ設定時の動作
図5 PDFフォントファクトリ設定時の動作

 なお、PDFフォントファクトリを使ったアプリケーションを配布するときは、今回のサンプルのように、「Fonts」フォルダにコピーするフォントファイルは、設置先の実環境からコピーするのがよいでしょう。

図6 Fontsフォルダの設置
図6 Fontsフォルダの設置

 しかし、最も良いのは、medium trustでアプリケーションを実行する必要があるかどうかを検討することだと思います。

次のページ
Windows Azureクラウドサービステンプレートを使う

修正履歴

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
現役エンジニア直伝! 「現場」で使えるコンポーネント活用術(ActiveReports)連載記事一覧

もっと読む

この記事の著者

初音玲(ハツネアキラ)

 国内SIerのSEでパッケージ製品開発を主に行っており、最近は、空間認識や音声認識などを応用した製品を手掛けています。 個人的には、仕事の内容をさらに拡張したHoloLensなどのMRを中心に活動しています。 Microsoft MVP for Windows Development ブログ:http://hatsune.hatenablog.jp/

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5477 2010/10/04 17:42

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング