微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用于 InDesign 的 JavaScript 提取具有指定和已知段落样式的段落文本

如何解决用于 InDesign 的 JavaScript 提取具有指定和已知段落样式的段落文本

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

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

参考 ref_number(段落样式:print.ref)
数量 qty_number(段落样式:print.qty)
正反面 recto_verso 与​​否(段落样式:print.rv)

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

感谢您的帮助:-)!

解决方法

输入:

enter image description here

代码:

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);

输出:

enter image description here

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

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

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

,

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

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。