.pdfドキュメントの作成におけるJavaScriptの使用により、インタラクティブな.pdfドキュメントを作成できます。
JavaScriptスクリプトは、以下の目的で使用できます。
- 入力されたデータの検証
- 計算の実行
- ドキュメントの表示を動的に変更
- ドキュメントオブジェクトの動的な作成と変更
関数の説明
Teigha Publish SDKには、JavaScriptを操作するための以下の関数が含まれています。
OdDocumentクラスの関数
void addJavaScript(const OdString& name, const OdString& source);
名前付きJavaScriptドキュメントレベルスクリプトを追加するために使用されます。
void getJavaScripts(OdStringArray& names, OdStringArray& sources) const;
すべての名前付きJavaScriptドキュメントレベルスクリプトを取得するために使用されます。
ドキュメントレベルスクリプトは、ドキュメントが開かれたときに一度実行されます。
OdPageクラスの関数
void addJavaScriptActionByField(const OdString& field_name, const OdString& source, const Action::Type action_type);
action_typeパラメータで記述されたユーザーアクションの場合に実行される、インタラクティブフォーム(フィールド)の一意の名前にJavaScriptスクリプトを追加するために使用されます。既存のJavaScriptスクリプトを持つカスタムアクションにスクリプトを追加すると、そのアクションに対して最後に追加されたスクリプトが使用されます。
void getJavaScriptActionsByField(const OdString& field_name, OdStringArray& sources, OdActionTypeArray& action_types) const;
指定された名前のインタラクティブフォームに割り当てられたすべてのJavaScriptスクリプトを取得するために使用されます。
インタラクティブフォーム(フィールド)は、以下のTeigha Publish SDKオブジェクトです: OdTextField, OdButton, OdListBox, OdCheckBox, OdDropDownList, OdRadioButton, および OdSignatureField。ユーザー定義のオブジェクトデータ名は、同じドキュメント内で一意である必要があります。各フィールドでは、以下のユーザーアクションに応答できます。
Action :: kCursorEnter Action :: kCursorExit Action :: kButtonPressed field Action :: kButtonReleased Action :: kInputFocus Action :: kLoseFocus Action :: kPageOpened Action :: kPageClosed フィールドを含むページが表示されたとき Action :: kPageVisible フィールドを含むページが表示されなくなったとき Action :: kPageInvisible
| ユーザーアクション | action_type |
|
インタラクティブフォームの領域上にカーソルを移動する |
Action :: kCursorEnter |
|
インタラクティブフォームの領域外にカーソルを移動する |
Action :: kCursorExit |
|
アクティブなフィールド領域内で左マウスボタンをクリックする |
Action :: kButtonPressed field |
|
アクティブなフィールド領域内で左マウスボタンを離す |
Action :: kButtonReleased |
|
入力フォーカスフィールドを取得する |
Action :: kInputFocus |
|
入力フォーカスフィールドを失う |
Action :: kLoseFocus |
|
このフィールドを含むページを開く |
Action :: kPageOpened |
|
このフィールドを含むページを閉じる |
Action :: kPageClosed |
|
フィールドを含むページが表示されるとき |
Action :: kPageVisible |
|
フィールドを含むページが表示されなくなったとき |
Action :: kPageInvisible |
OdLinkクラスの関数
void setJavaScript(const OdString& source);
void getJavaScript(OdString& source) const;
OdLinkクラスのこのインスタンスのJavaScriptスクリプトを設定および取得するためにそれぞれ使用されます。このスクリプトは、アクティブなフィールド領域内で左マウスボタンが離されたときに実行されます。
OdArtwork 機能
void setJavaScript(const OdString& source);
void getJavaScript(OdString& source) const;
このOdArtworkクラスのインスタンスのJavaScriptスクリプトを設定および取得するためにそれぞれ使用されます。このオブジェクトが初期化されると、スクリプトが実行されます。
JavaScriptスクリプトの使用例
例として、OdButtonおよびOdTextFieldオブジェクトに対するJavaScriptスクリプトの使用を検討します。
OdFilePtr pPublisher = OdFile::createObject();
OdDocumentPtr pDoc = OdDocument::createObject();
pDoc->setInformation(L"Test Document", L"Author", L"Test", L"Oda Pdf Publish");
pDoc->setHostServices(pHostApp);
OdPagePtr pPage = OdPage::createObject();
pPage->setFormat(Page::kA3);
pPage->setOrientation(Page::kLandscape);
pDoc->addPage(pPage);
OdUInt32 top_line_top = 830;
OdUInt32 top_line_text_top = 650;
OdRect button_rect(20, 200, top_line_top - 80, top_line_top);
OdButtonPtr pButton = OdButton::createObject();
OdString button_name(L"TestButton");
pButton->setName(button_name);
pButton->setLabel(L"Test");
pPage->addButton(pButton, button_rect);
OdRect tx_button_rect(20, 200, top_line_text_top - 30, top_line_text_top);
OdTextFieldPtr tx2button = OdTextField::createObject();
OdString tx2button_name(L"ButtonText");
tx2button->setName(tx2button_name);
pPage->addTextField(tx2button, tx_button_rect);
OdChar* buttonActionBase =
L"var text_field = getField('%s');\n"
L"if(text_field != null) \n"
L" text_field.value = '%s'; \n";
pPage->addJavaScriptActionByField(button_name, OdString().format(buttonActionBase, tx2button_name.c_str(), L"button is pressed"), Action::kButtonPressed);
pPage->addJavaScriptActionByField(button_name, OdString().format(buttonActionBase, tx2button_name.c_str(), L"button is released"), Action::kButtonReleased);
pPage->addJavaScriptActionByField(button_name, OdString().format(buttonActionBase, tx2button_name.c_str(), L"cursor enters"), Action::kCursorEnter);
pPage->addJavaScriptActionByField(button_name, OdString().format(buttonActionBase, tx2button_name.c_str(), L"cursor exits"), Action::kCursorExit);
pPublisher->exportPdf(pDoc, sOutPdf);
この例のコードでは、ページ上に1つのOdButtonオブジェクトと1つのOdTextFieldオブジェクトを作成します。次に、OdButtonオブジェクトを、イベントに関する情報をOdTextFieldオブジェクトに出力するいくつかのシナリオに追加します。このコードの結果は、ボタンとテキストフィールドの2つのコントロールを含む.pdfドキュメントになります。カーソルをボタンのアクティブ領域に移動するか、ボタンのアクティブ領域で左マウスボタンを押す/離すと、テキストメッセージがテキストフィールドに表示されます。下の図は、オブジェクトの初期状態と、ユーザーアクションの実行結果としての状態を示しています。