-
Notifications
You must be signed in to change notification settings - Fork 30
Pages And Margins
fabiantheblind edited this page May 4, 2016
·
3 revisions
This script fits a page to a text frame
var doc = app.documents.add();
var page = doc.pages.item(0);
var tf = page.textFrames.add({
geometricBounds:[12.7,12.7,100,210],
contents: "Hi God, it's me - Jesus."
});
tf.paragraphs.item(0).pointSize = 42;
tf.fit(FitOptions.FRAME_TO_CONTENT);
doc.documentPreferences.pageWidth = tf.geometricBounds[3] + 12.7;
doc.documentPreferences.pageHeight = tf.geometricBounds[2] + 12.7;
var new_pw = doc.documentPreferences.pageWidth;
var new_ph = doc.documentPreferences.pageHeight;
tf.geometricBounds = [12.7,12.7,new_ph - 12.7,new_pw - 12.7];
The next script shows how many fun you can have with pageItems
var doc;
if(app.documents.length > 0){
doc = app.activeDocument;
}else{
doc = app.documents.add();
}
/**
* A document has always a page
* so we don't need to create one
*/
var page = doc.pages.item(0);
// could also be
// var page = doc.pages.lastItem();
// now lets do some stuff on that page
var gb = [10,10,50,50]; // some bounds
page.ovals.add({geometricBounds:gb}); // add an oval
// increase x values
gb[1]+=10;
gb[3]+=10;
page.rectangles.add({geometricBounds:gb}); // add an rectangle
// increase x values again
gb[1]+=10;
gb[3]+=10;
page.textFrames.add({geometricBounds:gb}); // add an textFrame
// a page has not only ovals and so on
// it also has pageItems
// loop them
for(var i = 0; i < page.pageItems.length; i++){
// now get the y value
var y = page.pageItems[i].geometricBounds[1];
// and move them
page.pageItems[i].move([ 10 + (10*i),y]);
}
// now duplicate the page
page.duplicate();
###margins
Margins are the grid for your layout.
var doc = app.documents.add({
});
var page = doc.pages.item(0);
page.marginPreferences.properties = {
top : 30,
left: 30,
right: 30,
bottom:30
};
Have a look at the tons of different options and properties you can set. This script also creates a new layer and connects several textFrames.
/**
* Lets build a doc
*/
main();
function main(){
// add a doc
var doc = app.documents.add();
// lets store some data in an object for better handling
meta = {
"pw":200,
"ph":200,
"top":20,
"left":20,
"bottom":20,
"right":20,
"gutter":5,
"textColumnCount":5
};
// have a look at the build function below
doc_build(doc, true,false,meta);
// now lets make something with those pages
var count = 0; // counter
var range = 10; // until
var frames = []; // to store the textFrames
// now loop it
while(count < range){
// the first page is always there
// so we have to check if we are at index 0
var page;
if(count != 0 ){
page = doc.pages.add(); // if not add a page
}else{
page = doc.pages[0]; // we are at index 0 take the existing page
}
// apply a master spread
page.appliedMaster = doc.masterSpreads.item(0);
// add a textFrame and push it into an array
// for better handling
frames.push(page.textFrames.add());
// now get the margins from the page
// the get bounds function is part of the
// Scripting Tutorial Hello World from the SDK
frames[count].geometricBounds = myGetBounds(doc, page);
// once again we have to check if we are at index 0
// because the textFrame 0 cant have a previous text frame
// if we are not at 0 connect the actual textFrame with the previous
if(count != 0){
frames[count].previousTextFrame = frames[count-1];
}
// now we change the gutter on every second text frame
// just for the fun of it.
// get the gutter from the page
// and give the textFrame the same margins
if((count%2) == 0){
frames[count].textFramePreferences.properties = {
textColumnCount : page.marginPreferences.columnCount/2,
textColumnGutter : page.marginPreferences.columnGutter
};
}
//increment the count for the next loop
count++;
}
// add some placeholder text
frames[0].contents = TextFrameContents.placeholderText;
// The End
return 0;
};
/**
* Lets build a document
* with lots of preferences
*/
function doc_build(doc, makeColumns,facingPages,meta){
doc.layers.item(0).name = "the standard layer";
doc.layers.add({name:"a new layer"});
if(facingPages){
doc.documentPreferences.facingPages = true;
}else{
doc.documentPreferences.facingPages = false;
}
// set some view parameters
doc.viewPreferences.properties = {
horizontalMeasurementUnits: MeasurementUnits.MILLIMETERS,
verticalMeasurementUnits:MeasurementUnits.MILLIMETERS
};
// set the page size and bleed box
doc.documentPreferences.properties = {
pageWidth : meta.pw,
pageHeight : meta.ph,
documentBleedBottomOffset : 3,
documentBleedTopOffset : 3,
documentBleedInsideOrLeftOffset : 3,
documentBleedOutsideOrRightOffset : 3
};
// the baseline settings
doc.gridPreferences.properties = {
baselineStart : meta.top
}
// how big are the steps
doc.gridPreferences.baselineDivision = "15pt";
// lets create some master spreads
var master_spread1 = doc.masterSpreads.item(0).pages.item(0);// edit the master spreads
master_spread1.marginPreferences.properties = {
right:meta.right,
top:meta.top ,
left:meta.left ,
bottom:meta.bottom + 10,
columnGutter:meta.gutter*2,
};
var master_spread2 = doc.masterSpreads.item(0).pages.item(1);//edit the other master spread
master_spread2.marginPreferences.properties = {
right:meta.right,
top:meta.top,
left:meta.left,
bottom:meta.bottom,
columnGutter:meta.gutter
};
if(makeColumns){
master_spread1.marginPreferences.columnCount = meta.textColumnCount*2;
master_spread2.marginPreferences.columnCount = meta.textColumnCount;
}
}// end make doc
// part of
//ImprovedHelloWorld.jsx from InDesign scripting SDK
//An InDesign CS6 JavaScript
function myGetBounds(myDocument, myPage){
var myPageWidth = myDocument.documentPreferences.pageWidth;
var myPageHeight = myDocument.documentPreferences.pageHeight
if(myPage.side == PageSideOptions.leftHand){
var myX2 = myPage.marginPreferences.left;
var myX1 = myPage.marginPreferences.right;
}
else{
var myX1 = myPage.marginPreferences.left;
var myX2 = myPage.marginPreferences.right;
}
var myY1 = myPage.marginPreferences.top;
var myX2 = myPageWidth - myX2;
var myY2 = myPageHeight - myPage.marginPreferences.bottom;
return [myY1, myX1, myY2, myX2];
}
This wiki is maintained by:
fabiantheblind
Thanks to:
- JohnDarnell for fixing lots of typos.
- jsp for fixing lots of typos.
- ltfschoen for fixing typos.
- wridgers for adding more links.
Thanks to the students from the seminar for asking all those questions and making me start this wiki.
- adinaradke
- AnitaMei
- ce0311
- coerv
- felixharle
- FerdinandP
- Flave
- marche
- monkian
- natael
- OliverMatelowski
- PDXIII
- praktischend
- schlompf
- skaim
You are awesome.
- Arrays
- Classes
- Comments
- Conditionals
- Functions
- Inspect Properties
- Loops
- Objects
- Output And Interaction
- Recursive Functions
- Inspect Properties
- Variables And Operations
- Extended JavaScript Guide
- Bridge Talk
- Create And Read Files
- ExtendScript Toolkit
- File
- Folder
- Includes JSX
- Object Watch
- Read In JSON From File And DONT Eval
- Storing Data In A Target Engine
- Target an application
- XML
- app
- Colorbrewer
- Colors And Swatches
- Delay And View
- Dialogs
- Documents
- Duplicate And Transform
- Event AfterSave
- Export IDML
- ExtendScript in InDesign Scripting DOM
- Fonts
- GeometricBounds and Coordinates
- Get named pageItems
- Graphic Lines
- Groups
- HSL Color Wheel
- Images
- Includes
- InsertionPoints
- Layers
- Line Feeds And Carrige Returns
- Masterspreads
- Matrix
- Objectstyles
- Outlines Groups Alignment
- Pages And Margins
- Pathfinder
- Placeholder Text
- Rectangles Ovals Polygons
- RulerOrigin
- Select words at insertionPoint
- Simple Find And Change Grep with FC Query
- Simple Find And Change Grep
- Simple Find And Change Text
- Spiro
- Styles
- Text Analysis ID FC
- Text Analysis
- Text Find Locations
- Text
- Transformation Matricies
- TransparencySettings
- XML creation and import