【问题标题】:JavaScript for InDesign to extract the text of a paragraph with a specified and known paragraphstyle用于 InDesign 的 JavaScript,用于提取具有指定和已知段落样式的段落文本
【发布时间】:2021-06-10 14:13:41
【问题描述】:

我是 JavaScript 新手,甚至是 InDesign 新手。你能帮我解决这个问题吗?

我需要提取标签的 3 个单元格的文本。这 3 个单元格每个都有一个专用的段落样式:print.rv、print.qty、print.ref。 该选项卡是我页面上的那种形式(在文本框中):

Ref ref_number (paragraphstyle: print.ref)
Quantity qty_number (paragraphstyle : print.qty)
Recto/Verso recto_verso or not (paragraphstyle : print.rv)

所以我需要分别提取第二列的每个字符串。 (最终目标是以项目导出的 pdf 版本的名称写入这些字符串)。

感谢您的帮助 :-) !

【问题讨论】:

    标签: javascript adobe-indesign


    【解决方案1】:

    输入:

    代码:

    var doc = app.activeDocument
    
    // convert all tables into the text
    doc.stories.everyItem().tables.everyItem().convertToText("\t", "\r");
    
    // for every line in the text: remove all characters from the start up to the tab symbol
    app.findGrepPreferences.findWhat = "^.+\t";
    app.changeGrepPreferences.changeTo = "";
    doc.changeGrep();
    
    // get all paragraphs from first text frame
    var pgfs = doc.textFrames[0].paragraphs.everyItem().getElements();
    
    // your styles (they can be obtained automatically)
    var styles = ["rv", "qty", "ref"];
    
    // 2D-array with paragraphs grouped by style
    var pgf_groups = [];
    
    // fill the array with paragraphs
    for (var s=0; s<styles.length; s++) {
        var style_group = [] // array for every style
        for (var i=0; i<pgfs.length; i++) {
            if (pgfs[i].appliedParagraphStyle.name == styles[s])
                style_group.push(pgfs[i]);
        }
        pgf_groups.push(style_group); // push the array into 2D-array
    }
    
    // output (get contents from the 2D-array and join it in a readable string)
    
    function get_text(pgfs) {
        var txt = "";
        for (var i=0; i<pgfs.length; i++) txt = txt + pgfs[i].contents + "\n";
        return txt;
    }
    
    msg = ""
    + styles[0] + ":\n" + get_text(pgf_groups[0]) + "\n\n"
    + styles[1] + ":\n" + get_text(pgf_groups[1]) + "\n\n"
    + styles[2] + ":\n" + get_text(pgf_groups[2]);
    
    alert(msg);
    

    输出:

    抱歉,我不明白“以项目的导出 pdf 版本的名称编写这些字符串”是什么意思。

    实际上,实现很大程度上取决于许多细节。您的文档是否在表格旁边包含其他文本? (我认为您的文档只包含表格,没有其他内容)。如果还有其他文字,您会手动选择表格吗?表总是有 3 行吗? (我想可以有很多行)您将如何打开文档?你将如何运行脚本?等等……

    对于最简单的情况,脚本的前五行可能就足够了:将表格转换为文本并去掉制表符之前的字符。

    【讨论】:

      【解决方案2】:

      感谢尤里的回答!首先,您的代码正在运行,但它不返回任何值。我不明白为什么哈哈。我认为问题出在第 12 行,因为我没有唯一的文本框,我没有选择好的段落样式,但我不知道如何获取页面的每个段落样式:/。

      此外,正如您所说,我的帖子应该更准确。 我处理由多个页面组成的文件,这些页面都有多个文本框,但它们都有一个共同的附加到模板。我想从这个文本框中提取数据,它包含我在原始帖子中提供的表格。该脚本将直接从 InDesign 执行。

      然后我必须单独导出 PDF 中的每一页,并将我从表格中获得的信息写在每个文件的标题中。

      例如,如果我的文件名为 test.indd 并且我的第一页有 ref_number: 05, qty_number: 3 并且是一个矩形,我应该将第一页导出为名为 test_05_3_recto.pdf 的 pdf。

      感谢您的帮助,感谢您的宝贵时间!

      【讨论】:

      • 我应该将第一页导出为名为 test_05_3_recto.pdf 的 pdf。 第二页和其他页面的名称是什么?您能否分享您的 indd 文档示例(IDML 格式会更好)。您可以在这里上传文件:transferxl.com
      • 感谢您的评论,直到今天我才看到您的答案:/。我将上传一个示例文件,第二个、第三个等页面的命名方式与第一个页面的命名方式相同。每页都有一个附有表格的表格,里面写着信息。这是链接:transferxl.com/08VGqQ4DkjtCm
      猜你喜欢
      • 2023-04-01
      • 1970-01-01
      • 2016-07-09
      • 1970-01-01
      • 2022-10-14
      • 2013-06-29
      • 1970-01-01
      • 1970-01-01
      • 2011-04-13
      相关资源
      最近更新 更多