【问题标题】:Retrieving and manipulating interactive PDF document with JS用JS检索和操作交互式PDF文档
【发布时间】:2016-10-17 13:27:36
【问题描述】:

我正在为需要操作具有以下需求的交互式 PDF 的朋友工作: 有 2 个主要的“层”和 2 个按钮。当我按下button1时,只有layer1可见,当我按下button2时,layer2是唯一可见的。

他可以为每个按钮上传一个javascript,其中包含必须在点击时开始的操作,这是我为他编写的代码。

var layerToHideLabel = "testlayer1";
var layerToShowLabel = "testlayer2";

showField(layerToShowLabel);
hideField(layerToHideLabel);

function showField(fieldName){
    var field = null;
    field = FindOCG(fieldName);
    if(field != null){
        setVisibility(field,true);
    }
}

function hideField(fieldName){
    var field = null;
    field = FindOCG(fieldName);
    if(field != null){
        setVisibility(field,false);
    }
}

function setVisibility(field, status){
    field.state=status;
}

function FindOCG(cName) { 
    var aOCGs = this.getOCGs(); 
    for(var i=0; aOCGs && i<aOCGs.length;i++) { 
        if(aOCGs[i].name == cName) return aOCGs[i]; 
    } 
    return null; 
}

getOCGs 函数是文档的内置功能,当然,当我启动该方法时,会出现以下错误:

this.getOCGs is not a function

我认为这个问题与上下文有关,因为脚本是在单击按钮时启动的,所以this 可能指的是按钮而不是文档。

我尝试了很多组合来从 OCG 中检索文档,但没有成功。我尝试了 document、$doc、doc、Document,但没有。恐怕这不可能,也许我应该尝试在文档级别上传一些代码,但我不知道我是否可以添加一些onchange功能。

这是我迄今为止一直遵循的指南: https://acrobatusers.com/tutorials/create_use_layers

提前致谢

【问题讨论】:

  • 不精通 PDF JavaScript,但当我遇到类似问题时,我通常会尝试从事件处理程序中获取信息。我可以猜你在某处有一个调用显示/隐藏字段的 onclick 吗?
  • 问题是整个文档是由一个“包装”一切的软件生成的,所以我可以把我的js代码点击按钮,但是我看不到后面的代码!跨度>
  • 我明白了。我猜你无法控制document.addEventListener("click", myfunction(this))

标签: javascript pdf adobe acrobat


【解决方案1】:

尝试调用“event.target.doc.getOCGs()”而不是“this.getOCGs()”。

在文件夹级 JavaScripts 文件之一中定义的函数中,“this”未定义。调用函数应将 Doc 传递给此级别的任何需要它的函数。

Doc 对象通常可以通过事件对象访问,事件对象是为执行 JavaScript 的每个事件创建的: ● 对于鼠标、焦点、模糊、计算、验证和格式化事件,event.target 返回启动事件的Field 对象。然后就可以通过 Field 对象的 Doc 方法访问 Doc 对象了。

【讨论】:

    猜你喜欢
    • 2021-08-04
    • 1970-01-01
    • 2019-10-18
    • 2012-01-27
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    相关资源
    最近更新 更多