在 Teigha Publish 中使用 JavaScript 的基本信息

在 .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);

用于将 JavaScript 脚本添加到交互式表单(字段)的唯一名称,该脚本在 action_type 参数描述的用户操作情况下执行。当您为具有现有 JavaScript 脚本的自定义操作添加脚本时,将使用为该操作添加的最后一个脚本。

void getJavaScriptActionsByField(const OdString& field_name, OdStringArray& sources, OdActionTypeArray& action_types) const;

用于检索分配给具有给定名称的交互式表单的所有 JavaScript 脚本。

交互式表单(字段)是以下 Teigha Publish SDK 对象:OdTextField、OdButton、OdListBox、OdCheckBox、OdDropDownList、OdRadioButton 和 OdSignatureField。用户定义的对象数据名称在同一文档中必须是唯一的。对于每个字段,可以响应以下用户操作:

操作 :: kCursorEnter 操作 :: kCursorExit 操作 :: kButtonPressed 字段 操作 :: kButtonReleased 操作 :: kInputFocus 操作 :: kLoseFocus 操作 :: kPageOpened 操作 :: kPageClosed 当包含该字段的页面变为可见时 操作 :: kPageVisible 当包含该字段的页面不再显示时 操作 :: 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 脚本的示例

以 JavaScript 脚本在 OdButton 和 OdTextField 对象中的使用为例。

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);

在此示例的代码中,我们在页面上创建了一个 OdButton 对象和一个 OdTextField 对象。然后,我们将 OdButton 对象添加到多个场景中,这些场景将事件信息输出到 OdTextField 对象。此代码的结果将是一个 .pdf 文档,其中包含两个控件:一个按钮和一个文本字段。当您将光标移动到按钮的活动区域或在按钮的活动区域中按下/释放鼠标左键时,文本字段中会显示一条文本消息。下图显示了对象的初始状态以及执行用户操作后的状态。

image1

 

今天就开始行动

免费试用 ODA 软件 60 天。
无风险,无需信用卡。

免费试用