【问题标题】:Does anyone know why an object would miss a property?有谁知道为什么一个对象会错过一个属性?
【发布时间】:2014-05-02 17:57:44
【问题描述】:

我们有一个将我们的 Indesign 文档导出为 HTML 的脚本,其中一个例程是导出表格。在这个脚本中,我们遍历每个 Tables->Rows->Cells 并评估一些属性(即 bottomEdgeStrokeType、topEdgeStrokeType 等)并将它们传输到 HTML。

昨天我们在转换一个特定文档时遇到了问题,因为某些单元格完全缺少“bottomEdgeStrokeType”属性。我通过输出每个单元格的属性并将有故障的单元格与其他单元格进行比较发现了这一点。

下面这行引发了错误:“此请求的对象无效。”。

var cellType = cell["bottomEdgeStrokeType"];

现在,为了解决这个问题,我将它包裹在一个 try catch 块中以处理它不存在的情况,但现在让我感到困惑的是,Extendscript 究竟如何实例化一个缺少属性的对象?

Indesign 版本:CS5.5

【问题讨论】:

    标签: adobe-indesign extendscript


    【解决方案1】:

    如果一个属性根本不存在,它不仅是“未定义”(例如在溢出文本中请求父文本框架的字符),而且 InDesign 的 Javascript 引擎也无法为 返回相当准确的结果多个值。

    如果您要求段落的“the”磅值,其中该段落包含多个尺寸,糟糕的 ID 不会考虑返回类似 CONSTANT.Mixed 的内容,或者仅返回第一个值,或者(我可能更喜欢)值的数组;它返回undefined

    那么单个表格单元格怎么会有多个底部笔划呢?如果它下面的单元格被拆分为多个单元格,其中一个具有“顶部”笔划,而另一个没有。

    很难推荐一个合适的解决方案。您可以首先测试当前单元格是否与columnSpan“合并”(就 InDesign 的内部表格模型而言);如果是这样,遍历跨越的列数并测试 next 行的单元格的顶部笔划,理论上应该与上面单元格的底部笔划匹配。 (我发现自己想知道这是否总是正确的。ID 的表格模型...... 奇怪。它并不完全像 HTML 表格,尽管功能重叠。)

    如果columnSpan 大于 1 并且等于当前单元格下的单元格数,您可以测试它们的所有“顶部”值是否相同,如果是,则使用该值价值。 (我从来没有测试过这个,所以 ID 的表格模型可能会失败因为一个单元格被合并了,不管是否相同的值。)

    也可以尝试标记此单元格的下一行以输出“顶部”笔划——但交替的顶部和底部笔划在 CSS 中可能无法很好地对齐,左右对齐。也许最好只将第一个顶部笔画值转换为当前单元格的“底部”笔画属性,并在需要的地方手动修复(如何?)或者,一个合理的操作,希望没有人会注意到它。

    【讨论】:

    • 这是一个非常准确和完整的答案。这正是正在发生的事情,会导致崩溃的单元格被合并,并且下面的一个单元格定义了一个单元格类型,而其他两个则没有。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2017-09-17
    • 2010-10-11
    • 2011-10-14
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多