【问题标题】: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