Access ASP.NET Visual Studio

ASP.NETからAccessを使用してPDF作成した2(Access Visual Studio設定)

Access

WebサーバーにAccessのインストールと設定

帳票定義、SQL Serverとの接続等があるので Office 2016 professional の x86x64対応版をWebサーバー(IIS)にインストールしてみた。

WebサーバーにAccessのインストールとバージョン確認

どちらがインストールされた?32ビット? 64ビット? 確認してみた
Accessを起動して「ファイル」「アカウント」から確認した

32ビット版だった。指定しなかったと思うがVisual Studio 2017が32ビットなのでその関係?

まず、ASP.NETなしのAccess単体では帳票設計 PDF印刷OK

帳票の元データは SQL Server 2012 EXPRESS にある。
Accessから ODBC接続でリンクテーブルを作成した。
PDF作成方法はフリーの「PDF24」というPDF作成ソフトをWEBサーバーにインストールして このPDFプリンターに対して印刷すれば印刷できる。
Access単体では問題なく帳票作成からPDFファイル作成印刷までOK。

次にVisual Studio 側の設定

ASP.NETからAccessの機能を使うには  Visual Studio にCOM の参照設定が必要。

「プロジェクト」「プロパティ」「参照」「追加」「COM」で「参照マネージャー – プロジェクト名」を開く
AccessをインストールするとMicrofoft Office  関係の2つのライブラリーが追加された

 

「プロジェクト」「プロパティ」「参照」「追加」「COM」で「参照マネージャー – プロジェクト名」を開く
「Microsoft Access 16.0 Object Library」を追加

その他の4個のCOMも自動的に追加された。

PDF作成のコーディング(ASP.NET VB)

いよいよASP.NET側のプログラムコーディングだが、次のサイトを参考にさせていただいた。
Visual C# を使用して Microsoft Access を自動化する方法

 

実際に動作しているASP.NET(VB) のPDF作成保存部分のコード

Imports Microsoft.Office.Interop            'Access.Application
Imports Microsoft.Office.Interop.Access     'Access.Application
Imports System.Runtime.InteropServices      'Marshal.ReleaseComObject

Public Class ASPNET-ACCESS-SAMPLE
            '//////////////////////////////////
            '   AccessレポートからPDF作成
            '//////////////////////////////////
      Function SAMPLE()
            Dim oAccess As Access.Application = Nothing
            Try
                oAccess = New Access.Application
                oAccess.OpenCurrentDatabase("SAMPLE.accdb", False)
                oAccess.DoCmd.OutputTo(AcOutputObjectType.acOutputReport,
                RepName,
                ".pdf",
                "C:\PDFPATH\pdf_file",
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                AcExportQuality.acExportQualityPrint)
            Catch ex As Exception
                Debug.WriteLine(ex.Message)
            Finally
                Try
                    oAccess.Quit(Access.AcQuitOption.acQuitSaveNone)
                Catch
                End Try

                Try
                    Marshal.ReleaseComObject(oAccess)
                Catch ex As Exception

                End Try

                oAccess = Nothing
            End Try
        Catch ex As Exception

        End Try
End Class

上の oAccess = New Access.Application でエラー

クラス ’Application Class’ への参照は、そのアセンブリが相互運用機能型を埋め込むように構成されている場合には許可されません
対応:

PDFファイルの保存に失敗する

試しにWindows Formアプリでは問題なく保存できる。それが webアプリケーションでは保存できない。webアプリケーションではセキュリティが高いので偽装アカウントを使用している。
対策:ファイル名を指定して実行 DCOMCNFG   (GUI では「コンポーネントサービス」)

ASP.NET WEBアプリを 偽装アカウントで実行している為、その偽装アカウントにした。OK。

Accessの帳票設定

PDFプリンタのインストール(PDF24)

https://social.msdn.microsoft.com/Forums/en-US/d14388cc-e68a-4593-b811-d9f8eaddb423/create-pdf-using-docmdoutputto-method-in-legal-size-page?forum=isvvba

ここを見ると実行webサーバーのプリンタにADOBE PDFを設定してしなければならない、とある。有償のacrobatが必要とのこと。ライセンス的にacrobatのサーバー版が必要では?価格が!
他の開発でも実績のあるフリーの「PDF24」で代用する。

帳票の向きがおかしい

DoCmd.OutputTo でPDFファイルに出力したが AccessレポートがLANDSCAPE(横向き)で指定しても横向きにならない。
AccessインストールWEBサーバーにて「レポートデザイン ツール」「ページ設定」「ページ設定」「ページ」で「その他のプリンター」「プリンターの設定」をクリック

「PDF24」を選択
「印刷の向き」を”横” に設定して「OK」

コメント