我正在使用Indesign jsx脚本获取Data out of range
。
我的脚本停在:Line 102 Source: pageWidth = width;
我认为这是因为边距比纸张尺寸大。我尝试处理最小纸张尺寸的方案:A11
,if else statement
。
我尝试使用app masterpages remove and pop
删除主页,但我不知道该怎么做。
如何为所有纸张尺寸提供“5mm”的边距,“A11”的边距为“0mm”?我在Windows 7上使用Indesign CS6。
这是我的 JSON数据:
var papersizes = [
{
"name": "4A0",
"length": 2378,
"width": 1682
},
{
"name": "2A0",
"length": 1682,
"width": 1189
},
{
"name": "A0",
"length": 1189,
"width": 841
},
{
"name": "A1",
"length": 841,
"width": 594
},
{
"name": "A2",
"length": 594,
"width": 420
},
{
"name": "A3",
"length": 420,
"width": 297
},
{
"name": "A4",
"length": 297,
"width": 210
},
{
"name": "A5",
"length": 210,
"width": 148
},
{
"name": "A6",
"length": 148,
"width": 105
},
{
"name": "A7",
"length": 105,
"width": 74
},
{
"name": "A8",
"length": 74,
"width": 52
},
{
"name": "A9",
"length": 52,
"width": 37
},
{
"name": "A10",
"length": 37,
"width": 26
},
{
"name": "A11",
"length": 26,
"width": 18
}
];
这是我的代码:
var bleed = "4mm";
var margin = "10mm";
for (index = 0; index < papersizes.length; ++index) {
papersize = papersizes[index];
name = papersize["name"];
length = papersize["length"];
width = papersize["width"];
var doc = app.documents.add();
with(doc.viewPreferences) {
horizontalMeasurementUnits = MeasurementUnits.MILLIMETERS;
verticalMeasurementUnits = MeasurementUnits.MILLIMETERS;
}
with(doc.documentPreferences) {
pageHeight = length;
//Here does my script stops
pageWidth = width;
pageOrientation = PageOrientation.PORTRAIT;
pagesPerDocument = 1;
documentBleedBottomOffset = bleed;
documentBleedTopOffset = bleed;
documentBleedInsideOrLeftOffset = bleed;
documentBleedOutsideOrRightOffset = bleed;
}
//Here I try to handle the paper size
if(name != "A11") {
with (doc.pages.item(0).marginPreferences){
bottom = margin;
//When document.documentPreferences.facingPages == true,
//"left" means inside; "right" means outside.
left = margin;
right = margin;
top = margin;
}
} else {
with (doc.pages.item(0).marginPreferences){
bottom = 0;
//When document.documentPreferences.facingPages == true,
//"left" means inside; "right" means outside.
left = 0;
right = 0;
top = 0;
}
}
//If the active document has not been saved (ever), save it.
if(app.activeDocument.saved == false){
//If you do not provide a file name, InDesign will display the Save dialog box.
app.activeDocument.save(new File("C:/IndesignOutput/DIN_"+name+"_"+length+"mm_"+width+"mm.indd"));
app.activeDocument.close();
}
}
答案 0 :(得分:1)
您是对的,由于默认marges,您无法更改文档大小。所以是的:改变它们应该让它发挥作用。但是,您必须在尝试设置此小尺寸之前更改,而不是之后。
但是,唉,这不是唯一的事情。如图所示,仅更改当前的页面是不够的 - 调整文档大小也会调整其主页的大小,因此您也需要更改它们。
设置一些项目以使用相同属性的常用技巧是:
// doc.masterSpreads.item(0).pages.everyItem().marginPreferences.properties = { ... };
...但是,相当令人惊讶的是,everyItem
在这里什么也没做!因此,您必须手动遍历masterSpreads
中的页面。幸运的是,您不必更改文档的第一页,因为默认情况下它应用了第一个主扩展。
它仍然无法正常工作,经过一些反复试验后,我发现还有另一个边距需要重置:文档自身的默认值。 (不知道为什么。也许如果你删除了所有的主要点差,或类似的东西,并且保证金值仍然需要在某处“生活”。)
这对我有用:
length = 26;
width = 18;
bleed = "4mm";
margin = "10mm";
var doc = app.documents.add();
with(doc.viewPreferences) {
horizontalMeasurementUnits = MeasurementUnits.MILLIMETERS;
verticalMeasurementUnits = MeasurementUnits.MILLIMETERS;
}
doc.marginPreferences.properties = { top:0, bottom:0, left:0, right: 0 };
for (i=0; i<doc.masterSpreads.item(0).pages.length; i++)
doc.masterSpreads.item(0).pages.item(i).marginPreferences.properties = {
bottom:0,
//When document.documentPreferences.facingPages == true,
//"left" means inside; "right" means outside.
left:0,
right:0,
top:0
};
with(doc.documentPreferences) {
pageOrientation = PageOrientation.PORTRAIT;
pagesPerDocument = 1;
documentBleedBottomOffset = bleed;
documentBleedTopOffset = bleed;
documentBleedInsideOrLeftOffset = bleed;
documentBleedOutsideOrRightOffset = bleed;
pageHeight = length;
pageWidth = width;
}
顺便提一下,如果您事先知道哪个名称会导致问题,那么检查名称就可以了。但最好在下面找出问题发生的大小(宽度或高度),如果尺寸太小,则将边距设置为0
。