Skip to main content
Participant
April 12, 2019
Question

Open pdf pages as layers

  • April 12, 2019
  • 2 replies
  • 26800 views

I have a pdf with more than 400 pages, and want to open them in a single Photoshop file as separate layers. Is there a way to do it? Currently, I only know of the option to open the pdf as separate tabs, which is unwieldy and very taxing on the computer.

This topic has been closed for replies.

2 replies

Stephen Marsh
Community Expert
Community Expert
March 31, 2020

I would suggest that you use a script such as PDF Processor II where it will open and save separate files one by one, which should be less taxing.

 

Then use the default File > Scripts > Load files into stack script or a similar script as a second pass to combine the separate files.

 

 

JJMack
Community Expert
Community Expert
December 1, 2021

Stephen the above script cut out the saving of opened pages into files and need to then use adobe script load files into a stack and then the need to delete all saved pages files.  The script  just opens the selected PDF document pages in photoshop as  page document.  Then stacks all the open page  documents into a document and then closes the open page documents.  It just that it is a script and if the document has many pages it will take a long time for the script to open all the PDF  pages.  I do not know how to code Action Manager code to find out how many pages the selected  PDF document has so I could select all the pages to have Photoshop open the all from the import PDF dialog using Action Manager code.  Or Know if that is even.  The script opens one page at a time till the pages open fails then the script stack the pages.   If the PDF is large it may perform better if you Opens all the PDF Pages using Photoshop UI import PDF or just the pages you want in a stack. Then run my script. If the pages are open when you run my script it will stack the open page document into a document and then close the page documents. No files are created not clean up is needed. My script should perform better the using PDF processor II, Load Files into Stack and deleting the saved Paged files.

JJMack
JJMack
Community Expert
Community Expert
December 3, 2021

I just tested in Windows and the original script code has the same problem, failing at the stacking step, so this is not a Mac issue, but perhaps a version issue in later versions.

 

EDIT: I just tested your new revised code and it now works as expected on both Mac and Win.


Perhaps the original script is not downloading correctly or was not uploaded correctly. The script I pasted into the site reply  function works fine on my Windows machine. There have been issues with the site code  where post with  javascript code is not done correctly.  Space characters have been dropped or add which effect Photoshop events id. In fact when I download your code there was a syntax error for there was a save added after the # character in  #target Photoshop.  If you look at your append you will see there is a space there..

JJMack
JJMack
Community Expert
Community Expert
April 12, 2019

It is taxing and will take time but can be automated into a single layer document from all the document opened,

/* ==========================================================

// 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; // 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; // 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

}

JJMack
Participant
March 31, 2020

Umm is this code that I put somewhere? I'm not sure what that means.

Thanks.

JJMack
Community Expert
Community Expert
March 31, 2020

Its a Photoshop Script. Photoshop scripts are normally installed into each Photoshop version presets\scripts\ folder.   I install my photoshop scripts into my own Photoshop scripts tree and link all install photoshop versions presets\scripts\ folder to my scripts tree.  All installed versions of Photoshop on my machine use the same copy of my scripts. It make installing all my scripts into a new photoshop versions easy. All I have to do is add a single link into its preset\scripts\ folder. 

 

Photoshop scripts can be anywhere on you machine. After the last script name in the scripts list there is a Browse, you can use to navigate to the script you want to use menu File>Scripts>Browse...  I have too many scripts using Adobe's menu File>Scripts>Script Name is too slow for Adobe only scroll the list one name at a time. Scrolling should met a scree full scroll.  I launch scripts from my scripts tree using Windows file explorer. I drag and drop script onto photoshop for execution.  New version of Photoshop need an entry added into PSUserConfig.txt to suppress the warning dialog Adobe added to new Photoshop versions if you use that method.

 

JJMack