DocuWorksの付箋アノテーションとは
DocuWorksのアノテーションの中でも、使用頻度の高い付箋。
DocuWorksの付箋アノテーションは、色を白・赤・青・黄・緑から選べて、さらに付箋の上に文字が書けます。
ドキュワークスの文書上で、付箋がつけられて、なかなか面白い機能です。
今回は、付箋アノテーションをVBAから作成、操作します。
基礎資料
動作確認環境
WindowsXP
Excel 2002 SP3
Fuji Xerox DocuWorks Desk 6.2.4
Fuji Xerox DocuWorks API DLL xdwapi.dll 6.2.0.35
参考資料
DocuWorksTM Development Tool Kit 6.2.5 リリースノート
(http://www.fujixerox.co.jp/download/soft/DocuWorks/pop/dwsdk625/Readme.html)
DocuWorks 6以前のSDKは(http://www.fujixerox.co.jp/download/soft/DocuWorks/download.html)からダウンロード。
DocuWorks 7のSDKは(http://www.fujixerox.co.jp/product/software/DocuWorks/download.html)からダウンロード。
実際にXDWAPIを利用する際には、DocuWorks API (XDWAPI)仕様書(XDWAPI.XDW)で、詳細を確認してください。
各種定数やエラーコードなどは、XDWAPIを利用するためのヘッダファイル(xdw_api.h xdwapian.h)に記載されています。
サンプルスクリプト
では、サンプルスクリプトです。
Dドライブ直下にある、test001.xdwの1ページ目に、幅20cm、高さ1cmの付箋を貼り付けます。
その付箋を親として、子のテキストアノテーションを貼り付け、内容文字列を「漢字ひらがなabc」とし、フォントサイズを21.6pt、フォントカラーを赤、背景色を無しに設定します。
もちろん、親子関係を固定しないといけないので、XDW_StarchAnnotation関数で、固定します。
詳しくは、サンプルスクリプトをご覧ください。
文字が入力された付箋アノテーションを作成するサンプルスクリプト
Option Explicit '動作環境 WindowsXP Excel2002 DocuWorks6.2 '2.34 XDW_GetDocumentInformation DocuWorksファイル全体に関わる情報を得る。 Private Declare Function XDW_GetDocumentInformation Lib "D:¥dwsdk625¥XDWAPI¥DLL¥xdwapi.dll" (ByVal handle As Long, ByRef pDocumentInfo As XDW_DOCUMENT_INFO) As Long Private Type XDW_DOCUMENT_INFO nSize As Long '構造体XDW_DOCUMENT_INFOのバイト数を設定する。 nPages As Long '総ページ数。 nVersion As Long 'DocuWorksファイルのファイルフォーマットのバージョン。 nOriginalData As Long 'オリジナルデータの数。 nDocType As Long 'ファイルの種類。 nPermission As Long '認可情報。 nShowAnnotations As Long 'アノテーションの表示状態。 nDocuments As Long 'nDocTypeがバインダーである場合はバインダーの内部DocuWorks文書数を示す。 nBinderColor As Long 'nDocTypeがバインダーである場合はバインダーの色を示す。 nBinderSize As Long 'nDocTypeがバインダーである場合はバインダーのサイズを示す。 End Type '2.6 XDW_CloseDocumentHandle DocuWorksファイルにアクセスするためのハンドルを解放する。 Private Declare Function XDW_CloseDocumentHandle Lib "D:¥dwsdk625¥XDWAPI¥DLL¥xdwapi.dll" (ByVal handle As Long, ByVal reserved As String) As Long '2.64 XDW_OpenDocumentHandle DocuWorksファイルにアクセスするためのハンドルを得る。この場合だけ、pHandleはByRefで定義 Private Declare Function XDW_OpenDocumentHandle Lib "D:¥dwsdk625¥XDWAPI¥DLL¥xdwapi.dll" (ByVal lpszFilePath As String, ByRef pHandle As Long, ByRef pMode As XDW_OPEN_MODE) As Long Private Type XDW_OPEN_MODE nSize As Long nOption As Long End Type '2.73 XDW_SaveDocument 変更を DocuWorks ファイルに反映させる。 Private Declare Function XDW_SaveDocument Lib "D:¥dwsdk625¥XDWAPI¥DLL¥xdwapi.dll" (ByVal handle As Long, ByVal reserved As String) As Long '2.1 XDW_AddAnnotation アノテーションを貼り付ける Private Declare Function XDW_AddAnnotation Lib "D:¥dwsdk625¥XDWAPI¥DLL¥xdwapi.dll" _ (ByVal handle As Long, ByVal nAnnotationType As Long, ByVal nPage As Long, ByVal nHorPos As Long, ByVal nVerPos As Long, ByRef pInitialData As XDW_AA_FUSEN_INITIAL_DATA, ByRef phNewAnnotation As Long, ByVal reserved As String) As Long '2.2 XDW_AddAnnotationOnParentAnnotation '親アノテーションにアノテーションを貼り付ける 'テキスト、リンク、日付印アノテーションの場合 Private Declare Function XDW_T_AddAnnotationOnParentAnnotation Lib "D:¥dwsdk625¥XDWAPI¥DLL¥xdwapi.dll" Alias "XDW_AddAnnotationOnParentAnnotation" _ (ByVal handle As Long, ByVal hAnnotation As Long, ByVal nAnnotationType As Long, ByVal nHorPos As Long, ByVal nVerPos As Long, ByVal pInitialData As String, ByRef phNewAnnotation As Long, ByVal reserved As String) As Long 'XDW_AddAnnotation用の構造体定義 Private Type XDW_AA_INITIAL_DATA nSize As Long '構造体のバイト数。 nAnnotationType As Long 'アノテーションの種類。 nReserved1 As Long '予約メンバ。0でなければならない。 nReserved2 As Long '予約メンバ。0でなければならない。 End Type Private Type XDW_AA_FUSEN_INITIAL_DATA ' common As Long '共通情報。構造体のバイト数とアノテーションの種類を指定する。 common As XDW_AA_INITIAL_DATA '共通情報。構造体のバイト数とアノテーションの種類を指定する。 nWidth As Long '付箋アノテーションの幅。単位は1/100mm。 nHeight As Long '付箋アノテーションの高さ。単位は1/100mm。 End Type '2.74 XDW_SetAnnotationAttribute 指定したアノテーションの属性を設定する。 'テキスト、リンク、日付印アノテーションの場合 Private Declare Function XDW_S_SetAnnotationAttribute Lib "D:¥dwsdk625¥XDWAPI¥DLL¥xdwapi.dll" Alias "XDW_SetAnnotationAttribute" _ (ByVal handle As Long, ByVal hAnnotation As Long, ByVal lpszAttributeName As String, ByVal nAttributeType As Long, ByVal pAttributeValue As String, ByVal nReserved As Long, ByVal pReserved As String) As Long '上記以外のアノテーションの場合 Private Declare Function XDW_L_SetAnnotationAttribute Lib "D:¥dwsdk625¥XDWAPI¥DLL¥xdwapi.dll" Alias "XDW_SetAnnotationAttribute" _ (ByVal handle As Long, ByVal hAnnotation As Long, ByVal lpszAttributeName As String, ByVal nAttributeType As Long, ByRef pAttributeValue As Long, ByVal nReserved As Long, ByVal pReserved As String) As Long '2.86 XDW_StarchAnnotation 指定されたアノテーションを固定する、もしくは解除する Private Declare Function XDW_StarchAnnotation Lib "D:¥dwsdk625¥XDWAPI¥DLL¥xdwapi.dll" (ByVal handle As Long, ByVal hAnnotation As Long, ByVal nStarch As Long, ByVal reserved As String) As Long Private Enum XDW_AID 'アノテーションの種類 XDW_AID_TEXT = 32785 XDW_AID_FUSEN = 32794 XDW_AID_STRAIGHTLINE = 32828 XDW_AID_RECTANGLE = 32829 XDW_AID_ARC = 32830 XDW_AID_LINK = 49199 XDW_AID_BITMAP = 32831 XDW_AID_STAMP = 32819 XDW_AID_MARKER = 32795 XDW_AID_POLYGON = 32834 End Enum Private Enum XDW_Color 'カラーの種類(16進数を10進数に変換) XDW_COLOR_NONE = CLng("&H" & "010101") XDW_COLOR_BLACK = CLng("&H" & "000000") XDW_COLOR_MAROON = CLng("&H" & "000080") XDW_COLOR_GREEN = CLng("&H" & "008000") XDW_COLOR_OLIVE = CLng("&H" & "008080") XDW_COLOR_NAVY = CLng("&H" & "800000") XDW_COLOR_PURPLE = CLng("&H" & "800080") XDW_COLOR_TEAL = CLng("&H" & "808000") XDW_COLOR_GRAY = CLng("&H" & "808080") XDW_COLOR_SILVER = CLng("&H" & "C0C0C0") XDW_COLOR_RED = CLng("&H" & "0000FF") XDW_COLOR_LIME = CLng("&H" & "00FF00") XDW_COLOR_YELLOW = CLng("&H" & "00FFFF") XDW_COLOR_BLUE = CLng("&H" & "FF0000") XDW_COLOR_FUCHIA = CLng("&H" & "FF00FF") XDW_COLOR_WHITE = CLng("&H" & "FFFFFF") XDW_COLOR_FUSEN_RED = CLng("&H" & "FFC2FF") XDW_COLOR_FUSEN_BLUE = CLng("&H" & "FFBF9D") XDW_COLOR_FUSEN_YELLOW = CLng("&H" & "64FFFF") XDW_COLOR_FUSEN_LIME = CLng("&H" & "C2FF9D") End Enum Private Enum XDW_STARCH_def 'アノテーションの固定もしくは解除を指定 XDW_STARCH = 1 XDW_STARCH_OFF = 0 End Enum Private Const XDW_ATN_Text = "%Text" Private Const XDW_ATN_FontName = "%FontName" Private Const XDW_ATN_FontSize = "%FontSize" Private Const XDW_ATN_FontStyle = "%FontStyle" Private Const XDW_ATN_FontPitchAndFamily = "%FontPitchAndFamily" Private Const XDW_ATN_ForeColor = "%ForeColor" Private Const XDW_ATN_BackColor = "%BackColor" Sub AddAnnotation_Fusen() 'ふせんを作成し、そのふせんを親にしてテキストアノテーションを貼り付ける。2011/4/6作成 Dim strFileName1 As String 'ファイル名 'Docworksを使うための前処理(ここから) Dim lngHandle, lngHandleAnnotation, lngHandleChildAnnotation As Long Dim myMode As XDW_OPEN_MODE Dim myInfo As XDW_DOCUMENT_INFO With myMode 'XDW_OpenDocumentHandleを実行する際のmyModeに値を設定 .nOption = 1 ' #define XDW_OPEN_READONLY 0 ' #define XDW_OPEN_UPDATE 1 .nSize = LenB(myMode) End With With myInfo 'XDW_GetDocumentInformationを実行する際のmyInfoに値を設定 .nSize = LenB(myInfo) End With 'Docworksを使うための前処理(ここまで) strFileName1 = "D:¥test001.xdw" 'DocuWorksファイルにアクセスするためのハンドルを得る。関数が正常に終了したら0を返す。異常終了したときは、エラーコードを返す。 XDW_OpenDocumentHandle strFileName1, lngHandle, myMode 'DocuWorksファイル全体に関わる情報を得る。 XDW_GetDocumentInformation lngHandle, myInfo '===1.アノテーションを貼り付ける。=== Dim myXDW_AID As XDW_AID '貼り付けるアノテーションの種類 Dim myXDW_ATN As String 'アノテーションの属性名 Dim lngPage, lngHorPos, lngVerPos As Long 'アノテーションを貼るページ、アノテーションのx座標、y座標(単位は1/100mm) Dim myAaInitialData As XDW_AA_INITIAL_DATA Dim myAaFusenInitialData As XDW_AA_FUSEN_INITIAL_DATA myXDW_AID = XDW_AID_FUSEN '貼り付けるアノテーションの種類を指定。 lngPage = 1 '1ページ目に貼り付ける lngHorPos = 1000 '10cm lngVerPos = 1000 '10cm With myAaInitialData .nAnnotationType = 32794 'アノテーションの種類。 .nReserved1 = 0 '予約メンバ。0でなければならない。 .nReserved2 = 0 '予約メンバ。0でなければならない。 End With With myAaFusenInitialData '付箋用の構造体XDW_AA_FUSEN_INITIAL_DATAに値を設定 .common = myAaInitialData '共通情報。構造体のバイト数とアノテーションの種類を指定する。 .nWidth = 20000 '付箋アノテーションの幅。単位は1/100mm。最小値: 500(=5mm)、最大値: 50000(=50cm) .nHeight = 1000 '付箋アノテーションの高さ。単位は1/100mm。最小値: 500(=5mm)、最大値: 50000(=50cm) End With myAaFusenInitialData.common.nSize = LenB(myAaFusenInitialData) '構造体のバイト数。 'ふせんアノテーションを貼り付ける XDW_AddAnnotation lngHandle, myXDW_AID, lngPage, lngHorPos, lngVerPos, myAaFusenInitialData, lngHandleAnnotation, vbNullString '===2.親アノテーションにテキストアノテーションを貼り付ける=== myXDW_AID = XDW_AID_TEXT lngHorPos = 500 '横位置5cm lngVerPos = 20 '縦位置0.2cm 'ふせんアノテーションにテキストアノテーションを貼り付ける XDW_T_AddAnnotationOnParentAnnotation lngHandle, lngHandleAnnotation, myXDW_AID, lngHorPos, lngVerPos, vbNullString, lngHandleChildAnnotation, vbNullString '===3.アノテーションを固定する=== Dim mySTARCH As XDW_STARCH_def mySTARCH = XDW_STARCH '固定 'ふせんアノテーションに貼り付けたテキストアノテーションを固定する。 XDW_StarchAnnotation lngHandle, lngHandleChildAnnotation, mySTARCH, vbNullString '===4.アノテーションの属性を設定する。=== Dim myXDW_ATN_Color As XDW_Color Dim strTxt, strAttributeName As String Dim lngFValue As Long 'ふせんに貼り付けたテキストアノテーションの属性を設定する。 myXDW_ATN = XDW_ATN_Text strTxt = "漢字ひらがなabc" '内容文字列の設定 XDW_S_SetAnnotationAttribute lngHandle, lngHandleChildAnnotation, myXDW_ATN, 1, strTxt, 0, vbNullString myXDW_ATN = XDW_ATN_FontSize 'フォントサイズを設定 lngFValue = 216 '21.6pt XDW_L_SetAnnotationAttribute lngHandle, lngHandleChildAnnotation, myXDW_ATN, 0, lngFValue, 0, vbNullString myXDW_ATN = XDW_ATN_ForeColor 'フォントカラーを設定 lngFValue = 255 'red XDW_L_SetAnnotationAttribute lngHandle, lngHandleChildAnnotation, myXDW_ATN, 0, lngFValue, 0, vbNullString myXDW_ATN = XDW_ATN_FontStyle 'フォントスタイルを設定 lngFValue = 2 'XDW_FS_BOLD_FLAG XDW_L_SetAnnotationAttribute lngHandle, lngHandleChildAnnotation, myXDW_ATN, 0, lngFValue, 0, vbNullString myXDW_ATN = XDW_ATN_FontName 'フォントフェイス名を設定 strTxt = "MS P明朝" XDW_S_SetAnnotationAttribute lngHandle, lngHandleChildAnnotation, myXDW_ATN, 1, strTxt, 0, vbNullString myXDW_ATN = XDW_ATN_BackColor '背景色を設定 myXDW_ATN_Color = XDW_COLOR_NONE XDW_L_SetAnnotationAttribute lngHandle, lngHandleChildAnnotation, myXDW_ATN, 0, myXDW_ATN_Color, 0, vbNullString '変更を DocuWorks ファイルに反映させる。関数が正常に終了したら0を返す。異常終了したときは、エラーコードを返す。 XDW_SaveDocument lngHandle, vbNullString 'DocuWorksファイルにアクセスするためのハンドルを解放する。関数が正常に終了したら0を返す。異常終了したときは、エラーコードを返す。 XDW_CloseDocumentHandle lngHandle, vbNullString End Sub
結果スクリーンショット
スクリプトによって作られたドキュワークスファイルをJPEGに変換してみました。
親アノテーションにアノテーションを貼り付けるXDW_AddAnnotationOnParentAnnotation
アノテーションの親子関係
文字が入力された付箋は、付箋アノテーションが親、テキストアノテーションが子という、親子関係になっていて、子のテキストアノテーションが固定されているという状態です。
DocuWorks API(XDWAPI)仕様書の2.2 XDW_AddAnnotationOnParentAnnotationによると、アノテーションの親子関係について、以下のように解説されています。
- 親アノテーションとして付箋以外のアノテーションを指定した場合はエラーとなる。
- 親アノテーションに重ならずに貼り付けることもできるが、Viewer で表示した場合、貼り付けたアノテーションが見えないこともありえる。
- 親アノテーションに貼り付けたアノテーションは、Viewer にて移動させることによりページに貼り付けることもできる。
上記のように、アノテーションは親子関係をとることができますが、親になれるのは付箋アノテーションだけのようです。ただ、子になるアノテーションは、テキストだけに限らず、以下のアノテーションが有効です。
- テキスト
- 直線
- 矩形
- 楕円
- ビットマップ
- 日付印
- マーカー
- 多角形
やろうと思えば、自分でもいろいろな付箋が作れそうです。
XDW_AddAnnotationOnParentAnnotation関数
親アノテーションにアノテーションを貼り付ける、XDW_AddAnnotationOnParentAnnotationの定義は以下のとおり。
形式
int XDW_AddAnnotationOnParentAnnotation (XDW_DOCUMENT_HANDLE handle, XDW_ANNOTATION_HANDLE hAnnotation,int nAnnotationType, int nHorPos, int nVerPos, XDW_AA_INITIAL_DATA* pInitialData,XDW_ANNOTATION_HANDLE* phNewAnnotation, void* reserved);
パラメータ
- handle : DocuWorksファイルのハンドル。
- hAnnotation : 親アノテーションへのハンドル
- nAnnotationType : アノテーションの種類。
- nHorPos : アノテーションのx座標。単位は1/100mm。
- nVerPos : アノテーションのy座標。単位は1/100mm。
- pInitialData : 初期値情報。
- phNewAnnotation : 貼り付けられたアノテーションへのハンドルが返される。
- reserved : 予約引数。NULLでなければならない。
VBAを使えば、アノテーションの属性が細かく設定できる。
前回に続いて今回のスクリプトでも、テキストアノテーションの属性を設定していますが、VBAから操作すると、DocuWorks Viewer上で設定するよりも、より細かい値が設定できるようです。
詳しくはDocuWorks API (XDWAPI)仕様書を参照してほしいのですが、例えば、テキストアノテーションのフォントサイズは1/10pt単位で設定できるし、付箋アノテーションの幅と高さは1/100mm単位、それぞれのアノテーションの位置も1/100mm単位での設定です。
DocuWorks Viewer上で、テキストアノテーションのフォントサイズを1/10pt単位で設定しようとすると、「サイズには1から1000ポイントを指定してください」とエラーメッセージが表示されます。
それにしても、1/100mmって10マイクロメートルで、およそ細胞の大きさ。どうやって使ったら有効活用できるのでしょう?
最近のコメント