.NET版と.NET Framework版では利用条件が異なります。情報を下記にまとめました。
.NET8 |
.NET6 |
.NET Framework |
|
ネームスペース |
AvsDotNetGuiCtl |
AvsDotNetGuiCtl |
AvsDotNetGuiCtl |
DLL名 |
AvsGuiCtl60Net80.dll |
AvsGuiCtl60Net60.dll |
AvsDotNetGuiCtl.dll |
対象フレームワーク |
.NET8 |
.NET6 |
.NET Framework 4.6.2 以上 |
検証済み環境 |
Visual Studio 2022 Visual C# Windowsフォームアプリ(.NET8) |
Visual Studio 2022 Visual C# Windowsフォームアプリ(.NET6) |
Visual Studio 2019 Visual C# Windowsフォームアプリアプリケーション(.NET Framework) |
また、Visual Stdioでサポートされる開発作業もバージョンにより異なります。
開発内容 |
VS2019 |
VS2022 |
32bit/64bitアプリ開発 |
〇 |
〇 |
32bitフォームデザイン/ツールパネルへのコントロール登録 |
〇 |
× |
64bitフォームデザイン/ツールパネルへのコントロール登録 |
× |
〇 |
32bit/64bitアプリ開発 |
× |
〇 |
32bitフォームデザイン/ツールパネルへのコントロール登録 |
× |
× |
64bitフォームデザイン/ツールパネルへのコントロール登録 |
× |
× |
.NETでは、フォームデザイナーでネイティブDLLを利用するコントロールがサポートされないためです。このためGUIの開発には直接コードを記述する、もしくは .NET Frameworkのフォームデザイナーでデザインし生成されたコードを流用するなどの工夫が必要になります。なお、WPFなど直接フォームデザイナーにコントロールのDLLをロードしない場合は問題ありません。
依存するファイルはbin\Win32またはbin\x64フォルダに含まれる下記ファイルになります。
ご利用になるAPIに応じて必要なモジュールをご利用ください。
インタフェース |
必要なモジュール |
.NET8(32bit) |
bin\Win32\ AvsGuiCtl60Net80.dll ijwhost.dll 共通モジュール(32bit) .NETデスクトップランタイム8.0(x86) |
.NET8(64bit) |
bin\x64\ AvsGuiCtl60Net80.dll ijwhost.dll 共通モジュール(64bit) .NETデスクトップランタイム8.0(x64) |
.NET6(32bit) |
bin\Win32\ AvsGuiCtl60Net60.dll ijwhost.dll 共通モジュール(32bit) .NETデスクトップランタイム6.0(x86) |
.NET6(64bit) |
bin\x64\ AvsGuiCtl60Net60.dll ijwhost.dll 共通モジュール(64bit) .NETデスクトップランタイム6.0(x64) |
.NET Framework(32bit) |
bin\Win32\ AvsDotNetGuiCtl.dll 共通モジュール(32bit) .NET Framework 4.6.2以上(x86) |
.NET Framework(64bit) |
bin\x64\ AvsDotNetGuiCtl.dll 共通モジュール(64bit) .NET Framework 4.6.2以上(x64) |
共通モジュール(32bit) |
bin\Win32\ AvsGuiCtl60.dll AvsAHCertificate40.dll AvsAHCommon16.dll AvsAHDMC16.dll AvsAHEditBox11.dll AvsAHFontService17.dll AvsAHGdiPlus11.dll AvsAHGraphicService12.dll AvsAHMFCCommon12.dll AvsAHPDFEditLib10.dll AvsAHPDFFixUp11.dll AvsAHPDFLib40.dll AvsCommon60.dll AvsEngine60.dll AvsFont60.dll AvsGdiCtl60.dll AvsGraphic60.dll AvsPDFCreator60.dll AvsPDFLinearizer60.dll AvsPdfReader60.dll AvsPDFRes60.dll AvsPdfTk71.dll AvsPdfTkEx71.dll AvsPDFToolPage60.dll AvsRender60.dll AvsSVGCreator60.dll AvsText60.dll AvsXfoCommon60.dll icuin55.dll icuuc55.dll icudt55.dll Ijwhost.dll base2 (フォルダ) JapanColor2001Coated.icc Visual Studio 2015、2017、2019、および 2022 用 Microsoft Visual C++ 再頒布可能パッケージ(x86) |
共通モジュール(64bit) |
bin\x64\ AvsGuiCtl60.dll AvsAHCertificate40.dll AvsAHCommon16.dll AvsAHDMC16.dll AvsAHEditBox11.dll AvsAHFontService17.dll AvsAHGdiPlus11.dll AvsAHGraphicService12.dll AvsAHMFCCommon12.dll AvsAHPDFEditLib10.dll AvsAHPDFFixUp11.dll AvsAHPDFLib40.dll AvsCommon60.dll AvsEngine60.dll AvsFont60.dll AvsGdiCtl60.dll AvsGraphic60.dll AvsPDFCreator60.dll AvsPDFLinearizer60.dll AvsPdfReader60.dll AvsPDFRes60.dll AvsPdfTk71.dll AvsPdfTkEx71.dll AvsPDFToolPage60.dll AvsRender60.dll AvsSVGCreator60.dll AvsText60.dll AvsXfoCommon60.dll icuin55.dll icuuc55.dll icudt55.dll base2 (フォルダ) JapanColor2001Coated.icc Visual Studio 2015、2017、2019、および 2022 用 Microsoft Visual C++ 再頒布可能パッケージ(x64) |
32bit/64bitの取扱い
開発の場面 |
説明 |
対処 |
VS2019 フォームデザイナー上でのデザイン(.NET Framework) |
・Windowsフォームアプリケーションのデザイン時には Visual Studio が参照するPATH環境変数上にコントロールの関連DLLが存在している必要があります。 ・Visual Studio 2019 は32bitアプリケーションですので 32bit版しかフォームデザイナーで利用できません。 |
・Windows フォームデザイン時には、32bitDLL(bin\Win32)をPATHに追加した状態で、Visual Studio を起動します。 ・64bit 版のWindows フォームアプリケーション開発時にコントロールのレイアウトを行う場合は、32bit版のWindowsフォームアプリケーションとして開発・レイアウトを行ったのちに、64bit版としてビルドしてください。 |
VS2022フォームデザイナー上でのデザイン(.NET Framework) |
・Windowsフォームアプリケーションのデザイン時には Visual Studio が参照するPATH環境変数上にコントロールの関連DLLが存在している必要があります。 ・Visual Studio 2022 は64bitアプリケーションですので 64bit版しかフォームデザイナーで利用できません。 |
・Windows フォームデザイン時には、64bitDLL(bin\x64)をPATHに追加した状態で、Visual Studio を起動します。 ・32bit 版のWindows フォームアプリケーション開発時にコントロールのレイアウトを行う場合は、64bit版のWindowsフォームアプリケーションとして開発・レイアウトを行ったのちに、32bit版としてビルドしてください。 |
Visual Studio 上でのデバッグ実行 |
・実行時にプラットフォーム(x86、x64)に合わせたSDKの関連DLLが参照できる必要があります。 |
・プロジェクトの出力先に、x86、x64のそれぞれの出力先フォルダに、bin\x86、bin\x64以下の関連DLLやリソースをコピーしてください。 ・もしくは、x86、x64にあわせて、PATH環境変数にbin\x86、bin\x64をそれぞれ追加してVisual Studio がそれを参照できるようにしてください。(x86、x64にあわせて切り替える。同時に指定されていると動作しません。) |
プロジェクトへの参照追加 |
プロジェクト上でプラットフォーム(x86、x64)にあわせたDLLのファイル参照を追加する必要があります。 |
・Visual Studio 上ではプラットフォーム個別にDLLのファイル参照を指定する事ができません。「プロジェクトへの参照追加について」に記載した方法でプラットフォームにあわせて指定してください。 |
プロジェクトへの参照追加について
<Reference Include="AvsDotNetGuiCtl">
<HintPath Condition=" '$(Platform)' == 'x86' ">..\..\Windows-VS2019\Win32\Release\AvsDotNetGuiCtl.dll</HintPath>
<HintPath Condition=" '$(Platform)' == 'x64' ">..\..\Windows-VS2019\x64\Release\AvsDotNetGuiCtl.dll</HintPath>
</Reference>
ここではHintPathで条件指定を行い切り替えていますが、ItemGroupで切り替えることも可能です。
この方法の利点は x86、x64それぞれプロジェクトを用意する必要がない点です。一方手動で編集するため、間違いやすい、Visual Sutido で不意に編集を行うと編集が上書きされてしまう等のデメリットがあります。プロジェクトファイルに詳しくなければ1つめの方法をお勧めいたします。SDK添付のサンプルプロジェクトではこちらの方法を使用しています。
コーディング上の注意点
以下の3つの座標系があります。
クライアント座標はコントロール上の座標でX座標とY座標で一意に決まります。一方、論理座標およびビュー座標はページ上の座標です。LogicalPointクラスで表現され、ページ番号とX座標とY座標を含みます。
クライアント座標 |
論理座標 |
ビュー座標 |
PDF Viewer API |
|
原点 |
コントロールの左上 |
用紙の左上 |
表示上の用紙左上 |
表示上の用紙左上 |
座標軸正方向 |
表示上の右下 |
用紙の右下 |
表示上の右下 |
表示上の右下 |
長さの単位 |
TWIP |
TWIP |
TWIP |
TWIP |
連続ページや見開き表示など、コントロールの表示状態によって、クライアント座標と、論理座標およびビュー座標との対応関係は実行時に変化します。下記の図において、青はクライアント座標系、赤は論理座標系、緑はビュー座標系を表しています。
HitTestメソッドやMouseDownCイベント等で取得される位置はクライアント座標であるものがあります。クライアント座標から論理座標/ビュー座標に変換するには ClientToLogicalメソッドを利用してください。
論理座標は用紙の左上原点(0, 0)で右下方向にプラス、単位はTWIP(1TWIP=1/20ポイント)になります。表示上の左上が原点となるPDF Viewer APIの座標系とは若干異なることになりますので注意してください。
ビュー座標系は表示上の原点が用紙の左上となります。表示上の位置指定を行う場合はこちらを利用すると便利です。
論理座標とビュー座標は実行に ViewCoordプロパティで切り替えることができます(false…論理座標、true…ビュー座標)。注釈の作成など位置座標を指定する場合に、アプリケーションに都合のよい座標系をご利用ください。コントロール内部で指定された座標系にあわせて相互変換を行います。
■ViewCoordプロパティの影響を受けるプロパティ、メソッド
名称 |
影響を受けるデータ |
ClientToLogical |
戻り値(LogicalPoint) |
ClientToLogicalRect |
戻り値(System.Drawing.Rectangle) |
GetCursorPosition |
戻り値(LogicalPoint) |
ScrollToPosition |
引数lPos(LogicalPoint) |
CreateObject |
引数object (AvsObject)のCoordinatesプロパティ |
ModifyObjects |
引数object (AvsObject)のCoordinatesプロパティ ※ids引数で指定される注釈オブジェクトが存在するページが異なる場合、最初の注釈オブジェクトのページ回転にあわせて座標を解釈します。 注釈オブジェクトのCoordinatesプロパティの編集時に注釈が存在するページが異なる場合は、複数回の呼び出しに分けて指定してください。 |
GetObjectInfo |
戻り値(AvsObject)のCoordinatesプロパティ |
GetTextInfoInRect |
戻り値(ArrayList)の要素AvsTextInfo のRectプロパティ、WritingModeプロパティ |
GetSelectedTextInfo |
戻り値(ArrayList)の要素AvsTextInfo のRectプロパティ、WritingModeプロパティ |
SelectTextString |
引数 start(LogicalPoint)、end(LogicalPoint) |
MakeBmpPage |
引数 rcClip (System.Drawing.Rectangle) |
MakeJpegPage |
引数 rcClip (System.Drawing.Rectangle) |
MakePngPage |
引数 rcClip (System.Drawing.Rectangle) |
MakeSvgPage |
引数 rcClip (System.Drawing.Rectangle) |
FitViewToRect |
引数 lPos1, lPos2 (LogicalPoint) |
※GetPageWidth/GetPageHeightメソッドは常に論理座標系でのページ幅、高さを返します。
※MakeTiffPageメソッドは常に論理座標系にてrcClip引数を解釈します。
PDFバージョン |
暗号方式 |
1.3 |
40bit RC4 ※ |
1.4 |
128bit RC4 |
1.5 |
128bit RC4 |
1.6 |
128bit AES |
1.7 |
256bit AES |
2.0 |
256bit AES |
※ユーザーパスワードのみの場合、128bit RC4となります。
注意事項
V6以降では、オープンしたファイルを一時フォルダにコピーしてから編集するようになりました。
作成される一時ファイルは以下のようになります。
一時ファイルの種類 |
ファイル名 |
V5 |
V6 |
オープン時のコピー |
%TEMP%\ava_~.tmp |
なし |
あり |
保存時のコピー |
%TEMP%\tmpXXXX.tmp.pdf |
あり |
あり |
※ファイル名は予告なく変更される可能性があります。
詳しくは、以下の動作になります。
V5 |
V6以降 |
|
ファイルオープン |
・指定されたファイルを直接オープンします。 ・ファイルはコピーされません。 |
・指定されたPDFを一時フォルダにコピーします。 ・コピーした一時ファイルをオープンします。 ・ファイル名は%TEMP%\avs_~.tmpの形式になります。(現状の仕様。変更の可能性あり) |
DocumentPath |
指定した入力ファイルパス |
指定した入力ファイルパス |
TemporaryPath |
APIなし |
一時ファイルのファイルパス |
上書き保存 |
DocumentPath に上書き |
DocumentPathに上書き (一時ファイルは更新されない) |
保存中の一時ファイル |
作成する |
作成する |
ファイルクローズ |
― |
クローズ後、TemporaryPathを削除します。 |
ファイルのロック |
オープン中DocumentPathのファイルがロックされます。 |
オープン中TempraryPathのファイルがロックされます。 保存中、DocumentPathのファイルがロックされます。 |