4. コントロール情報

4.1. .NET/.NET Framework版

.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

.NET Framework Windowsフォームアプリ

 32bit/64bitアプリ開発

 32bitフォームデザイン/ツールパネルへのコントロール登録

×

 64bitフォームデザイン/ツールパネルへのコントロール登録

×

.NET Windowsフォームアプリ

 32bit/64bitアプリ開発

×

 32bitフォームデザイン/ツールパネルへのコントロール登録

×

×

 64bitフォームデザイン/ツールパネルへのコントロール登録

×

×

.NETでは、フォームデザイナーでネイティブDLLを利用するコントロールがサポートされないためです。このためGUIの開発には直接コードを記述する、もしくは .NET Frameworkのフォームデザイナーでデザインし生成されたコードを流用するなどの工夫が必要になります。なお、WPFなど直接フォームデザイナーにコントロールのDLLをロードしない場合は問題ありません。

4.2. 動作に必要なモジュール、手続き等

依存するファイルは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)

4.3. 64bitコントロール

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添付のサンプルプロジェクトではこちらの方法を使用しています。

参考) https://docs.microsoft.com/ja-jp/visualstudio/ide/how-to-configure-projects-to-target-platforms?view=vs-2019

コーディング上の注意点

4.4. 座標系について

以下の3つの座標系があります。

クライアント座標はコントロール上の座標でX座標とY座標で一意に決まります。一方、論理座標およびビュー座標はページ上の座標です。LogicalPointクラスで表現され、ページ番号とX座標とY座標を含みます。

クライアント座標

論理座標

ビュー座標

PDF Viewer API

原点

コントロールの左上

用紙の左上

表示上の用紙左上

表示上の用紙左上

座標軸正方向

表示上の右下

用紙の右下

表示上の右下

表示上の右下

長さの単位

TWIP

TWIP

TWIP

TWIP

連続ページや見開き表示など、コントロールの表示状態によって、クライアント座標と、論理座標およびビュー座標との対応関係は実行時に変化します。下記の図において、青はクライアント座標系、赤は論理座標系、緑はビュー座標系を表しています。

Please enter alt text.

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引数を解釈します。

4.5. タッチ操作

4.6. PDF保存時の暗号化

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となります。

4.7. 文字列検索

4.8. オブジェクトID

注意事項

4.9. ファイルオープン時の一時ファイルへのコピー

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のファイルがロックされます。