4 Replies Latest reply on Dec 14, 2016 4:12 AM by printastic_dev

    Can't add items to dynamically created page

    printastic_dev Level 1

      I'm writing a Javascript script that will take a JSON file describing several page layouts (comprising one or more of text frames) and automatically create an InDesign document from it.

       

      The script mostly works, but has a strange bug where the items destined for the last page always get put onto the last-but-one page. Any thoughts on why this might be happening? Any thoughts would be greatly appreciated!

       

      Here's the minimal code:

       

      // load JSON file using a parser into jsonObj
      
      
      // add the required number of pages
      for (var i = 0; i < jsonObj.PageLayouts.length - 1; i++) {
        app.activeDocument.pages.add(LocationOptions.AFTER, app.activeDocument.pages[i]);
      }
      
      
      // create text frames using JSON doc on each page
      var docPages = app.activeDocument.pages;
      for (var i = 0; i < jsonObj.PageLayouts.length; i++) {
        for (var j = 0; j < jsonObj.PageLayouts[i].Placeholders.length; j++) {
        origin_x = jsonObj.PageLayouts[i].Placeholders[j].Frame.Origin.X / 10;
        origin_y = jsonObj.PageLayouts[i].Placeholders[j].Frame.Origin.Y / 10;
        height   = jsonObj.PageLayouts[i].Placeholders[j].Frame.Size.Height / 10;
        width    = jsonObj.PageLayouts[i].Placeholders[j].Frame.Size.Width / 10;
      
        bottom_x = origin_x + width;
        bottom_y = origin_y + height;
      
      
        var tf = docPages[i].textFrames.add({
        geometricBounds: [origin_y, origin_x, bottom_y, bottom_x]
        });
        $.writeln('  - Added rect (page ' : i + ' , rect ' + j + ')');
        }
      }
      

       

      And here's the sample JSON, which should create 3 pages, with 1 textFrames on the first 2 pages, and 2 textFrames on the 3rd page. Instead, I get 3 textFrames on the second page, and none on the last page.

       

      {
          "PageLayouts": [
              {
                  "Placeholders": [
                      {
                          "Frame": {
                              "Origin": {
                                  "X": 0,
                                  "Y": 0
                              },
                              "Size": {
                                  "Height": 2100,
                                  "Width": 2970
                              }
                          } 
                      }
                  ]
              },
              {
                  "Placeholders": [
                      {
                          "Frame": {
                              "Origin": {
                                  "X": 120,
                                  "Y": 120
                              },
                              "Size": {
                                  "Height": 1860,
                                  "Width": 2730
                              }
                          }
                      }
                  ]
              },
              {
                  "Placeholders": [
                      {
                          "Frame": {
                              "Origin": {
                                  "X": 120,
                                  "Y": 1800
                              },
                              "Size": {
                                  "Height": 200,
                                  "Width": 2730
                              }
                          },
                      },
                      {
                          "Frame": {
                              "Origin": {
                                  "X": 120,
                                  "Y": 120
                              },
                              "Size": {
                                  "Height": 1640,
                                  "Width": 2730
                              }
                          }
                      }
                  ]
              }
          ]
      }        
      
        • 1. Re: Can't add items to dynamically created page
          Michael Witherell Adobe Community Professional

          This should be moved over to InDesign Scripting

          • 2. Re: Can't add items to dynamically created page
            Loic.Aigon Adobe Community Professional

            try this:

             

            var main = function() {
              var d = app.properties.activeDocument,
              data, pls, i = 0, n = 0;
              if ( !d) return;
            
              data = {  
                "PageLayouts": [  
                    {  
                        "Placeholders": [  
                            {  
                                "Frame": {  
                                    "Origin": {  
                                        "X": 0,  
                                        "Y": 0  
                                    },  
                                    "Size": {  
                                        "Height": 2100,  
                                        "Width": 2970  
                                    }  
                                }   
                            }  
                        ]  
                    },  
                    {  
                        "Placeholders": [  
                            {  
                                "Frame": {  
                                    "Origin": {  
                                        "X": 120,  
                                        "Y": 120  
                                    },  
                                    "Size": {  
                                        "Height": 1860,  
                                        "Width": 2730  
                                    }  
                                }  
                            }  
                        ]  
                    },  
                    {  
                        "Placeholders": [  
                            {  
                                "Frame": {  
                                    "Origin": {  
                                        "X": 120,  
                                        "Y": 1800  
                                    },  
                                    "Size": {  
                                        "Height": 200,  
                                        "Width": 2730  
                                    }  
                                },  
                            },  
                            {  
                                "Frame": {  
                                    "Origin": {  
                                        "X": 120,  
                                        "Y": 120  
                                    },  
                                    "Size": {  
                                        "Height": 1640,  
                                        "Width": 2730  
                                    }  
                                }  
                            }  
                        ]  
                    }  
                ]  
            }          
            
            
            
            
              pls = data.PageLayouts;
              n = pls.length;
              while ( i<n )  {
              addPlaceHolders (d, pls, i );
              i++;
              }
            }
            
            
            function addPlaceHolders(doc, pageLayouts, index ) {
              var phs = pageLayouts[index].Placeholders, ph, page, origins, sizes ;
            
              page = doc.pages[index];
              !page.isValid && page = doc.pages.add();
            
              while ( ph = phs.pop() ) {
              origins = ph.Frame.Origin;
              sizes = ph.Frame.Size;
              page.textFrames.add({  
              geometricBounds: [origins.Y, origins.X, origins.Y+sizes.Height, origins.X+sizes.Width] 
              });   
              }
            }
            main();
            

             

             

            HTH

             

            Loic

            http://www.ozalto.com/

            • 3. Re: Can't add items to dynamically created page
              printastic_dev Level 1

              Thanks Loic! Much nicer code than mine. However it gave the same problem.

               

              We figured it out - it's because the "Facing Pages" option is enabled, which means that odd-numbered pages from 3 onwards are on the right side of a double-page spread, and so the origin coordinates need to be changed to account for this. (Both scripts work fine when Facing Pages is disabled.)

               

              All the best,

               

              Rehan

              • 4. Re: Can't add items to dynamically created page
                printastic_dev Level 1

                Apologies for this, I'm new to the forums and didn't see the separate Scripting forum. I'll make sure I post there from now on.