4 Replies Latest reply on Apr 4, 2013 2:28 PM by Paul Riggott

    Data Driven Graphics Question

    RagnaroktA

      So I have a CSV file for my data driven graphics, and I know how to get all of that set up and working just fine. The trouble is, I'd like to somehow do the following:

       

      If the value of the layer named "CorrectAnswer" = a number 1 through 4 Then

           Change the fill of the text in a layer named "1", "2", "3", or "4" to #A62124

      End If

       

      I'd like to do this as a script that I can call during batch processing of the image. Anyone know if that's possible?

        • 1. Re: Data Driven Graphics Question
          Michael L Hale Level 5

          You could add solidColor layers above each of your text layers and clip it to the text layer. Then you could control the visibility/color of the text with the fields in the csv file.

          • 2. Re: Data Driven Graphics Question
            RagnaroktA Level 1

            So I ended up needing to change the way I scraped the data I'm using, and this is what I need now. Any ideas or code snippets?

             

            If the text value of Layer(Answer1 OR Answer2 OR Answer3 OR Answer4) = the text value of a hidden Layer(CorrectAnswer) Then

            Change the color of the text for Layer(Answer1 OR Answer2 OR Answer3 OR Answer4) to #A62124

            End If

            • 3. Re: Data Driven Graphics Question
              pixxxel schubser MVP & Adobe Community Professional

              Like this?

               

               

              #target photoshop
              
              var strtRulerUnits = app.preferences.rulerUnits;
              var strtTypeUnits = app.preferences.typeUnits;
              app.preferences.rulerUnits = Units.PIXELS;
              app.preferences.typeUnits = TypeUnits.POINTS;
              
              var docRef = app.documents.add(600, 600, 300);
              
              // suppress all dialogs
              app.displayDialogs = DialogModes.NO;
              
              var textColor = new SolidColor;
              textColor.rgb.red = 0;
              textColor.rgb.green = 0;
              textColor.rgb.blue = 255;
              
              var answerColor = new SolidColor;
              answerColor.rgb.red = 166;
              answerColor.rgb.green = 33;
              answerColor.rgb.blue = 36;
              
              var newTextLayer1 = docRef.artLayers.add();
              newTextLayer1.kind = LayerKind.TEXT;
              newTextLayer1.name = "1";
              newTextLayer1.textItem.contents = "Text 1";
              newTextLayer1.textItem.position = Array(50, 100);
              newTextLayer1.textItem.size = 12;
              newTextLayer1.textItem.color = textColor;
              
              var newTextLayer2 = docRef.artLayers.add();
              newTextLayer2.kind = LayerKind.TEXT;
              newTextLayer2.name = "2";
              newTextLayer2.textItem.contents = "Text 2";
              newTextLayer2.textItem.position = Array(50, 200);
              newTextLayer2.textItem.size = 12;
              newTextLayer2.textItem.color = textColor;
              
              app.refresh()
              
              var newTextLayer3 = docRef.artLayers.add();
              newTextLayer3.kind = LayerKind.TEXT;
              newTextLayer3.name = "answer";
              newTextLayer3.textItem.contents = "Text " +prompt ("1 or 2", 1).toString();
              newTextLayer3.textItem.position = Array(50, 300);
              newTextLayer3.textItem.size = 12;
              newTextLayer3.textItem.color = textColor;
              newTextLayer3.visible = false;
              
              var checkLay = prompt ("Check layers contents? (y/n)", "y");
              if (checkLay == "y") {
                  var Match = 0;
                  if (newTextLayer1.textItem.contents == newTextLayer3.textItem.contents) {
                      Match++;
                      newTextLayer1.textItem.color = answerColor;
                      }
                  if (newTextLayer2.textItem.contents == newTextLayer3.textItem.contents) {
                      Match++;
                      newTextLayer2.textItem.color = answerColor;
                      }
                  alert (Match + " match")
                  }
              
              app.preferences.rulerUnits = strtRulerUnits;
              app.preferences.typeUnits = strtTypeUnits;
              
              
              • 4. Re: Data Driven Graphics Question
                Paul Riggott Level 6

                You can't use logic when working with  datasets. You would need to write a macro in your spreadsheet to create the fields to your needs, then export to csv. Mike has come up with a brilliant idea so that you can select the required colour via your csv file.