作者:我心飞翔 | 来源:互联网 | 2023-07-04 10:40
我目前正在评估WebViewer 5.2.8版。
我需要通过WebViewer UI将一些Javascript函数/代码设置为触发器的动作,例如计算触发器,格式触发器和击键触发器。
请帮助我了解如何在WebViewer UI中为表单字段触发器配置Javascript代码。
预先感谢
赛义德
很抱歉收到您的回复!
您将必须自己创建将包含Javascript代码的UI组件。您可以使用HTML和Javascript来执行与FormBuilder演示类似的操作。但是,最好克隆open source UI并添加自己的组件。
关于设置操作,我建议您尝试使用6.0版,因为该版本对小部件和表单字段提供了更好的支持。但是,我们正在调查带有现场操作的错误,该错误会在下载文档时引发错误。您应该可以使用以下代码使其首先工作:
docViewer.on('annotationsLoaded',() => {
const annotatiOns= annotManager.getAnnotationsList();
annotations.forEach(annot => {
const action = new instance.Actions.Javascript({ Javascript: 'alert("Hello World!")' });
// C cor Calculate,and F for Format
annot.addAction('K',action);
});
});
解决该错误后,您应该能够正确下载该文档。
否则,您将不得不使用完整的API,这可能不理想。完整的API会稍微复杂一些,如果上面的功能即将修复,我不建议这样做。
让我知道这是否有帮助,或者您是否需要有关使用完整API的更多信息!
编辑
这里是使用完整API的代码!由于完整的API的工作水平很低,并且非常接近PDF规范,因此要使它工作还需要花费更多的时间。您仍然必须使用我提供的代码更新批注,然后再次添加。
docViewer.on('documentLoaded',async () => {
// This part requires the full API: https://www.pdftron.com/documentation/web/guides/full-api/setup/
const doc = docViewer.getDocument();
// Get document from worker
const pdfDoc = await doc.getPDFDoc();
const pageItr = await pdfDoc.getPageIterator();
while (await pageItr.hasNext()) {
const page = await pageItr.current();
// Note: this is a PDF array,not a JS array
const annots = await page.getAnnots();
const numAnnots = await page.getNumAnnots();
for (let i = 0; i const annot = await annots.getAt(i);
const subtypeDict = await annot.findObj('Subtype');
const subtype = await subtypeDict.getName();
const actiOns= await annot.findObj('AA');
// Check to make sure the annot is of type Widget
if (subtype === 'Widget') {
// Create the additional actions dictionary if it does not exist
if (!actions) {
actiOns= await annot.putDict('AA');
}
let calculate = await actions.findObj('C');
// Create the calculate action (C) if it does not exist
if (!calculate) {
calculate = await actions.putDict('C');
await Promise.all([calculate.putName('S','Javascript'),calculate.putString('JS','app.alert("Hello World!")')]);
}
// Repeat for keystroke (K) and format (F)
}
}
pageItr.next();
}
});
docViewer.on('annotationsLoaded',() => {
const annotatiOns= annotManager.getAnnotationsList();
annotations.forEach(annot => {
const action = new instance.Actions.Javascript({ Javascript: 'app.alert("Hello World!")' });
// K for Keystroke,and F for Format
annot.addAction('C',action);
});
});
您可能可以将它们放在 documentLoaded 事件下,但是一旦修复程序准备好,您就可以使用完整的API删除该零件。