Copy link to clipboard
Copied
I'm working in Photoshop 2021 and writing a script to open a PDF and do some stuff with it. I'd like to automate the import of multiple files, but when I use app.open() to open the PDF file, I get the "Import PDF" dialog pop up and I have to click OK, no matter what I use in my PDFOpenOptions. Any way around this popup or is this by design?
I ended up using a suggestion by r_bin to use a wsh script that uses sendkeys to photoshop. It's an ungodly hack but it may end up working. We will see when we try to automate it with the full data set of 1000s of PDFs.
Lesson learned: DialogModes.NO does not really mean no dialogs.
Copy link to clipboard
Copied
PDF seems to be an Adobe file format and there seems to be more then a single PDF file format. There seems to be Adobe an Acrobat document PDF file format and Photoshop layered document PDF file format. . Photoshop PDF File format seen to open in Photoshop through Photoshop's File Open without an additional Import PDF Dialog. Opening An Acrobat single Page document through Photoshop Open File dialog I see Photoshop Open an Import PDF Dialog. Photoshop Handle Acrobat PDF File formats differently than it handles its own PDF File format.
My script still sees to open small Acrobat multiple paged PDF documents with only the File open dialog the Import PDF dialog is not seen by the user The PDF Page Documents are stacked into a single Photoshop document and the transparent pages filled with white. The opened Pages documents are closed. However they Raster Layer no text layers exists.
Copy link to clipboard
Copied
What's the reason you tell me that? 😛
Copy link to clipboard
Copied
I did not read through this thread I create a script years ago the open a pdf pages in Photoshop It does not have a Script Dialog but does have a system open file selection dialog so you can select the PDF to open its pages. I believe it creates a document with the PDF pages stacked on top of each other. It bypasses the PDF Import dialog. Have not used it in years.
/* ==========================================================
// 2017 John J. McAssey (JJMack)
// Stack the open Document Visible layer composite into a new 300 DPI document
// This script is supplied as is. It is provided as freeware.
// The author accepts no liability for any problems arising from its use.
// ======================================================= */
// enable double-clicking from Mac Finder or Windows Explorer
#target photoshop // this command only works in Photoshop CS2 and higher
// bring application forward for double-click events
app.bringToFront();
if (documents.length >= 2) {
app.togglePalettes(); // toggle off palettes so Photoshop will not need to update them
stackpages(); // Photosho document can be different when oneo via UI
}
else {
var theFile = File.openDialog("Select your PDF file", "Select:*.pdf");
app.displayDialogs = DialogModes.NO;
var check = true;
var page = 1;
// define pdfopenoptions;
var pdfOpenOpts = new PDFOpenOptions;
pdfOpenOpts.antiAlias = true;
pdfOpenOpts.bitsPerChannel = BitsPerChannelType.EIGHT;
pdfOpenOpts.cropPage = CropToType.MEDIABOX;
pdfOpenOpts.mode = OpenDocumentMode.RGB;
pdfOpenOpts.resolution = 300;
pdfOpenOpts.suppressWarnings = true;
pdfOpenOpts.usePageNumber = true;
app.togglePalettes(); // toggle off palettes so Photoshop will not need to update them
while (check == true) {
try {
pdfOpenOpts.page = page; // open a page at it slower the using Photoshop UI ans selection all the pages you want
var thePdf = app.open(theFile, pdfOpenOpts);
page++;
}
catch (e) { check = false };
};
if (documents.length >= 2) { stackpages(); }
else {
app.togglePalettes(); // toggle on palettes
alert("multiple Document are not open in Photoshop");
}
}
///////////////////////////////////////////////////////////////////////////////
// stack pages function //
///////////////////////////////////////////////////////////////////////////////
function stackpages() {
var orig_ruler_units = app.preferences.rulerUnits;
var orig_display_dialogs = app.displayDialogs;
app.preferences.rulerUnits = Units.PIXELS; // set the ruler units to PIXELS
app.displayDialogs = DialogModes.NO; // Set Dialogs off
//newFile = theFile.name.substr(0,theFile.name.indexOf(".pdf")); //New File name
newFile = app.activeDocument.name.substr(0,app.activeDocument.name.lastIndexOf("-")); //New File name
var doc = app.documents.add(app.activeDocument.width.value, app.activeDocument.height.value, app.activeDocument.resolution, newFile, NewDocumentMode.RGB, DocumentFill.TRANSPARENT ); // create a new document
//for (var i=0;i<documents.length-1;i++) { // stack a layer for the open document into the new document page 1 on botton
for (var i=documents.length-2;i>-1;i--) { // stack a layer for the open document into the new document page 1 on top
app.activeDocument = documents[i]; // switch active document
var layerName = app.activeDocument.name; // get document name
app.activeDocument.flatten(); // Flatten remove transparency
var idDplc = charIDToTypeID( "Dplc" );
var desc259 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var ref24 = new ActionReference();
var idLyr = charIDToTypeID( "Lyr " );
var idOrdn = charIDToTypeID( "Ordn" );
var idTrgt = charIDToTypeID( "Trgt" );
ref24.putEnumerated( idLyr, idOrdn, idTrgt );
desc259.putReference( idnull, ref24 );
var idT = charIDToTypeID( "T " );
var ref25 = new ActionReference();
var idDcmn = charIDToTypeID( "Dcmn" );
ref25.putName( idDcmn, documents[documents.length-1].name );
desc259.putReference( idT, ref25 );
var idNm = charIDToTypeID( "Nm " );
desc259.putString( idNm, layerName );
var idVrsn = charIDToTypeID( "Vrsn" );
desc259.putInteger( idVrsn, 5 );
executeAction( idDplc, desc259, DialogModes.NO ); // Copy Layer to document
app.activeDocument = documents[documents.length-1]; // switch to newly created document
layerName = layerName.substr(0,layerName.indexOf(".pdf"));
app.activeDocument.activeLayer.name=layerName; // label layer with Document name
}
app.activeDocument = documents[documents.length-1]; // switch to newly created document
var layers = activeDocument.layers; // get layers
activeDocument.activeLayer = layers[layers.length-1] // Target Bottom Layer
activeDocument.activeLayer.remove(); // Remove original layer
while (documents.length>1) { // close all opened document except the newly created document
app.activeDocument = documents[0];
activeDocument.close(SaveOptions.DONOTSAVECHANGES);
}
app.togglePalettes(); // toggle user's palettes back on
app.runMenuItem(charIDToTypeID(("FtOn"))); // fit the document to the screen
app.displayDialogs = orig_display_dialogs; // Reset display dialogs
app.preferences.rulerUnits = orig_ruler_units; // reset units to original settings
}
///////////////////////////////////////////////////////////////////////////////
// stack open pages function //
///////////////////////////////////////////////////////////////////////////////
function stackopenpages() {
var orig_ruler_units = app.preferences.rulerUnits;
var orig_display_dialogs = app.displayDialogs;
app.preferences.rulerUnits = Units.PIXELS; // set the ruler units to PIXELS
app.displayDialogs = DialogModes.NO; // Set Dialogs off
//newFile = theFile.name.substr(0,theFile.name.indexOf(".pdf")); //New File name
newFile = app.activeDocument.name.substr(0,app.activeDocument.name.lastIndexOf("-")); //New File name
var doc = app.documents.add(app.activeDocument.width.value, app.activeDocument.height.value, app.activeDocument.resolution, newFile, NewDocumentMode.RGB, DocumentFill.TRANSPARENT ); // create a new document
for (var i=0;i<documents.length-1;i++) { // stack a layer for the open document into the new document page 1 on botton
//for (var i=documents.length-2;i>-1;i--) { // stack a layer for the open document into the new document page 1 on top
app.activeDocument = documents[i]; // switch active document
var layerName = app.activeDocument.name; // get document name
app.activeDocument.flatten(); // Flatten remove transparency
var idDplc = charIDToTypeID( "Dplc" );
var desc259 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var ref24 = new ActionReference();
var idLyr = charIDToTypeID( "Lyr " );
var idOrdn = charIDToTypeID( "Ordn" );
var idTrgt = charIDToTypeID( "Trgt" );
ref24.putEnumerated( idLyr, idOrdn, idTrgt );
desc259.putReference( idnull, ref24 );
var idT = charIDToTypeID( "T " );
var ref25 = new ActionReference();
var idDcmn = charIDToTypeID( "Dcmn" );
ref25.putName( idDcmn, documents[documents.length-1].name );
desc259.putReference( idT, ref25 );
var idNm = charIDToTypeID( "Nm " );
desc259.putString( idNm, layerName );
var idVrsn = charIDToTypeID( "Vrsn" );
desc259.putInteger( idVrsn, 5 );
executeAction( idDplc, desc259, DialogModes.NO ); // Copy Layer to document
app.activeDocument = documents[documents.length-1]; // switch to newly created document
layerName = layerName.substr(0,layerName.indexOf(".pdf"));
app.activeDocument.activeLayer.name=layerName; // label layer with Document name
}
app.activeDocument = documents[documents.length-1]; // switch to newly created document
var layers = activeDocument.layers; // get layers
activeDocument.activeLayer = layers[layers.length-1] // Target Bottom Layer
activeDocument.activeLayer.remove(); // Remove original layer
while (documents.length>1) { // close all opened document except the newly created document
app.activeDocument = documents[0];
activeDocument.close(SaveOptions.DONOTSAVECHANGES);
}
app.togglePalettes(); // toggle user's palettes back on
app.runMenuItem(charIDToTypeID(("FtOn"))); // fit the document to the screen
app.displayDialogs = orig_display_dialogs; // Reset display dialogs
app.preferences.rulerUnits = orig_ruler_units; // reset units to original settings
}
Copy link to clipboard
Copied
I didn't try your script, but try it with result.PDF
Copy link to clipboard
Copied
The result.pdf is not a multiple page Pdf. My script was created to stack a multiple page pdf pages into a single document. So After first and only page open my script put out a message that multiple document are not open and it terminates which leaves the single page open in Photoshop.
If a pdf has a lot of pages it take a long long time to open and stack all of its pages. That is why I have not used the script in years. It is not good for large PDF files that have many pages.
Copy link to clipboard
Copied
Don't really think this applies to the problem but thanks anyway