Skip to main content
Aprking
Inspiring
June 29, 2023
Question

How to use a script to retrieve existing ADOBE PDF presets in Photoshop using a dropdown menu?

  • June 29, 2023
  • 3 replies
  • 1200 views

I am working on a script to export layers to PDF, but I have encountered an issue. This is something I already know how to do in InDesign and Illustrator. How to use a script to retrieve existing ADOBE PDF presets in Photoshop using a dropdown menu? I kindly request assistance from friends.

For example, the method to retrieve presets in Illustrator is as follows.

var presetNames = app.PDFPresetsList;
var presetList = presetGroup.add("dropdownlist", [0, 0, 220, 25]);

for (var i = 0; i < presetNames.length; i++) {
  presetList.add("item", presetNames[i]);
}

Does Photoshop have a similar method?

 

This topic has been closed for replies.

3 replies

Aprking
AprkingAuthor
Inspiring
June 30, 2023

I have written a script in Photoshop to retrieve ADOBE PDF presets, but it is only compatible with Windows 10 and above. However, the same approach should work for adapting it to Mac. 

/*
* #target Photoshop
* Author: Aprking
* Contact: aprking@hotmail.com
*/

if (BridgeTalk.appName == "photoshop") {
  var userName = getCurrentUsername();
}

function getCurrentUsername() {
  var userName = $.getenv("USERNAME");
  if (!userName) {
    userName = $.getenv("USER");
  }
  return userName;
}

var dialog = new Window("dialog");
dialog.text = "Select PDF Preset";
dialog.orientation = "column";
dialog.alignChildren = "left";

var presetsDropdown = dialog.add("dropdownlist");
presetsDropdown.preferredSize.width = 200;

var loadButton = dialog.add("button", undefined, "Load");
loadButton.onClick = loadSelectedPreset;

var pdfPresets = getPDFPresets();
for (var i = 0; i < pdfPresets.length; i++) {
  var presetName = pdfPresets[i];
  presetsDropdown.add("item", presetName);
}

presetsDropdown.selection = presetsDropdown.items[1];
dialog.show();

function getPDFPresets() {
  var presetFolderPath1 = "C:\\Users\\" + userName + "\\AppData\\Roaming\\Adobe\\Adobe PDF\\Settings";
  var presetFolderPath2 = "C:\\ProgramData\\Adobe\\Adobe PDF\\Settings";
  var folder1 = new Folder(presetFolderPath1);
  var folder2 = new Folder(presetFolderPath2);
  var files1 = folder1.getFiles("*.joboptions");
  var files2 = folder2.getFiles("*.joboptions");

  var presets = [];
  for (var i = 0; i < files1.length; i++) {
    var file1 = files1[i];
    var name1 = file1.name.replace(/\.joboptions$/, "");
    presets.push(decodeURIComponent(name1));
  }
  for (var i = 0; i < files2.length; i++) {
    var file2 = files2[i];
    var name2 = file2.name.replace(/\.joboptions$/, "");
    presets.push(decodeURIComponent(name2));
  }

  return presets;
}

function loadSelectedPreset() {
  var selectedIndex = presetsDropdown.selection.index;
  var selectedPreset = pdfPresets[selectedIndex];
  alert("Loaded PDF Preset: " + selectedPreset);
}
Legend
June 30, 2023

@Aprking,

As @c.pfaffenbichler has already mentioned, you can get the joboptions-files’ names (»~/Library/Application Support/Adobe/Adobe PDF/Settings«).  but note that this will only be any "Custom pdf export presets" that you've created or loaded and not any of the built in ones.

Please see the working snippet below.

var myAdobePDF_Presets = Folder("~/Library/Application Support/Adobe/Adobe PDF/Settings");
var myCustomPresets = myAdobePDF_Presets.getFiles();

var myPresets = [];
for(var i = 0; i < myCustomPresets.length; i++){
    myPresets.push(myCustomPresets[i].name.replace(/%20/g, " ").slice(0, -11))
}

myPresets.unshift("- Select Preset -");
 
var myWin = new Window('dialog', 'PDF Export Presets');
myWin.orientation = 'row';
with(myWin){
    myWin.sText = add('statictext', undefined, 'Select PDF Export preset:');
    myWin.myPDFExport = add('dropdownlist',undefined,undefined,{items:myPresets});
    myWin.myPDFExport.selection = 0;
    myWin.btnOK = add('button', undefined, 'OK');
    };
myWin.center();
var myWindow = myWin.show();

Regards,

Mike

c.pfaffenbichler
Community Expert
Community Expert
June 30, 2023
quote

but note that this will only be any "Custom pdf export presets" that you've created or loaded and not any of the built in ones.

Good point; makes me wonder where the default joboptions are stored. 

But if they are available by default anyway I suppose one could hard-code them into the Script. 

Legend
June 30, 2023

@c.pfaffenbichler 

I couldn't find where the default joboptions are stored, they're probably buried somewhere in a preference file.

Below is an updated snippet with the default joboptions hard codded in to the script.

 

var myAdobePDF_Presets = Folder("~/Library/Application Support/Adobe/Adobe PDF/Settings");
var myCustomPresets = myAdobePDF_Presets.getFiles();
var adobeBuiltInPDF_Presets = ["[High Quality Print]", "[PDF/X-1A:2001]", "[PDF/X-3:2002]","[PDF/X-4:2008]", "[Press Quality]", "[Smallest File Size]"];

var myPresets = [];
for(var i = 0; i < myCustomPresets.length; i++){
    myPresets.push(myCustomPresets[i].name.replace(/%20/g, " ").slice(0, -11));
}

var mergedPresets = adobeBuiltInPDF_Presets.concat(myPresets);

mergedPresets.unshift("- Select Preset -");
 
var myWin = new Window('dialog', 'PDF Export Presets');
myWin.orientation = 'row';
with(myWin){
    myWin.sText = add('statictext', undefined, 'Select PDF Export preset:');
    myWin.myPDFExport = add('dropdownlist',undefined,undefined,{items:mergedPresets});
    myWin.myPDFExport.selection = 0;
    myWin.btnOK = add('button', undefined, 'OK');
    };
myWin.center();
var myWindow = myWin.show();

 

Regards,

Mike

c.pfaffenbichler
Community Expert
Community Expert
June 30, 2023

No, not according to the documentation (»photoshop-cc-javascript-ref-2019.pdf«).

But as far as I know the pdf presets are not application-specific so you should be able to use the list from Indesign or Illustrator. (Which you should be able to retrieve via BridgeTalk.)

Or »simply« get the joboptions-files’ names (»~/Library/Application Support/Adobe/Adobe PDF/Settings«). 

Aprking
AprkingAuthor
Inspiring
June 30, 2023

BridgeTalk can be annoying as it opens InDesign simultaneously. This method is not very user-friendly!

rob day
Community Expert
Community Expert
July 2, 2023

BridgeTalk can be annoying as it opens InDesign simultaneously. This method is not very user-friendly!

 

Hi @Aprking , Not sure if this helps, but you could export a PSD’s layers from within InDesign without ever opening Photoshop. The graphicLayerOptions.graphicLayers collection lets you turn a placed .PSD’s layer visibility on and off for an export. A script could create a document, place the PSD, size the page to the PSD, then loop through the image layers and Export each to PDF.

 

//From InDesign a selected PSD image with object layers
var gl = app.activeDocument.selection[0].graphicLayerOptions.graphicLayers.everyItem().getElements();

for (var i = 0; i < gl.length; i++){
   $.writeln(gl[i].name + "   Visible: " + gl[i].currentVisibility)
};