Copy link to clipboard
Copied
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?
Copy link to clipboard
Copied
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«).
Copy link to clipboard
Copied
BridgeTalk can be annoying as it opens InDesign simultaneously. This method is not very user-friendly!
Copy link to clipboard
Copied
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)
};
Copy link to clipboard
Copied
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
Copy link to clipboard
Copied
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.
Copy link to clipboard
Copied
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
Copy link to clipboard
Copied
The default joboptions are contained within the .app bundle on macOS. It is probably also found near .exe on Windows.
/Applications/Adobe Photoshop 2023/Adobe Photoshop 2023.app/Contents/Required/PDF/Settings
Copy link to clipboard
Copied
Neat!
Copy link to clipboard
Copied
It seems to me that the names of the files and the names of the presets in the saveAsPDF dialog are slightly different.
Copy link to clipboard
Copied
It seems to have the translated names in the nearby Translations folder. But I don’t know how to parse zdct, and I am not sure where the English names come from.
How about looking in your computer’s application support folder instead of user? Does this match the English display name?
/Library/Application Support/Adobe/Adobe PDF/Settings
Copy link to clipboard
Copied
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);
}