使用Indesign脚本编制的数据超出范围,因为页面大小较小

时间:2016-08-11 19:34:47

标签: adobe-indesign

我正在使用Indesign jsx脚本获取Data out of range。 我的脚本停在:Line 102 Source: pageWidth = width;

我认为这是因为边距比纸张尺寸大。我尝试处理最小纸张尺寸的方案:A11if 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();
        }
}

1 个答案:

答案 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