【问题标题】:pdf 3d with JavaScript : simple example带有 JavaScript 的 pdf 3d:简单示例
【发布时间】:2015-03-25 19:55:37
【问题描述】:

我需要用一些 3D 对象制作一个简单的 pdf,以便进行口头演示。我做了几个视图,每个视图都有一个相机视点、一个对象和一个显示模式。 为了避免需要使用上下文菜单在不同的视点之间手动切换,我希望使用 Timer 自动切换视点(每个视点停留几秒钟)。而且我希望完全不必触摸鼠标(也不必触摸键盘),因此我希望在页面出现后立即开始播放。

我找到了 javascript 命令 runtime.setView(N,x) 来切换到 N 中的第 x 个视图,但我不知道该放在哪里(我不想定义一个函数当我按下按钮时调用,因为我希望一切都是自动化的)。另外,我不知道如何暂停几秒钟。

有什么帮助吗?谢谢!

【问题讨论】:

    标签: javascript pdf 3d


    【解决方案1】:

    我相信您正在寻找setInterval(fn, time),它将以您设置的时间间隔定期调用一个函数。我不熟悉您提到的setView() 方法,但这里有一些伪代码,您可以在文档正文末尾添加标签。

    function startSwitcher()
        var viewNum = 0;
        var maxViews = 5;     // you set this to how many views there are
        setInterval(function()  {
            ++viewNum;
            if (viewNum >= maxViews) {
                viewNum = 0;
            }
            runtime.setView(N, viewNum);     // you will have to figure out this line 
        }, 2000);
    }
    
    startSwitcher();
    

    2000 是 2000 毫秒,是执行函数之间的时间间隔。您可以将任意毫秒数放在那里。

    runtime.setView(N, viewNum) 行是您必须弄清楚的,因为我不熟悉您要在那里使用的任何库。这段代码的操作部分是viewNum 变量,它配置了下一个旋转视图。

    【讨论】:

    • 谢谢 - 但是当我使用这段代码(N = maxViews)时,当显示 3D 对象时,脚本似乎没有启动。我不知道在语法错误或错误的情况下嵌入 javascripts 的 3d pdf 的行为:如果存在语法错误,脚本是否启动并显示错误消息?我对 JS 和 3d pdf 也很陌生。谢谢!
    • @WhitAngl - 您必须了解如何通过网页 javascript 与 3d pdf 进行通信。我假设您必须使用 javascript 来获取页面中的 PDF 对象,在加载时注册某种回调,然后在其上调用一些方法。但是,我什至不知道您使用的是什么工具。
    • 好的,谢谢。我只是在使用 Adob​​e Acrobat Pro,它允许集成 3d 元素并附加一些 javascript 文件......我不知道如何在两者之间进行通信,而且似乎很少有关于它的文档和教程:s跨度>
    • @WhitAngl - 抱歉,我可以在网页方面为您提供帮助,但不能帮助您与 Acrobat 文档进行通信。
    • 那很好 :) 如果我自己发现问题的第二部分,我会验证你的答案:) (我正在推进:显然,正确的调用方法是:getAnnots3D( this.pageNum)[0].context3D.runtime.setView(viewNum, true); 但这不会改变任何东西)
    【解决方案2】:

    我认为runtime.SetView(..) 方法使用视图名称作为字符串而不是视图编号。我在文档级脚本中有这个函数,它对我有用:

    // view is the name of the view for example "TopView"
    function setView(view){
    	console.println("Navigating to view: "+view);
    	
    	var pageIndex = this.pageNum;
    
    	var annotIndex = 0;
    
    	var c3d = this.getAnnots3D( pageIndex )[ annotIndex ].context3D;
    
    	c3d.runtime.setView(view, true);
    }

    将此与 jfriend00 的答案中的setInterval(..) 结合起来,您应该会得到所需的东西。 最好的问候

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-30
      • 2017-10-17
      • 2012-02-13
      • 2014-01-05
      • 2013-11-30
      • 1970-01-01
      相关资源
      最近更新 更多