0

I've learned an enormous amount of scripting for InDesign CS6 thanks to all of the helpful folks here! Now, it's a problem with setting the printPreferences for a document. Here is the code I have:

    with(document.printPreferences) {
        activePrinterPreset = outputPreset;
        pageRange = outputRange;
        for (var j = 0; j < allInks.length; j++) {
            document.inks.item(allInks[j]).printInk = false;
        }
        for (var k = 0; k < printInks.length; k++) {
            if (printInks[k].toString() === "Black") {
                $.writeln("Found Black!");
                printBlack = true;
                $.writeln("Set Black!");
            } else {
                document.inks.item(printInks[k]).printInk = true;
            }
        }
        if (offsetJob) {
            // If it's an offset job, we might need to change page sizes.
            if (productType === "HI-N13W") {
                paperSize = PaperSizes.custom;
                paperHeight = 12.5;
                paperWidth = 8.5;
            } else if (productType.subString(3,5) === "PC") {
                paperSize = PaperSizes.custom;
                paperHeight = 8;
                paperWidth = 12.5;
            } else if (couldBeBothJobs.toString().indexOf(productType.subString(3,5)) > -1) {
                paperSize = "US Letter";
            } else {
                paperSize = PaperSizes.custom;
                paperHeight = 8;
                paperWidth = 25;
            }
        }
    }

In the second for loop, you'll see that I have first turned off ALL of the inks in the document for printing. I then only turn on the ones in the printInks array. If, however, the word "Black" exists in the array, there isn't an Ink for it, so instead, I want to set the built-in printPreference "printBlack". (This complements the other three—printCyan, printMagenta, and printYellow.)

It's just supposed to be a boolean value, according to the InDesign CS6 Object Model Reference. However, whenever the script gets to that point, it halts. Pasting just that small bit of code to a fresh document, just so I can see the error message, gets me this:

    The property is not applicable in the current state.

What does this mean? And more importantly, how can I fix it? I know that trapping has to be off before this property can be set, but I've definitely made sure that it is off.

halfer
  • 19,824
  • 17
  • 99
  • 186
Sturm
  • 689
  • 2
  • 23
  • 52

1 Answers1

0

After asking this question on the Adobe Community Forums, I was told that some of the Print Preferences cannot be set directly on the document, but must instead be set on a Print Preset, which, in turn, is then set as the Active Print Preset. Thus, I just re-built the preset I needed and assigned it to a new, temporary one. The following is the result:

    try {
        tempPreset.name;
    }
    catch(eNoSuchPreset) {
        tempPreset = app.printerPresets.add({name:"tempPreset"});
    }

    // Let's turn off all of the spot colors before everything else.
    for (var j = 0; j < allInks.length; j++) {
        document.inks.item(allInks[j]).printInk = false;
    }

        with(document.printPreferences) {
            tempPreset.printer = Printer.POSTSCRIPT_FILE;
            tempPreset.ppd = "OYO Imagesetter";
            tempPreset.pagePosition = PagePositions.CENTERED;
            tempPreset.paperSize = PaperSizes.CUSTOM;
            tempPreset.paperHeight = "12.5 in";
            tempPreset.paperWidth = "6.5 in";
            tempPreset.colorOutput = ColorOutputModes.SEPARATIONS;
            tempPreset.trapping = Trapping.OFF;
            tempPreset.screening = "60 lpi / 600 dpi";
            tempPreset.sendImageData = ImageDataTypes.OPTIMIZED_SUBSAMPLING;
            pageRange = outputRange;
            // Now let's turn off all of the CMYK colors.
            tempPreset.printCyan = false;
            tempPreset.printMagenta = false;
            tempPreset.printYellow = false;
            tempPreset.printBlack = false;
            // Then we turn back on BLACK if it exists.
            for (var k = 0; k < printInks.length; k++) {
                if (printInks[k] === "Black") {
                    tempPreset.printBlack = true;
                } else {
                    document.inks.item(printInks[k]).printInk = true;
                }
            }
            // If this is a four-color process job, then turn back on all of the process colors.
            if (processJob) {
                tempPreset.printCyan = true;
                tempPreset.printMagenta = true;
                tempPreset.printYellow = true;
                tempPreset.printBlack = true;
            }
            // That concludes OYO seps.
        }
        var mydpp = document.printPreferences;
        mydpp.activePrinterPreset = "tempPreset";

That gets my 99% of the way to completing this script. YAY!!

Sturm
  • 689
  • 2
  • 23
  • 52