PDF JavaScript在Adobe Reader DC中不起作用,但在所有其他读者中都不起作用

时间:2017-02-21 15:02:06

标签: javascript pdf adobe adobe-reader

我无法让我的pdf与Adobe Reader DC联机工作。

http://www.okeechobeecountytaxcollector.com/Documents/FeeCalculatorRev0909.pdf

没有按钮或功能正常工作。 (就像当你点击motorvehicles,或移动房屋或顶部的任何按钮时,应该会出现一些选择)但是如果我在任何其他阅读器中打开它可以正常工作。有谁知道如何编辑文档以便在Adobe Reader DC中正常工作?文档中是否有任何设置或您需要更改的任何设置才能在DC中工作?

我尝试将安全部分中的设置更改为Acrobat X及更高版本,但这也没有解决。

1 个答案:

答案 0 :(得分:5)

在Adobe DC JavaScript调试器中检查PDF文档后,我担心会抛出一大堆语法错误。修复一组语法错误时,会弹出一组全新的语法错误。据我所知(有人可以证实这一点),旧版本的Adobe中的JavaScript解释器对于他们如何解释语言不那么严格,这就是为什么你的表单在旧版本中工作,但是被Acrobat DC中的最新口译员。

当我检查抛出错误的JavaScript时,我不仅注意到Adrobat DC真的希望你用分号终止你的JavaScript语句(你的代码在某些时候会这样做),但我也发现了奇怪的结构,有些让我相信即使你的表单在技术上没有在旧版本的Acrobat中抛出任何错误,你可能会发现表单在旧版本中实际上并没有正常运行。

因此,要修复这些错误,并使您的表单在Adobe Acrobat DC中运行,您必须清除所有引发的错误,这意味着迁移(更新)您的编码样式以符合新的严格程度在Acrobat DC的运行时。

例如,当我第一次使用Acrobat DC中的JavaScript调试器打开表单时,我会列出以下错误:

    SyntaxError: missing ; before statement
121:Document-Level:CreditCalcException in line 5 of function top_level, script Page-Actions:Page1:Page Open:Action4
ReferenceError: Loaded is not defined
5:Page-Actions:Page1:Page Open:Action4Exception in line 2 of function top_level, script AcroForm:LoadCountyLock:Annot1:OnBlur:Action1
ReferenceError: FormNumber is not defined
2:AcroForm:LoadCountyLock:Annot1:OnBlur:Action1Exception in line 10 of function top_level, script AcroForm:ButtonMonth1.3.0:Annot1:MouseUp:Action2
ReferenceError: MonthsNumber is not defined
10:AcroForm:ButtonMonth1.3.0:Annot1:MouseUp:Action2Exception in line 10 of function top_level, script AcroForm:ButtonMonth1.0.0:Annot1:MouseUp:Action2
Exception in line 10 of function top_level, script AcroForm:ButtonMonth1.1.0:Annot1:MouseUp:Action2
ReferenceError: MonthsNumber is not defined
10:AcroForm:ButtonMonth1.0.0:Annot1:MouseUp:Action2
SyntaxError: missing ; before statement
121:Document-Level:CreditCalc
SyntaxError: missing ; before statement
121:
SyntaxError: missing ; before statement
121:
SyntaxError: missing ; before statement
121:
SyntaxError: missing ; before statement
121:
SyntaxError: missing ; before statement
121:
SyntaxError: missing ; before statement
121:
SyntaxError: missing ; before statement
121:
SyntaxError: missing ; before statement
121:
SyntaxError: missing ; before statement
121:
SyntaxError: missing ; before statement
121:
SyntaxError: missing ; before statement
121:
SyntaxError: missing ; before statement
121:
SyntaxError: missing ; before statement
121:
SyntaxError: missing ; before statement
121:
SyntaxError: missing ; before statement
121:
SyntaxError: missing ; before statement
121:
SyntaxError: class is a reserved identifier
56:Document-Level:SVCFees
SyntaxError: class is a reserved identifier
56:Document-Level:SVCFees
SyntaxError: class is a reserved identifier
77:AcroForm:DynolistHS:Annot1:MouseUp:Action2
SyntaxError: class is a reserved identifier
56:Document-Level:SVCFees
SyntaxError: class is a reserved identifier
56:Document-Level:SVCFees
SyntaxError: class is a reserved identifier
56:Document-Level:SVCFees
SyntaxError: class is a reserved identifier
56:Document-Level:SVCFees
SyntaxError: class is a reserved identifier
56:Document-Level:SVCFees
SyntaxError: class is a reserved identifier
56:Document-Level:SVCFees
SyntaxError: class is a reserved identifier
56:Document-Level:SVCFees
SyntaxError: class is a reserved identifier
56:Document-Level:SVCFees
SyntaxError: class is a reserved identifier
56:Document-Level:SVCFees
SyntaxError: class is a reserved identifier
56:Document-Level:SVCFees
SyntaxError: class is a reserved identifier
56:Document-Level:SVCFees
SyntaxError: class is a reserved identifier
56:Document-Level:SVCFees
SyntaxError: class is a reserved identifier
56:Document-Level:SVCFees
SyntaxError: class is a reserved identifier
56:Document-Level:SVCFees
SyntaxError: class is a reserved identifier
56:Document-Level:SVCFees
SyntaxError: class is a reserved identifier
56:Document-Level:SVCFees
SyntaxError: class is a reserved identifier
56:Document-Level:SVCFees
SyntaxError: class is a reserved identifier
56:Document-Level:SVCFees
SyntaxError: class is a reserved identifier
56:Document-Level:SVCFees
SyntaxError: class is a reserved identifier
56:Document-Level:SVCFees
SyntaxError: class is a reserved identifier
56:Document-Level:SVCFees
SyntaxError: class is a reserved identifier
56:
SyntaxError: class is a reserved identifier
56:
SyntaxError: class is a reserved identifier
56:
SyntaxError: class is a reserved identifier
56:
SyntaxError: class is a reserved identifier
56:Document-Level:SVCFees
SyntaxError: missing ; before statement
121:
SyntaxError: class is a reserved identifier
56:Document-Level:SVCFees
SyntaxError: class is a reserved identifier
56:Document-Level:SVCFees
SyntaxError: class is a reserved identifier
138:AcroForm:DynolistVehicle:Annot1:MouseUp:Action1

enter image description here

请注意您如何遇到以下所有错误:

    SyntaxError: class is a reserved identifier
    SyntaxError: missing ; before statement

这些都是很好的指标,DC中的新JavaScript解释器将JS保持在更高的标准,并使用更新的语言功能,如class关键字,并强加了一个必须使用分号来终止语句的约定。

当您继续单击PDF时,JavaScript调试器会以相同的方式开始抱怨更多错误(缺少分号,未定义的函数等),因此修复一个问题只会发现另一个兔子的额外漏洞,相同的问题。

所以我想说最新的路径是让这个表格更新并为最新版本的DC做好准备,就是通过你的脚本并应用一些约定或linting来开始清理语法(用分号终止所有语句等等) )。一旦你清理了语法,JavaScript解释器就可能开始找到它之前找不到的函数声明(由于它考虑的语法无效),这将(希望)清除“未定义的函数” “错误。

另外,我会做一些一般的测试,你的表单按照你想要的方式工作,因为我看到奇怪的JavaScript,例如这个样本取自CreditCalc函数:

enter image description here

请注意,行123125之间的中断?这是我眼中奇怪的JavaScript,从我看到的第125行中那个“浮动”对象中的代码永远不会被击中,它只是存在,但不会有用,这个对你来说应该是可怕的。

像这样的奇怪构造遍布你的脚本,以及可能导致意外行为的其他陷阱,例如使用!= 0而不是!== 0

所以我担心这里没有简单的答案,在Acrobat DC允许你运行这个表单之前,你可能需要做很多清理工作。