// // //****************************************************************************************************************************************** // FUNZIONI PERSONALIZZATE //****************************************************************************************************************************************** var imageArr = new Array(); var productOnCurrentPage = 0; /* var theDate = new Date(); var theYear = theDate.getFullYear().toString(); // convert the month from 0..12 to 00..12 var theMonth = (theDate.getMonth()+1).toString(); if (theDate.getMonth() < 10) { theMonth = "0" + theMonth; } // convert the day from 0..31 to 00.31 var theDay = theDate.getDate().toString(); if (theDate.getDate() < 10) { theDay = "0" + theDay; } var today = theDay+"-"+theMonth+"-"+theYear; */ function OverRideAllMasterPageItems(currentPage) { var myDoc = app.activeDocument; var myPage = myDoc.pages[currentPage]; var myObjects = myPage.masterPageItems; for (i = 0; i <= myObjects.length - 1; i++) { myObjects[i].override(myPage); } } Group.prototype.addObject = function (theObj) { var myArray = this.pageItems.everyItem().id; myArray.push(theObj.id); var myParent = this.parent; try { this.ungroup(); } catch (e) { throw "Unable to ungroup"; } var gpArray = new Array(); for (var j = 0; myArray.length > j; j++) { gpArray.push(myParent.pageItems.itemByID(myArray[j])); } try { myParent.groups.add(gpArray); } catch (e) { throw "Unable to regroup"; } }; function createTable(tableArray, y, x, templateProd) { var TITLE_GAP = 3; var DESCRIPTION_GAP = 3; var TITLE_HEIGHT = 2.64583333333334; var blueCell = false; var legend = true; var title = tableArray[0]; title = title == '' ? tableArray[7] : title + ' ' + tableArray[7]; var descrizione = tableArray[1]; var cols = tableArray[2]; var rows = tableArray[3]; var myContents = tableArray[4]; var template = 2; var occupazione = tableArray[6]; //add textframe that will contain the table pageWidth = currentPage.bounds[3] - currentPage.marginPreferences.right; x1 = x; y1 = y; x2 = x1 + currentPage.bounds[3] - currentPage.bounds[1]; y2 = myDocument.documentPreferences.pageHeight - currentPage.marginPreferences.bottom; // write the top Title tfTitle = null; if (title != "") { var tfTitle = currentPage.textFrames.add( myDocument.layers.item("BodyText"), undefined, undefined, {geometricBounds: [y1, x1, y2, x2]} ); tfTitle.insertionPoints.item(-1).contents = title; tfTitle.paragraphs.item(0).applyParagraphStyle(myDocument.paragraphStyles.item("colHeader", false)); tfTitle.fit(FitOptions.frameToContent); y1 = y1 + tfTitle.geometricBounds[2] - tfTitle.geometricBounds[0] + TITLE_GAP; } else { y1 = y1 + TITLE_HEIGHT + TITLE_GAP; } if (myContents != null) { var tfTable = currentPage.textFrames.add( myDocument.layers.item("BodyText"), undefined, undefined, {geometricBounds: [y1, x1, y2, x2]} ); var myTable = tfTable.parentStory.tables.add(); myTable.columnCount = cols; myTable.bodyRowCount = rows; //apply a table style tfTable.paragraphs[0].appliedParagraphStyle = "tabella paragrafo"; myTable.appliedTableStyle = "ecoTabella"; right = tfTable.geometricBounds[3]; left = tfTable.geometricBounds[1]; width = right - left; myTable.width = width; for (var i = 0; i < myContents.length; i++) { // write contents of textframe if (myContents[i][0] == "") myContents[i][0] = " "; myTable.cells.item(i).contents = myContents[i][0]; if (myTable.cells.item(i).paragraphs.length > 0) { if (myContents[i][3] == 1) { myTable.cells.item(i).appliedCellStyle = "ecoCellaHeader"; myTable.cells.item(i).paragraphs[0].applyParagraphStyle(myDocument.paragraphStyles.item("titolo tabelle", false)); } else if (myContents[i][3] == 2) { myTable.cells.item(i).appliedCellStyle = "ecoCellaGrigia"; myTable.cells.item(i).paragraphs[0].applyParagraphStyle(myDocument.paragraphStyles.item("testo tabelle", false)); } else { myTable.cells.item(i).appliedCellStyle = "ecoCella"; myTable.cells.item(i).paragraphs[0].applyParagraphStyle(myDocument.paragraphStyles.item("testo tabelle", false)); } } colspan = myContents[i][1]; rowspan = myContents[i][2]; if (colspan > 1) { myTable.cells.item(i).merge(myTable.cells.item(i + colspan - 1)); } var currentRow = myTable.cells.item(i); var cr = currentRow.name.split(":"); if (rowspan > 1) { cr[1] = parseInt(cr[1]) + rowspan - 1; var mycell = myTable.cells.itemByName(cr[0] + ":" + cr[1]); myTable.cells.item(i).merge(mycell); } // Apply the BLUE cell style if (myContents[i][4] == 1) { myTable.cells.item(i).appliedCellStyle = "ecoCellaBlu"; blueCell = true; } if (myContents[i][5] == -1) { myTable.cells.item(i).paragraphs.everyItem().justification = Justification.leftAlign; } if (myContents[i][5] == 1) { myTable.cells.item(i).paragraphs.everyItem().justification = Justification.rightAlign; } } // Fit the frame to the table and expand the cells app.select(myTable); tfTable.fit(FitOptions.frameToContent); for (var n = 0; n < myTable.cells.length; n++) { var myCell = myTable.cells[n]; while (myCell.overflows == true && tfTable.overflows == false) { myCell.width += 1; myCell.recompose(); } } // Apply the cell style //myTable.cells.everyItem().appliedCellStyle="ecoCella"; // Some adjustments tfTable.paragraphs.everyItem().justification = Justification.leftAlign; tfTable.fit(FitOptions.frameToContent); tableFit(tfTable); y1 = y1 + tfTable.geometricBounds[2] - tfTable.geometricBounds[0]; tfAvailability = null; // Is blue Cell?? if (blueCell == true) { try { y1 = y1 + tfTitle.geometricBounds[2] - tfTitle.geometricBounds[0]; var tfAvailability = currentPage.textFrames.add( myDocument.layers.item("BodyText"), undefined, undefined, { geometricBounds: [tfTitle.geometricBounds[0], tfTable.geometricBounds[3]-22, tfTitle.geometricBounds[0]+10, tfTable.geometricBounds[3]], contents: available_desc, appliedObjectStyle: myDocument.objectStyles.item("Legenda") } ); tfAvailability.paragraphs[0].appliedParagraphStyle = "disponibile"; tfAvailability.fit(FitOptions.frameToContent); } catch (e) { } } } // write the description tfDescription = null; if (descrizione != "") { var x1_descr = 0; var y1_descr = 0; var x2_descr = 0; var y2_descr = 0; if(tfTable) { x1_descr = tfTable.geometricBounds[2] + DESCRIPTION_GAP; y1_descr = tfTable.geometricBounds[1]; x2_descr = x1_descr+120; y2_descr = tfTable.geometricBounds[3]; } else { x1_descr = y1; y1_descr = x; y2_descr = x1 + currentPage.bounds[3] - currentPage.bounds[1] - currentPage.marginPreferences.right - currentPage.marginPreferences.left; x2_descr = myDocument.documentPreferences.pageHeight - currentPage.marginPreferences.bottom; } var tfDescription = currentPage.textFrames.add( myDocument.layers.item("BodyText"), undefined, undefined, { geometricBounds: [x1_descr, y1_descr, x2_descr, y2_descr], contents: descrizione } ); // sistemo la formattazione for (var i = 0; i < tfDescription.paragraphs.length; i++) { tfDescription.paragraphs.item(i).applyParagraphStyle(myDocument.paragraphStyles.item("didascalia tabella", false)); } tfDescription.fit(FitOptions.frameToContent); } /* if (blueCell == true) { //groupLegend = currentPage.groups.add([tfLegend, tfAvailability]); //ret = currentPage.groups.add([groupLegend, tfTable, tfTitle, rectLegend]); ret = currentPage.groups.add([tfTable, tfTitle]); } else { //ret = currentPage.groups.add([tfLegend, tfTable, tfTitle]); ret = currentPage.groups.add([tfTable, tfTitle]); } */ var components = []; if (tfTable) components.push(tfTable); if (tfTitle) components.push(tfTitle); if (tfDescription) components.push(tfDescription); if (tfAvailability) components.push(tfAvailability); if (components.length > 1 ) ret = currentPage.groups.add(components); else ret = components.pop(); return ret; } function tableFit(ftTable) { var thisDoc = app.activeDocument; var FLUIDFLAG = thisDoc.withinDelay(); var memUnits = thisDoc.getUnits(); thisDoc.setUnitsTo(MeasurementUnits.points); var selObjs = app.activeWindow.selection; var objsToFit = null; for (var i = selObjs.length - 1; i >= 0; i--) { objsToFit = selObjs[i].asObjsToFit(); if (objsToFit) { for (var j = objsToFit.length - 1; j >= 0; j--) objsToFit[j].manageFit(FLUIDFLAG); } } thisDoc.setUnitsTo(memUnits); thisDoc.storeTimeStamp(); if (ftTable != null) { ftTable.paragraphs.everyItem().justification = Justification.leftAlign; ftTable.fit(FitOptions.frameToContent); } } function createHeaderBar(name, desc, y) { var barHeight = 30; var titleHeight = 15; var barTitle = currentPage.textFrames.add( myDocument.layers.item("objectLayer"), undefined, undefined, {geometricBounds: [y, currentPage.bounds[1] + currentPage.marginPreferences.left, y + titleHeight, currentPage.bounds[1] + currentPage.marginPreferences.left + barWidth], contents: name } ); if (barTitle.paragraphs.length > 0) { try { barTitle.paragraphs.item(0).applyParagraphStyle(myDocument.paragraphStyles.item("Header Title")); } catch (e) { } } var barSubTitle = currentPage.textFrames.add( myDocument.layers.item("objectLayer"), undefined, undefined, {geometricBounds: [y + titleHeight, currentPage.bounds[1] + currentPage.marginPreferences.left, y + barHeight, currentPage.bounds[1] + currentPage.marginPreferences.left + barWidth], contents: desc } ); if (barSubTitle.paragraphs.length > 0) { try { barSubTitle.paragraphs.item(0).applyParagraphStyle(myDocument.paragraphStyles.item("Header Subtitle")); } catch (e) { } } barSubTitle.fit(FitOptions.frameToContent); return currentPage.groups.add([barTitle, barSubTitle]); } function createBar(name, desc, y) { var barHeight = 13; //add rectangle that will contain the table var bar = currentPage.rectangles.add( myDocument.layers.item("bar"), undefined, undefined, {geometricBounds: [y, currentPage.bounds[1] + currentPage.marginPreferences.left, y + barHeight, currentPage.bounds[3] - currentPage.marginPreferences.right], appliedObjectStyle: myDocument.objectStyles.item("headerBar", false) } ); if (name != "") name = name + " "; //add the textframe containing the title var barTitle = bar.textFrames.add( myDocument.layers.item("objectLayer"), undefined, undefined, {geometricBounds: [y, currentPage.bounds[1] + currentPage.marginPreferences.left, y + barHeight, currentPage.bounds[3] - currentPage.marginPreferences.right], contents: name + desc } ); //apply the style and the vertical alignment if (barTitle.paragraphs.length > 0) { try { barTitle.paragraphs.item(0).applyParagraphStyle(myDocument.paragraphStyles.item("Header Title")); barTitle.textFramePreferences.verticalJustification = VerticalJustification.centerAlign; barTitle.paragraphs[0].characters.itemByRange(0, name.length - 1).pointSize = 23; } catch (e) { } } return bar; } function createImage(file, x, y, dimension) { var myGraphicFile = file; if ((myGraphicFile != "") && (myGraphicFile != null)) { try { //inserisco l'immagine di sfondo var myGraphicBackground = currentPage.place(File(customer_path + 'image/bg.png'), [x, y], "objectLayer"); var myFrameBackground = myGraphicBackground[0].parent; myFrameBackground.geometricBounds = [y, x, y + dimension, x + dimension]; myGraphicBackground[0].fit(FitOptions.CONTENT_TO_FRAME); myFrameBackground.fit(FitOptions.centerContent); //inserisco l'immagine del prodotto var myGraphic = currentPage.place(File(image_path + myGraphicFile), [x, y], "objectLayer"); var myFrame = myGraphic[0].parent; myFrame.geometricBounds = [y, x, y + dimension, x + dimension]; myGraphic[0].fit(FitOptions.proportionally); myFrame.fit(FitOptions.centerContent); //raggruppo le due immagini ret = currentPage.groups.add([myFrame, myFrameBackground]); return ret; } catch (e) { return null; } ; } return false; } function createDescription(txt, x, y) { //add the textframe containing the title var tf = currentPage.textFrames.add( myDocument.layers.item("BodyText"), undefined, undefined, { geometricBounds: [y, x, myDocument.documentPreferences.pageHeight - currentPage.marginPreferences.bottom, x + barWidth], contents: txt, appliedObjectStyle: myDocument.objectStyles.item("col1") } ); tf.fit(FitOptions.frameToContent); return tf; } function createParagraph(arr, x, y, colWidth) { //add the textframe containing the title var tf = currentPage.textFrames.add( myDocument.layers.item("BodyText"), undefined, undefined, { geometricBounds: [y, x, myDocument.documentPreferences.pageHeight - currentPage.marginPreferences.bottom, x + colWidth], //contents: txt, appliedObjectStyle: myDocument.objectStyles.item("col1") } ); try { for (i = 0; i < arr.length; i++) { title = arr[i][0]; txt = arr[i][1]; tf.contents += title + "\r"; tf.contents += txt + "\r"; } for (i = 0; i < tf.paragraphs.length; i = i + 2) { tf.paragraphs[i].applyParagraphStyle(myDocument.paragraphStyles.item("colHeader", false)); } tf.fit(FitOptions.frameToContent); } catch (e) { } return tf; } function createDiv(y) { //add rectangle that will contain the table var div = currentPage.graphicLines.add( myDocument.layers.item("objectLayer"), undefined, undefined, {geometricBounds: [y, currentPage.bounds[1] + currentPage.marginPreferences.left, y, currentPage.bounds[3] - currentPage.marginPreferences.right], appliedObjectStyle: myDocument.objectStyles.item("div", false) } ); return div; } function createImgHeader(file, coord, occupancy) { var imageWidth = (coord[2] - coord[0]) * occupancy / 100; var myFrame = null; x1 = coord[0]; y1 = coord[1]; x2 = x1 + imageWidth; y3 = coord[3]; var myGraphicFile = file; try { var myGraphic = currentPage.place(File(image_path + myGraphicFile), [x1, y1], "objectLayer"); var myFrame = myGraphic[0].parent; myGraphic[0].appliedObjectStyle = myDocument.objectStyles.item("immagine"); var hImg = myGraphic[0].geometricBounds[2] - myGraphic[0].geometricBounds[0]; var wImg = myGraphic[0].geometricBounds[3] - myGraphic[0].geometricBounds[1]; var wTf = myFrame.geometricBounds[3] - myFrame.geometricBounds[1]; myFrame.geometricBounds = [y1, x1, y1 + hImg, x2]; if (x2 - x1 < wImg) { myGraphic[0].fit(FitOptions.proportionally); framegb = myFrame.geometricBounds; hImg = myGraphic[0].geometricBounds[2] - myGraphic[0].geometricBounds[0]; myGraphic[0].geometricBounds = [framegb[0], framegb[1], framegb[0] + hImg, framegb[3]]; } else { myFrame.fit(FitOptions.centerContent); } myFrame.fit(FitOptions.frameToContent); } catch (e) { return false; } return myFrame; } function createSubHeader(y, imgHeader, paragraphs, template) { var pageBottom = myDocument.documentPreferences.pageHeight - currentPage.marginPreferences.bottom; var x = 0; var addedImage = null; if (imgHeader != "") { switch (template) { case 1: case 2: case 4: addedImage = createImage(imgHeader, currentPage.bounds[1] + currentPage.marginPreferences.left, y, schemaImgDimension); x = schemaImgDimension; break; case 3: x1 = currentPage.bounds[1] + currentPage.marginPreferences.left; y1 = y; x2 = currentPage.bounds[3] - currentPage.marginPreferences.right; y2 = pageBottom; if ((imgHeader != "") && (imgHeader != null)) { addedImage = createImgHeader(imgHeader, [x1, y1, x2, y2], 100); } y = addedImage.geometricBounds[2]; break; } } var obj_paragraphs = null; if (paragraphs.length > 0) { obj_paragraphs = createParagraph(paragraphs, currentPage.bounds[1] + x + currentPage.marginPreferences.left, y, currentPage.bounds[3] - (currentPage.bounds[1] + currentPage.marginPreferences.right + currentPage.marginPreferences.right + x)); } var components = []; if (addedImage) components.push(addedImage); if (obj_paragraphs) { components.push(obj_paragraphs); bottom = obj_paragraphs.geometricBounds[2]; } if (template == 3 && obj_paragraphs.geometricBounds[2] > pageBottom) { obj_paragraphs.remove(); optimizePage(); productOnTop = true; currentPage = addPage(); footer = createFooter(); currentPage.appliedMaster = ecoMaster; obj_paragraphs = createParagraph(paragraphs, currentPage.bounds[1] + currentPage.marginPreferences.left, initY, currentPage.bounds[3] - (currentPage.bounds[1] + currentPage.marginPreferences.right + currentPage.marginPreferences.right)); } var sub_heeder = null; if (template == 3) { sub_heeder = obj_paragraphs; } else { if (components.length == 1) { sub_heeder = components.shift(); } else { sub_heeder = currentPage.groups.add(components); } } return sub_heeder; } function createHeader(y, prodTitle, imgProd, nameProd, description_txt) { var bar = createHeaderBar(nameProd, prodTitle, y); var pageBottom = myDocument.documentPreferences.pageHeight - currentPage.marginPreferences.bottom; var image = null; if (imgProd != "") { image = createImage(imgProd, currentPage.bounds[3] - currentPage.marginPreferences.right - prodImgDimension, y, prodImgDimension); } var description = null; if (description_txt != '') { description = createDescription(description_txt, bar.geometricBounds[1], bar.geometricBounds[2] + 5); } var components = []; if (bar) components.push(bar); if (image) components.push(image); if (description) components.push(description); var header_top = currentPage.groups.add(components); var y = header_top.geometricBounds[2]; var x = 0; indexTitle = nameProd.replace("\n", " ").replace("\n", " ").replace("\n", " ").replace("\n", " ").replace("\n", " ").replace("\n", " "); if (prodTitle != "") indexTitle += " " + prodTitle; // tronco il testo per evitare problemi con la creazione dell'indice indexTitle = indexTitle.substring(0, 120); indexTitle += "\t "; // creo il paragrafo per l'indice var tfIndice = currentPage.textFrames.add( myDocument.layers.item("BodyText"), undefined, undefined, { geometricBounds: [bar.geometricBounds[0] - 2.3, bar.geometricBounds[1] , bar.geometricBounds[0] - 0.3, bar.geometricBounds[3]], contents: indexTitle } ); tfIndice.paragraphs[0].appliedParagraphStyle = "indicel2"; var heeder = currentPage.groups.add([header_top, tfIndice]); // salvo l'immagine per la creazione dell'indice if (imgProd != "") imgPath = image_path + imgProd; else imgPath = customer_path + 'image/' + brand + '-default.png'; imageArr.push(imgPath); return heeder; } function createFooter() { return; var pageBottom = myDocument.documentPreferences.pageHeight - currentPage.marginPreferences.bottom; x1 = currentPage.bounds[1] + currentPage.marginPreferences.left; y1 = pageBottom; x2 = currentPage.bounds[3] - currentPage.marginPreferences.right; y2 = myDocument.documentPreferences.pageHeight; h = (x1 + x2) / 2; leftBox = [y1+3.769, x1, y2, h]; rightBox = [y1+3.769, h, y2, x2]; // create the Page Number var tfPagNum = currentPage.textFrames.add("footer"); tfPagNum.geometricBounds = [y1, x1, y2, x2]; if (currentPage.side == PageSideOptions.rightHand) tfPagNum.insertionPoints.item(0).contents = catalogo + " - " + versione + " "; tfPagNum.insertionPoints.item(-1).contents = sectionName + " pag. "; tfPagNum.insertionPoints.item(-1).contents = SpecialCharacters.autoPageNumber; if (currentPage.side == PageSideOptions.leftHand) tfPagNum.insertionPoints.item(-1).contents = " " + catalogo + " - " + versione; tfPagNum.paragraphs[0].appliedParagraphStyle = "footer"; // Apply the text alignment if (currentPage.side == PageSideOptions.rightHand) { tfPagNum.paragraphs.item(0).justification = Justification.rightAlign; tfPagNum.geometricBounds = rightBox; } else { tfPagNum.paragraphs.item(0).justification = Justification.leftAlign; tfPagNum.geometricBounds = leftBox; } // insert the logo var myGraphicFile = customer_path + "image/" + brand + "-footer.png"; var imageWidth = 20; if ((myGraphicFile != "") && (myGraphicFile != null)) { var x = currentPage.bounds[3] - currentPage.marginPreferences.right - imageWidth - 1; try { var myGraphic = currentPage.place(File(myGraphicFile), [0, 0], myDocument.layers.item("logo")); var myFrame = myGraphic[0].parent; var himg = myFrame.geometricBounds[2] - myFrame.geometricBounds[0]; var w = imageWidth; var centerPage = (x1 + x2 - w) / 2; myFrame.geometricBounds = [y1, centerPage, y1 + himg, centerPage + w]; myGraphic[0].fit(FitOptions.proportionally); myFrame.fit(FitOptions.frameToContent); } catch (e) { return null; } ; } return; } function removeHeader(header) { header.remove(); // quando rimuovo la header rimuovo anche l'immagine per l'indice imageArr.pop(); return true; } /* function removeHeader(objArr) { for (var i = 0; i < objArr.length; i++) { try { objArr[i].remove(); } catch (ex) { } } // quando rimuovo la header rimuovo anche l'immagine per l'indice imageArr.pop(); return true; } */ function addPage() { var newPage = myDocument.pages.add(); productOnCurrentPage++; return newPage; } function optimizePage() { // disabilito la funzione return; var bottom = myDocument.documentPreferences.pageHeight - currentPage.marginPreferences.bottom; pi = currentPage.allPageItems; var top = 0; lineCount = 0; for (var i = 0; i < pi.length; i++) { obj = pi[i]; if (obj.constructor.name == "Rectangle" && top == 0) top = obj.geometricBounds[2]; if (obj.constructor.name == "GraphicLine") { top = obj.geometricBounds[2]; lineCount++; } } if (lineCount > 1) return; var row = Array(); var rowCount = 1; row[rowCount - 1] = Array(); var elementCount = 0; var bottomRow = 0; var pageLeft = currentPage.bounds[1] + currentPage.marginPreferences.left; groups = currentPage.groups; for (var i = 0; i < groups.length; i++) { if (groups[i].geometricBounds[0] > top) { app.select(groups[i]); var groupLeft = groups[i].geometricBounds[1]; var meno = groupLeft - pageLeft; if (meno <= 0.1) { elementCount++; row[rowCount - 1][elementCount - 1] = groups[i]; rowCount++; elementCount = 0; row[rowCount - 1] = Array(); } else { elementCount++; row[rowCount - 1][elementCount - 1] = groups[i]; } if (bottomRow < groups[i].geometricBounds[2]) bottomRow = groups[i].geometricBounds[2]; } } var space = bottom - bottomRow; var rowSpace = space / (row.length); if (rowSpace > 10) rowSpace = 10; for (var i = 0; i < row.length; i++) { var diff = rowSpace * i; for (var j = 0; j < row[row.length - 1 - i].length; j++) { grp = row[row.length - 1 - i][j]; grp.geometricBounds = [grp.geometricBounds[0] + diff, grp.geometricBounds[1], grp.geometricBounds[2] + diff, grp.geometricBounds[3]]; // Center the images into the textframe var graph = grp.allGraphics; for (var k = 0; k < graph.length; k++) graph[k].fit(FitOptions.centerContent); // Align the Legend correctly for (var k = 0; k < grp.rectangles.length; k++) { myrect = grp.rectangles[k]; if (myrect.appliedObjectStyle == myDocument.objectStyles.item("Legenda", false)) { myrect.appliedObjectStyle = myDocument.objectStyles.item(0); myrect.appliedObjectStyle = myDocument.objectStyles.item("Legenda", false); } } } } } function addProduct(y, prodTitle, imgProd, imgHeader, nameProd, col1Arr, col2Arr, tableArr, template, multipage, newpage) { var pageBottom = myDocument.documentPreferences.pageHeight - currentPage.marginPreferences.bottom; // Create a blank (note) page if (multipage == 1 && currentPage.side == PageSideOptions.leftHand) { optimizePage(); productOnTop = true; currentPage = addPage(); bar = createBar("", "note e aggiornamenti", initY); for (var i = initY + 20; i < pageBottom - 5; i += 6) createDiv(i); footer = createFooter(); currentPage.appliedMaster = ecoMaster; y = pageBottom; } var paragraphs = col1Arr.concat(col2Arr); var description_txt = ''; //estraggo il primo paragrafo come desrizione e contetno i restanti nel secondo blocco if (paragraphs.length > 0) { description_txt = paragraphs.shift()[1]; } if (y > pageBottom - prodImgDimension || (productOnTop == false && productOnCurrentPage == 0) || (currentPage.side == PageSideOptions.rightHand && multipage == 1) || newpage == 1) { optimizePage(); productOnTop = true; currentPage = addPage(); footer = createFooter(); currentPage.appliedMaster = ecoMaster; grpHeader = createHeader(initY, prodTitle, imgProd, nameProd, description_txt); } else { grpHeader = createHeader(y, prodTitle, imgProd, nameProd, description_txt); bottom = grpHeader.geometricBounds[2]; if (bottom > pageBottom) { removeHeader(grpHeader); optimizePage(); productOnTop = true; currentPage = addPage(); footer = createFooter(); currentPage.appliedMaster = ecoMaster; grpHeader = createHeader(initY, prodTitle, imgProd, nameProd, description_txt); } } // Save the page start number productPageStart = currentPage.name; //adatto i frames al loro contenuto var myFrames = currentPage.textFrames; for (var oneFrame = 0; oneFrame < myFrames.length; oneFrame++) { myFrame = myFrames[oneFrame]; //app.select(myFrame); if (myFrame.locked == false) myFrame.fit(FitOptions.frameToContent); } var createdTableArr = []; // Calculate the bottom and the left headerBottom = grpHeader.geometricBounds[2]; bottom = headerBottom; var grpSubHeader = null; if (imgHeader || paragraphs.length > 0) { grpSubHeader = createSubHeader(bottom, imgHeader, paragraphs, template); bottom = grpSubHeader.geometricBounds[2]; } left = currentPage.bounds[1] + currentPage.marginPreferences.left; tmpBottom = 0; currentWidth = 0; var createdTableRowArr = Array(); // loop and create the Tables var contentBottom = 0; for (var i = 0; i < tableArr.length; i++) { if (tableArr[i][0] == 'table') { // CREAZIONE TABELLA var lastTfTable = createTable(tableArr[i][1], bottom + tableSpaceVertical, left, template); createdTableArr.push(lastTfTable); if (lastTfTable.geometricBounds[2] > pageBottom) { if (productOnTop == false) { removeHeader(grpHeader); if(grpSubHeader) grpSubHeader.remove(); for (var j = 0; j < createdTableArr.length; j++) createdTableArr[j].remove(); optimizePage(); productOnTop = true; currentPage = addPage(); footer = createFooter(); startY = initY; lastTfTable = addProduct(initY, prodTitle, imgProd, imgHeader, nameProd, col1Arr, col2Arr, tableArr, template); return lastTfTable; } // Remove the tables createdTableRowArr[createdTableRowArr.length] = lastTfTable; for (var k = 0; k < createdTableRowArr.length; k++) { createdTableRowArr[k].remove(); } var lastImage = null; optimizePage(); currentPage = addPage(); footer = createFooter(); currentPage.appliedMaster = ecoMaster; left = currentPage.bounds[1] + currentPage.marginPreferences.left; i = i - createdTableRowArr.length + 1; lastTfTable = createTable(tableArr[i][1], headerGap, left, template); tmpBottom = 0; currentWidth = 0; createdTableRowArr = Array(); } // Calculate the next coordinates if (tableArr[i][1][6] == 100) { bottom = lastTfTable.geometricBounds[2]; left = currentPage.bounds[1] + currentPage.marginPreferences.left; tmpBottom = 0; currentWidth = 0; createdTableRowArr = Array(); } else { if (tmpBottom == 0) tmpBottom = lastTfTable.geometricBounds[2]; else if (tmpBottom < lastTfTable.geometricBounds[2]) tmpBottom = lastTfTable.geometricBounds[2]; currentWidth += tableArr[i][1][6]; if (currentWidth >= 100 || tableArr[i + 1] == null || tableArr[i + 1][1] == null) { bottom = tmpBottom; left = currentPage.bounds[1] + currentPage.marginPreferences.left; tmpBottom = 0; currentWidth = 0; createdTableRowArr = Array(); } else { bottom = lastTfTable.geometricBounds[0] - tableSpaceVertical; left = lastTfTable.geometricBounds[3] + tableSpaceHorizontal; createdTableRowArr[createdTableRowArr.length] = lastTfTable; } } if(contentBottom < lastTfTable.geometricBounds[2]) contentBottom = lastTfTable.geometricBounds[2]; } else { file = tableArr[i][1][0]; occupancy = tableArr[i][1][2]; x1 = currentPage.bounds[1] + currentPage.marginPreferences.left; y1 = bottom + tableSpaceVertical; x2 = currentPage.bounds[3] - currentPage.marginPreferences.right; y2 = pageBottom; var error = false; if ((file != "") && (file != null)) { lastImage = createImgHeader(file, [x1, y1, x2, y2], occupancy); if (lastImage == false) { // c'รจ stato un errore nell'inserimento dell'immagine error = true; } else { createdTableArr.push(lastImage); bottom = lastImage.geometricBounds[2]; } } left = currentPage.bounds[1] + currentPage.marginPreferences.left; if (error || bottom > pageBottom) { if (productOnTop == false) { removeHeader(grpHeader); if(grpSubHeader) grpSubHeader.remove(); for (var j = 0; j < createdTableArr.length; j++) createdTableArr[j].remove(); optimizePage(); productOnTop = true; currentPage = addPage(); footer = createFooter(); startY = initY; lastTfTable = addProduct(initY, prodTitle, imgProd, imgHeader, nameProd, col1Arr, col2Arr, tableArr, template); return lastTfTable; } lastImage.remove(); optimizePage(); currentPage = addPage(); footer = createFooter(); currentPage.appliedMaster = ecoMaster; var y1 = headerGap; var x1 = currentPage.bounds[1] + currentPage.marginPreferences.left + tableSpaceVertical; var y2 = initY; var x2 = currentPage.bounds[3] - currentPage.marginPreferences.right; if ((file != "") && (file != null)) { lastImage = createImgHeader(file, [x1, y1, x2, y2], occupancy); } bottom = lastImage.geometricBounds[2]; left = currentPage.bounds[1] + currentPage.marginPreferences.left; } if(contentBottom < lastImage.geometricBounds[2]) contentBottom = lastImage.geometricBounds[2]; } } createdTableArr = null; productOnTop = false; // Calculate the total pages occupied by this product productPageNum = currentPage.name - productPageStart + 1; // Return Value if (headerBottom < contentBottom) return contentBottom; else return headerBottom; } //****************************************************************************************************************************************** // SECTION and INDEX //****************************************************************************************************************************************** function createCover(image) { sectPage1 = currentPage; if ((image != "") && (image != null)) { try { var myGraphic = sectPage1.place(File(image_path + image), [0, 0], "objectLayer"); } catch (e) { return null; } ; var myFrame = myGraphic[0].parent; myFrame.geometricBounds = [sectPage1.bounds[0], sectPage1.bounds[1], sectPage1.bounds[2], sectPage1.bounds[3]]; myFrame.fit(FitOptions.contentToFrame); } currentSection = currentPage.appliedSection; if (currentSection == null) { var newSection = myDocument.sections.add(currentPage); with (newSection) { continueNumbering = true; marker = sectionNumber + " " + sectionName; includeSectionPrefix = false; } } else { currentSection = currentPage.appliedSection; currentSection.marker = sectionNumber + " " + sectionName; } startY = myDocument.documentPreferences.pageHeight - currentPage.marginPreferences.bottom - 1; return; } function createBackCover() { var pageBottom = myDocument.documentPreferences.pageHeight - currentPage.marginPreferences.bottom; optimizePage(); if (currentPage.side == PageSideOptions.leftHand) { currentPage = addPage(); bar = createBar("", "note e aggiornamenti", initY); // logo=createLogo(initY); for (var i = initY + 20; i < pageBottom - 5; i += 6) createDiv(i); footer = createFooter(); currentPage.appliedMaster = ecoMaster; y = pageBottom; } sectPage1 = addPage(); var myGraphicFile = customer_path + "image/sezione.jpg"; if ((myGraphicFile != "") && (myGraphicFile != null)) { try { var myGraphic = sectPage1.place(File(myGraphicFile), [0, 0], "objectLayer"); } catch (e) { return null; } ; var myFrame = myGraphic[0].parent; myFrame.geometricBounds = [sectPage1.bounds[0], sectPage1.bounds[1], sectPage1.bounds[2], sectPage1.bounds[3]]; myFrame.fit(FitOptions.contentToFrame); } var tf = sectPage1.textFrames.add( myDocument.layers.item("BodyText"), undefined, undefined, { geometricBounds: [sectPage1.bounds[0], sectPage1.bounds[1], sectPage1.bounds[2], sectPage1.bounds[3]], contents: "\n", } ); tf.appliedObjectStyle = myDocument.objectStyles.item("Section"); currentSection = currentPage.appliedSection; if (currentSection == null) { var newSection = myDocument.sections.add(currentPage); with (newSection) { continueNumbering = true; marker = sectionNumber + " " + sectionName; includeSectionPrefix = false; } } else { currentSection = currentPage.appliedSection; currentSection.marker = sectionNumber + " " + sectionName; } startY = myDocument.documentPreferences.pageHeight - currentPage.marginPreferences.bottom - 1; return; } function createIndex() { currentPage = myDocument.pages.add(1634104421, myDocument.pages[0]); productPageStart = currentPage.name; currentPage.appliedMaster = ecoMaster; bar = createBar("", "INDICE", initY); // logo=createLogo(initY); var myTocStyle = myDocument.tocStyles.item("tocStyle"); var myToc = myDocument.createTOC(myTocStyle, true, undefined, [bar.geometricBounds[1] + 4, bar.geometricBounds[2] + tableSpaceVertical], undefined, myDocument.layers.item("BodyText")); var tfToc = currentPage.textFrames[0]; tfToc.appliedObjectStyle = myDocument.objectStyles.item("Indice"); x1 = bar.geometricBounds[1]; y1 = bar.geometricBounds[2] + 4; x2 = currentPage.bounds[3] - currentPage.marginPreferences.right; y2 = myDocument.documentPreferences.pageHeight - currentPage.marginPreferences.bottom; tfToc.geometricBounds = [y1, x1, y2, x2]; pagNum = 1; var tocTextFrameArr = new Array(); tocTextFrameArr.push(tfToc); while (tfToc.overflows == true && pagNum < 15) { currentPage = myDocument.pages.add(1634104421, myDocument.pages[pagNum]); currentPage.appliedMaster = ecoMaster; bar = createBar("", "INDICE", initY); // logo=createLogo(initY); x1 = bar.geometricBounds[1]; y1 = bar.geometricBounds[2] + 4; x2 = currentPage.bounds[3] - currentPage.marginPreferences.right; y2 = myDocument.documentPreferences.pageHeight - currentPage.marginPreferences.bottom; // create the TOC TextFrame var tfToc2 = currentPage.textFrames.add("BodyText"); tfToc2.appliedObjectStyle = myDocument.objectStyles.item("Indice"); tfToc2.geometricBounds = [y1, x1, y2, x2]; // tfToc2.geometricBounds=[10,50,100,200]; tfToc2.previousTextFrame = tfToc; tfToc = tfToc2; tocTextFrameArr.push(tfToc); pagNum++; } count = 0; for (i = 0; i < tocTextFrameArr.length; i++) { tf = tocTextFrameArr[i]; x = tf.geometricBounds[1]; y = tf.geometricBounds[0] - 4; pageCount = 0; for (j = 0; j < tf.paragraphs.length; j++) { myGraphicFile = imageArr[count]; if ((myGraphicFile != "") && (myGraphicFile != null)) { try { var y1 = y + (pageCount * 11); var myGraphic = myDocument.pages[i + 1].place(File(myGraphicFile), [0, 0], "objectLayer"); var myFrame = myGraphic[0].parent; myFrame.geometricBounds = [y1, x, y1 + 11, x + 11]; myGraphic[0].fit(FitOptions.proportionally); //myFrame.textWrapPreferences.textWrapType = TextWrapTypes.boundingBoxTextWrap; CS3 myFrame.textWrapPreferences.textWrapMode = TextWrapModes.BOUNDING_BOX_TEXT_WRAP; myFrame.textWrapPreferences.textWrapOffset = [0, 0, 0, 3]; } catch (e) { //throw "Errore nella creazione dell'indice"; }; } count++; pageCount++; } } if (currentPage.side == PageSideOptions.leftHand) { currentPage = myDocument.pages.add(1634104421, myDocument.pages[pagNum]); currentPage.appliedMaster = ecoMaster; bar = createBar("", "INDICE", initY); // logo=createLogo(initY); } // viene rilanciata la creazionde dell'indice per aggiornare la numerazione delle pagine dopo aver inserito le nuove pagine myDocument.createTOC(myTocStyle, true); productPageNum = currentPage.name - productPageStart + 1; // indexFile.writeln('index||||' + productPageStart + '|' + productPageNum); return productPageNum; } //****************************************************************************************************************************************** // INIT //****************************************************************************************************************************************** //close all open document for (myCounter = app.documents.length; myCounter > 0; myCounter--) { app.documents.item(myCounter - 1).close(SaveOptions.no); } //Make a new document. myDocument = app.open(new File(customer_path + 'template/' + template_name)); app.activeDocument.sections[0].continueNumbering = false; app.activeDocument.sections[0].pageNumberStart = pageNumberStart; currentPageNum = 0; initY = 10; imageWidth = 57; startY = initY; tableSpaceVertical = 3; tableSpaceHorizontal = 6; prodImgDimension = 65; schemaImgDimension = 93; barWidth = 93.37; headerGap = 24.5; productPageStart = 0; productPageNum = 0; sectionName = ""; sectionNumber = ""; productOnTop = true; ecoMaster = app.activeDocument.masterSpreads.item("B-Mastro"); ecoMasterBianca = app.activeDocument.masterSpreads.item("A-Bianca"); var currentPage = myDocument.pages.item(currentPageNum); currentPage.appliedMaster = ecoMaster; createFooter(); //Init index file //indexFile = new File(export_path + "index.tmp"); //indexFile.open("w"); //Init index array //indexArray = new Array(); //Init index array subsectionArray = new Array();