Highlighted

Invalid text location

Advocate ,
Feb 26, 2018

Copy link to clipboard

Copied

Dear all,

Int he following script I want to place a variable at a particular position in a paragraph.

Obviously my method to define a TextLocation in line 11 is wrong. Line 26is never executed and hence no variable inserted.

TestInsertVariable ();

function TestInsertVariable () {
  var paraText = "Far far away, behind the word mountains, far from the countries Vokalia and Consonantia, there live the blind texts."
  var  oDoc = app.ActiveDoc, sValue, sVarName, oTextLoc, oPgf;

  if(oDoc.ObjectValid()) {
    oPgf = oDoc.MainFlowInDoc.FirstTextFrameInFlow.FirstPgf;
    oTextLoc = new TextLoc(oPgf, 0);
    oDoc.AddText(oTextLoc, paraText);              // create a paragraph
    oTextLoc = new TextLoc(oPgf, 17);              // arbitrary place
    sVarName = "GugusVariable";
    sValue   = "--- Anything I want to see in my variable ---";
    InsertVariable (oDoc, oTextLoc, sVarName, sValue);

  } else {
    alert ("Document does not exist or is invalid");
  }
} //--- end TestInsertVariable

function InsertVariable (oDoc, oTextLoc, sVarName, sValue) { //=== Insert variable at location ====
var oVar;
$.bp(true);
  oVar = oDoc.NewAnchoredFormattedVar (sVarName, oTextLoc);
  if (oVar.ObjectValid ()) {
    oVar.Fmt = sValue;
  }
} //--- end InsertVariable

Do I need the detour with TextSelection, etc. ?

Hi Klaus,

you just forgot to create the variable in the second function

function InsertVariable (oDoc, oTextLoc, sVarName, sValue) { //=== Insert variable at location ==== 

    var oVar; 

   

    var loCellVar = oDoc.NewNamedVarFmt(sVarName);  // NEW

    loCellVar.Fmt = sValue; // NEW

   

    oVar = oDoc.NewAnchoredFormattedVar (loCellVar.Name, foTextLoc);  // CHANGED FIRST PARAM to loCellVar.Name

    

   /*

       You don't need that

      if (oVar.ObjectValid())

        { 

        oVar.Fmt = sValue; 

        } 

*/

    } //--- end InsertVariable 


    } //--- end InsertVariable 

TOPICS
Scripting

Views

201

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more

Invalid text location

Advocate ,
Feb 26, 2018

Copy link to clipboard

Copied

Dear all,

Int he following script I want to place a variable at a particular position in a paragraph.

Obviously my method to define a TextLocation in line 11 is wrong. Line 26is never executed and hence no variable inserted.

TestInsertVariable ();

function TestInsertVariable () {
  var paraText = "Far far away, behind the word mountains, far from the countries Vokalia and Consonantia, there live the blind texts."
  var  oDoc = app.ActiveDoc, sValue, sVarName, oTextLoc, oPgf;

  if(oDoc.ObjectValid()) {
    oPgf = oDoc.MainFlowInDoc.FirstTextFrameInFlow.FirstPgf;
    oTextLoc = new TextLoc(oPgf, 0);
    oDoc.AddText(oTextLoc, paraText);              // create a paragraph
    oTextLoc = new TextLoc(oPgf, 17);              // arbitrary place
    sVarName = "GugusVariable";
    sValue   = "--- Anything I want to see in my variable ---";
    InsertVariable (oDoc, oTextLoc, sVarName, sValue);

  } else {
    alert ("Document does not exist or is invalid");
  }
} //--- end TestInsertVariable

function InsertVariable (oDoc, oTextLoc, sVarName, sValue) { //=== Insert variable at location ====
var oVar;
$.bp(true);
  oVar = oDoc.NewAnchoredFormattedVar (sVarName, oTextLoc);
  if (oVar.ObjectValid ()) {
    oVar.Fmt = sValue;
  }
} //--- end InsertVariable

Do I need the detour with TextSelection, etc. ?

Hi Klaus,

you just forgot to create the variable in the second function

function InsertVariable (oDoc, oTextLoc, sVarName, sValue) { //=== Insert variable at location ==== 

    var oVar; 

   

    var loCellVar = oDoc.NewNamedVarFmt(sVarName);  // NEW

    loCellVar.Fmt = sValue; // NEW

   

    oVar = oDoc.NewAnchoredFormattedVar (loCellVar.Name, foTextLoc);  // CHANGED FIRST PARAM to loCellVar.Name

    

   /*

       You don't need that

      if (oVar.ObjectValid())

        { 

        oVar.Fmt = sValue; 

        } 

*/

    } //--- end InsertVariable 


    } //--- end InsertVariable 

TOPICS
Scripting

Views

202

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
Feb 26, 2018 0
Enthusiast ,
Feb 26, 2018

Copy link to clipboard

Copied

Hi Klaus,

you just forgot to create the variable in the second function

function InsertVariable (oDoc, oTextLoc, sVarName, sValue) { //=== Insert variable at location ==== 

    var oVar; 

   

    var loCellVar = oDoc.NewNamedVarFmt(sVarName);  // NEW

    loCellVar.Fmt = sValue; // NEW

   

    oVar = oDoc.NewAnchoredFormattedVar (loCellVar.Name, foTextLoc);  // CHANGED FIRST PARAM to loCellVar.Name

    

   /*

       You don't need that

      if (oVar.ObjectValid())

        { 

        oVar.Fmt = sValue; 

        } 

*/

    } //--- end InsertVariable 


    } //--- end InsertVariable 

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
Reply
Loading...
Feb 26, 2018 0
Adobe Community Professional ,
Feb 26, 2018

Copy link to clipboard

Copied

You can make this a little more general with a "helper" function:

function getVarFmt (varName, varDef, doc) {

  

    // Get a variable format from the document; if it doesn't exist, create it.

    var varFmt = doc.GetNamedVarFmt (varName);

    if (varFmt.ObjectValid () === 0) {

        varFmt = doc.NewNamedVarFmt (varName);

        varFmt.Fmt = varDef;

    }

    return varFmt;

}

This ensures that, if the variable format already exists, it will be used; if it doesn't exist, it will be created. In the function above, I am passing in a "varDef" argument but that won't be used if the variable format already exists; it will only be used if the function has to create the format. In the example below, I don't pass in a definition argument, but set a generic string if the cross-reference format doesn't exist (line 08):

function getXRefFmt (name, doc) {

   

    var xrefFmt;

   

    xrefFmt = doc.GetNamedXRefFmt (name);

    if (!xrefFmt.ObjectValid ()) {

        xrefFmt = doc.NewNamedXRefFmt (name);

        xrefFmt.Fmt = "*** XRefFmt needs to be defined ***";

    }

    return xrefFmt;

}

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
Reply
Loading...
Feb 26, 2018 0
K.Daube LATEST
Advocate ,
Feb 26, 2018

Copy link to clipboard

Copied

Rick, thanks for this additional information.

I already expanded my InsertVariable function analogous to your getVarFmt - the variable may be already defined or needs to be defined.

I'll put Your examples into my 'private database'.

Klaus

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
Reply
Loading...
Feb 26, 2018 0
Advocate ,
Feb 26, 2018

Copy link to clipboard

Copied

Thanks, Klaus!

I forgot that I do not insert an already known variable, but also need to define the new variable …

Likes

Translate

Translate

Report

Report
Community Guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
Reply
Loading...
Feb 26, 2018 0