【问题标题】:Select all text in thread in InDesign?在 InDesign 中选择线程中的所有文本?
【发布时间】:2015-06-11 20:21:18
【问题描述】:

我正在尝试在 InDesign CS4 中选择线程中的所有文本,以便可以使用 doScript 在所选文本上调用另一个脚本(不是我制作的)。 This question 让我觉得这是可能的。我试过frame.contents.select();,但这给出了错误“frame.contents.select 不是函数。”

如何在 InDesign 中使用extendscript / javascript 选择线程的内容

【问题讨论】:

    标签: javascript adobe-indesign extendscript


    【解决方案1】:

    (<em>Any_text_item</em>).contents 只是纯文本接口;它不直接访问 InDesign 的本机 Text object,而是将文本与常规 Javascript 字符串进行转换。因此,选择 Javascript 文本(如果可能)不会对 InDesign 文档本身的文本产生任何影响。

    要从任何文本框架(或其他对象)获取所有串接文本,您可以使用其parentStory 对象。要选择(本机)文本,请定位其 texts[0] 属性并在其上使用 select

    frame.parentStory.texts[0].select();
    

    如果您可以找到“当前选择”被选中的位置,您可以在其前面添加以下行:1

    if (app.selection.length == 1 && app.selection[0].hasOwnProperty("previousTextFrame"))
    {
        // alert ('we must be a text frame!');
        app.selection[0].parentStory.texts[0].select();
    }
    

    例如,在脚本 markdownId.jsx 中,它会在第 29 行附近,紧随其后

    tagset = findTagSet();
    if (app.selection.length > 0)
    { // <- add the new lines immediately below this one, above the next
         if (app.selection.length == 1 && app.selection[0].hasOwnProperty('baseline') && app.selection[0].length > 1)
    

    ¹ 最好的方法是测试您确定 none“不需要的”对象具有的属性。早些时候,我使用了parentStory,但意识到纯文本选择也具有此属性,因此常规选择和文本框架之间没有区别。对于previousTextFrame,您可以确定只有文本框和文本路径才是正确的对象。

    【讨论】:

    • 哈哈!这是我正在尝试编写脚本的 markdownID。棒极了。立即尝试您的解决方案...
    • 次要更新:糟糕的建议(测试parentStory)被更好的建议(测试previousTextFrame)取代......(不客气!很高兴能提供帮助。)跨度>
    • 对处理字符编码有什么建议吗?当我让它加载时,您的脚本可以完美地处理一切;但是当我加载自己的 md 时,引号和撇号之类的东西开始变得很奇怪,像 ‚Äù 这样的 gobbly-gook。
    • @Nathan:这是 UTF8 编码,这表明它无法将您的文件识别为正确的 UTF8 - 请参阅函数 getFromFile。但我无法重现这一点......我在使用和不使用 UTF8 BOM 标记的情况下进行了测试,并且脚本在这两种情况下都能正常工作。
    • 是的。我不认为这是你的剧本的错。在您的脚本进行转换之前导入后会出现奇数字符。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    • 2021-08-11
    相关资源
    最近更新 更多