/* author: @fabiantheblind This script analyses a text and gets the positions of words Has also a nice setup function: This function creates a document with some preset vales It also creates a textframe on page one */ main(); function main(){ var pw = 200; // for easier handling var ph = 200; // for easier handling /* These functions build a basic setup this is for better reuse */ var placeholder_text = create_placeholder(); // this si the placeholder text var result_of_doc_setup = basic_doc_setup(pw, ph, false, placeholder_text); alert("This is the result of the doc setup function:"+ result_of_doc_setup); // have a look at the rsult of the setup function /* separate the result of the setup function into single variables. for better handling */ var doc = result_of_doc_setup[0]; // This is a doc var page = result_of_doc_setup[1]; // This is a page var tFrame = result_of_doc_setup[2]; // this is our textframe /* The next function uses the build in search options to find a user defined word and returns an object that looks like this { "word":"Hello World", "position":[100,200] }wn and onspect the function with care the trick is to look for an objects var x = Object.horizontalOffset; var y = Object.baseline; This only works with Text not with graphic objects Go down and look into the function */ var result_of_search = text_find_word(doc, "ich"); // lets have a detaild look // first use toSource() to get the object as string // split the string into an array by "," // joind the string with a breakline // this is only for display alert( "This is the result of the search:\n"+ result_of_search.toSource().split(",").join("\n") ); // these variables are for better handling var radius = 2.5; // this is the radius of a oval we will draw var origin_x = pw / 2; // this is its x loc var origin_y = 0; // this is the y loc // create a circle on top of the page var origin = page.ovals.add(); origin.geometricBounds = [ origin_y - radius,origin_x - radius ,origin_y + radius, origin_x + radius]; origin.fillColor = doc.swatches.item(3);/* Thats black on creation */ // now loop thru the results and draw a line from every words location // to the origin oval for(var i = 0; i < result_of_search.length;i++){ var res_x = result_of_search[i].position[0]; // this is x of the result var res_y = result_of_search[i].position[1]; // this is y of the result var gl = page.graphicLines.add(); // set the anchors of the graphicLine gl.paths.item(0).pathPoints[0].anchor = [origin_x,origin_y]; gl.paths.item(0).pathPoints[1].anchor = [res_x,res_y]; }; // end of loop }; // end of main function /* This uses the find and change options to find the location of a word */ function text_find_word(the_doc, word_string){ app.findTextPreferences = NothingEnum.nothing; // now empty the find what field!!!thats important!!! app.changeTextPreferences = NothingEnum.nothing; // emptys the change to field!!!thats important!!! var result = new Array(); // this will be our return value app.findTextPreferences.findWhat = word_string; // set the find what field var fc_result = the_doc.findText(); // execute the search findText() returns an Array // alert(fc_result.length); // now loop thru the results for(var i = 0; i < fc_result.length;i++){ var x = fc_result[i].horizontalOffset; var y = fc_result[i].baseline; /* There are also these to options endBaseline - Vertical offset of the end of the text. endHorizontalOffset - Horizontal offset of the end of the text. */ // create an object and push it into the array result.push({"word":word_string,"position":[x,y]}); } // this returns an array of objects return result; }; // end of text_find_word function /* This function creates a document with some preset vales It also creates a textframe on page one **************ARGUMENTS************** page_width Number page_height Number facing_pages Boolean text_frame_content String **************RETURN VALUES************** it returns an array of objects [Object Document, Object Page, Object TextFrame] */ function basic_doc_setup(page_width, page_height, facing_pages, text_frame_content){ // create a doc with a size of 200 w and h var doc = app.documents.add({ documentPreferences:{ pageWidth : page_width, pageHeight: page_height, facingPages : facing_pages } }); /* get the page create a textframe with a the content */ var page = doc.pages.item(0); var top = page.marginPreferences.top; var left = page.marginPreferences.left; var right = page.marginPreferences.right; var bottom = page.marginPreferences.bottom; // now make a textframe with the content of the argument text_frame_content var tf = doc.pages.item(0).textFrames.add({ geometricBounds:[top,left,page_height - bottom, page_width - right], contents: text_frame_content, }); return[doc, page, tf]; }; // end of basic_doc_setup function /* This function just returns this text So it has not to be in the top of the main function ! Have a look at the unicode character \u00E4 for ä \u00df for ß no arguments returns String */ function create_placeholder () { var the_text = "Ich bin Blindtext. Von Geburt an.\r"+ "Es hat lange gedauert, bis ich begriffen habe,\r"+ "was es bedeutet, ein blinder Text zu sein:\r"+ "Man macht keinen Sinn. Man wirkt hier und da aus dem Zusammenhang gerissen.\r"+ "Oft wird man gar nicht erst gelesen.\r"+ "Aber bin ich deshalb ein schlechter Text?\r"+ "Ich wei\u00df, dass ich nie die Chance haben werde im Stern zu erscheinen.\r"+ "Aber bin ich darum weniger wichtig? Ich bin blind!\r"+ "Aber ich bin gerne Text.\r"+ "Und sollten Sie mich jetzt tats\u00E4chlich zu Ende lesen,\r"+ "dann habe ich etwas geschafft, was den meisten \"normalen\" Texten nicht gelingt.\r"+ "Ich bin Blindtext. Von Geburt an.\r"+ "Es hat lange gedauert, bis ich begriffen habe, was es bedeutet, ein blinder Text zu sein:\r"+ "Man macht keinen Sinn. Man wirkt hier und da aus dem Zusammenhang gerissen.\r"+ "Oft wird man gar nicht erst gelesen. Aber bin ich deshalb ein schlechter Text?\r"+ "Ich wei\u00df, dass ich nie die Chance haben werde im Stern zu erscheinen.\r"+ "Aber bin ich darum weniger wichtig? Ich bin blind!\r"+ "Aber ich bin gerne Text.\r"+ "Und sollten Sie mich jetzt tats\u00E4chlich zu Ende lesen, dann habe ich etwas geschafft,\r"+ "was den meisten \"normalen\" Texten nicht gelingt. Ich bin Blindtext."; return the_text; }; // end of placeholder text function