JavaScript + InDesign:在 .indd 文档中查找一个词并编写一个包含页码位置的 .txt 文件
JavaScript + InDesign: Find a word in a .indd document and write a .txt file with page number locations
我 运行 在尝试执行脚本以查找特定单词时遇到了问题 - 在本例中是书中项目的名称 - 并将其所有出现的页码写在我的 InDesign 文档到 .txt 文件。
问题:无论出于何种原因,返回的 "parentPage.name" 值都乱序列出(例如:它在第 184 页出现在第 11 页之前的列表中,等等)
我不确定它是否与这段代码(下面)或其他地方有关:
pg_nr = found_txt.parentTextFrames[0].parentPage.name;
如果有人对如何解决这个问题有任何想法,那就太好了。谢谢!
我的代码的完整版本如下:
main ();
function main() {
var file_name = new Date() + "-Title-Project_Name-Page_Location";
var filepath = "~/Desktop/" + file_name + ".txt";
var write_file = File(filepath);
write_file = new File(filepath);
var write_text;
write_text = write_file.open('w', undefined, undefined);
write_file.encoding = "UTF-8";
write_file.lineFeed = "Macintosh";
#target indesign;
var doc = app.activeDocument;
app.findTextPreferences = NothingEnum.nothing;
app.changeTextPreferences = NothingEnum.nothing;
app.findChangeTextOptions.includeLockedLayersForFind = true;
app.findChangeTextOptions.includeLockedStoriesForFind = true;
app.findChangeTextOptions.includeHiddenLayers = false;
app.findChangeTextOptions.includeMasterPages = false;
app.findChangeTextOptions.includeFootnotes = true;
app.findChangeTextOptions.caseSensitive = false;
app.findChangeTextOptions.wholeWord = false;
project_name = "Project Name";
app.findTextPreferences.findWhat = project_name;
find_txt = doc.findText();
for (var i = 0; i < find_txt.length; i++) {
if (find_txt[i].contents == project_name) {
found_txt = find_txt[i];
pg_nr = found_txt.parentTextFrames[0].parentPage.name;
write_file.writeln(project_name + " : p. " + pg_nr + "\r\r");
}
}
app.findTextPreferences = NothingEnum.nothing;
app.changeTextPreferences = NothingEnum.nothing;
write_file.close();
return;
}
这里的脚本被修改为将结果推送到一个数组,然后按文档中出现的顺序对它们进行排序。
显然答案已经晚了...但希望它在将来有用。
main ();
function main() {
var arrResults = [];
#target indesign;
var doc = app.activeDocument;
app.findTextPreferences = NothingEnum.nothing;
app.changeTextPreferences = NothingEnum.nothing;
app.findChangeTextOptions.includeLockedLayersForFind = true;
app.findChangeTextOptions.includeLockedStoriesForFind = true;
app.findChangeTextOptions.includeHiddenLayers = false;
app.findChangeTextOptions.includeMasterPages = false;
app.findChangeTextOptions.includeFootnotes = true;
app.findChangeTextOptions.caseSensitive = false;
app.findChangeTextOptions.wholeWord = false;
project_name = "Project Name";
app.findTextPreferences.findWhat = project_name;
find_txt = doc.findText();
for (var i = 0; i < find_txt.length; i++) {
if (find_txt[i].contents == project_name) {
found_txt = find_txt[i];
pg_nr = found_txt.parentTextFrames[0].parentPage.name;
pg_index = found_txt.parentTextFrames[0].parentPage.documentOffset;
// pushes results into an array of objects
arrResults[arrResults.length] = {"project_name":project_name,"page_number":pg_nr,"page_index":pg_index};
}
}
app.findTextPreferences = NothingEnum.nothing;
app.changeTextPreferences = NothingEnum.nothing;
// sorts array by the document offset (order of appearance in document)
arrResults = arrResults.sort(function(a,b){return a.page_index>b.page_index});
// convert object to string
for(var i = 0; i<arrResults.length; i++){
arrResults[i] = "project:"+arrResults[i].project_name+", pg:"+arrResults[i].page_number;
}
var file_name = new Date() + "-Title-Project_Name-Page_Location";
var filepath = "~/Desktop/" + file_name + ".txt";
var write_file = new File(filepath);
var write_text;
write_text = write_file.open('w');
write_file.encoding = "UTF-8";
write_file.lineFeed = "Macintosh";
write_file.write(arrResults.join("\n"));
return;
}
我 运行 在尝试执行脚本以查找特定单词时遇到了问题 - 在本例中是书中项目的名称 - 并将其所有出现的页码写在我的 InDesign 文档到 .txt 文件。
问题:无论出于何种原因,返回的 "parentPage.name" 值都乱序列出(例如:它在第 184 页出现在第 11 页之前的列表中,等等)
我不确定它是否与这段代码(下面)或其他地方有关:
pg_nr = found_txt.parentTextFrames[0].parentPage.name;
如果有人对如何解决这个问题有任何想法,那就太好了。谢谢!
我的代码的完整版本如下:
main ();
function main() {
var file_name = new Date() + "-Title-Project_Name-Page_Location";
var filepath = "~/Desktop/" + file_name + ".txt";
var write_file = File(filepath);
write_file = new File(filepath);
var write_text;
write_text = write_file.open('w', undefined, undefined);
write_file.encoding = "UTF-8";
write_file.lineFeed = "Macintosh";
#target indesign;
var doc = app.activeDocument;
app.findTextPreferences = NothingEnum.nothing;
app.changeTextPreferences = NothingEnum.nothing;
app.findChangeTextOptions.includeLockedLayersForFind = true;
app.findChangeTextOptions.includeLockedStoriesForFind = true;
app.findChangeTextOptions.includeHiddenLayers = false;
app.findChangeTextOptions.includeMasterPages = false;
app.findChangeTextOptions.includeFootnotes = true;
app.findChangeTextOptions.caseSensitive = false;
app.findChangeTextOptions.wholeWord = false;
project_name = "Project Name";
app.findTextPreferences.findWhat = project_name;
find_txt = doc.findText();
for (var i = 0; i < find_txt.length; i++) {
if (find_txt[i].contents == project_name) {
found_txt = find_txt[i];
pg_nr = found_txt.parentTextFrames[0].parentPage.name;
write_file.writeln(project_name + " : p. " + pg_nr + "\r\r");
}
}
app.findTextPreferences = NothingEnum.nothing;
app.changeTextPreferences = NothingEnum.nothing;
write_file.close();
return;
}
这里的脚本被修改为将结果推送到一个数组,然后按文档中出现的顺序对它们进行排序。
显然答案已经晚了...但希望它在将来有用。
main ();
function main() {
var arrResults = [];
#target indesign;
var doc = app.activeDocument;
app.findTextPreferences = NothingEnum.nothing;
app.changeTextPreferences = NothingEnum.nothing;
app.findChangeTextOptions.includeLockedLayersForFind = true;
app.findChangeTextOptions.includeLockedStoriesForFind = true;
app.findChangeTextOptions.includeHiddenLayers = false;
app.findChangeTextOptions.includeMasterPages = false;
app.findChangeTextOptions.includeFootnotes = true;
app.findChangeTextOptions.caseSensitive = false;
app.findChangeTextOptions.wholeWord = false;
project_name = "Project Name";
app.findTextPreferences.findWhat = project_name;
find_txt = doc.findText();
for (var i = 0; i < find_txt.length; i++) {
if (find_txt[i].contents == project_name) {
found_txt = find_txt[i];
pg_nr = found_txt.parentTextFrames[0].parentPage.name;
pg_index = found_txt.parentTextFrames[0].parentPage.documentOffset;
// pushes results into an array of objects
arrResults[arrResults.length] = {"project_name":project_name,"page_number":pg_nr,"page_index":pg_index};
}
}
app.findTextPreferences = NothingEnum.nothing;
app.changeTextPreferences = NothingEnum.nothing;
// sorts array by the document offset (order of appearance in document)
arrResults = arrResults.sort(function(a,b){return a.page_index>b.page_index});
// convert object to string
for(var i = 0; i<arrResults.length; i++){
arrResults[i] = "project:"+arrResults[i].project_name+", pg:"+arrResults[i].page_number;
}
var file_name = new Date() + "-Title-Project_Name-Page_Location";
var filepath = "~/Desktop/" + file_name + ".txt";
var write_file = new File(filepath);
var write_text;
write_text = write_file.open('w');
write_file.encoding = "UTF-8";
write_file.lineFeed = "Macintosh";
write_file.write(arrResults.join("\n"));
return;
}