Skip to main content
Participant
April 12, 2019
Question

Open pdf pages as layers

  • April 12, 2019
  • 2 replies
  • 26784 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.

 

 

Participant
December 1, 2021

The script is fantastic, it saved me a whole lot of time thanks

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