Skip to content

Instantly share code, notes, and snippets.

@SebastianCastilloDev
Last active October 10, 2025 02:01
Show Gist options
  • Select an option

  • Save SebastianCastilloDev/c8901d200fbe92b406a4cc4bf189cd56 to your computer and use it in GitHub Desktop.

Select an option

Save SebastianCastilloDev/c8901d200fbe92b406a4cc4bf189cd56 to your computer and use it in GitHub Desktop.
main();
function main() {
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;
var archivoPDF = File.openDialog("Elige un archivo PDF");
if ((archivoPDF != "") && (archivoPDF != null)) {
var documento, pagina;
if (app.documents.length != 0) {
var temp = elegirDocumento();
documento = temp[0];
nuevoDocumento = temp[1];
}
else {
documento = app.documents.add();
nuevoDocumento = false;
}
alert(documento.constructor.name);
if (nuevoDocumento == false) {
pagina = elegirPagina(documento);
}
else {
pagina = documento.pages.item(0);
}
colocarPDF(documento, pagina, archivoPDF);
}
}
function elegirDocumento() {
var nombresDocumentos = new Array;
nombresDocumentos.push("Nuevo Documento");
for (var contadorDocumento = 0; contadorDocumento < app.documents.length; contadorDocumento++) {
nombresDocumentos.push(app.documents.item(contadorDocumento).name);
}
var dialogoElegirDocumento = app.dialogs.add({ name: "Elige un documento", canCancel: false });
with (dialogoElegirDocumento.dialogColumns.add()) {
with (dialogRows.add()) {
with (dialogColumns.add()) {
staticTexts.add({ staticLabel: "Colocar PDF en:" });
}
with (dialogColumns.add()) {
var desplegableElegirDocumento = dropdowns.add({ stringList: nombresDocumentos, selectedIndex: 0 });
}
}
}
var resultado = dialogoElegirDocumento.show();
if (resultado == true) {
if (desplegableElegirDocumento.selectedIndex == 0) {
documento = app.documents.add();
nuevoDocumento = true;
}
else {
documento = app.documents.item(desplegableElegirDocumento.selectedIndex - 1);
nuevoDocumento = false;
}
dialogoElegirDocumento.destroy();
}
else {
documento = "";
nuevoDocumento = "";
dialogoElegirDocumento.destroy();
}
return [documento, nuevoDocumento];
}
function elegirPagina(documento) {
alert(documento.name);
var nombresPaginas = new Array;
for (var contador = 0; contador < documento.pages.length; contador++) {
nombresPaginas.push(documento.pages.item(contador).name);
}
var dialogoElegirPagina = app.dialogs.add({ name: "Elige una página", canCancel: false });
with (dialogoElegirPagina.dialogColumns.add()) {
with (dialogRows.add()) {
with (dialogColumns.add()) {
staticTexts.add({ staticLabel: "Colocar PDF en:" });
}
with (dialogColumns.add()) {
var desplegableElegirPagina = dropdowns.add({ stringList: nombresPaginas, selectedIndex: 0 });
}
}
}
dialogoElegirPagina.show();
var pagina = documento.pages.item(desplegableElegirPagina.selectedIndex);
dialogoElegirPagina.destroy();
return pagina;
}
function colocarPDF(documento, pagina, archivoPDF) {
app.pdfPlacePreferences.pdfCrop = PDFCrop.cropMedia;
var columnas = 2;
var filas = 4;
var elementosPorPagina = columnas * filas;
var anchoPagina = documento.documentPreferences.pageWidth;
var altoPagina = documento.documentPreferences.pageHeight;
var anchoElemento = anchoPagina / columnas;
var altoElemento = altoPagina / filas;
// --- Función auxiliar para colocar y ajustar una página del PDF ---
function colocarUnaPagina(paginaActual, numeroPaginaPDF, contadorElementos) {
app.pdfPlacePreferences.pageNumber = numeroPaginaPDF;
// Intentar colocar la página del PDF
var paginaPDF;
try {
paginaPDF = paginaActual.place(File(archivoPDF), [0, 0])[0];
} catch (e) {
// Si hay un error (ej. la página no existe), no hacer nada y salir.
return false;
}
// Verificar si InDesign colocó la página que pedimos. Si no, es que el PDF no tiene más páginas.
if (paginaPDF.pdfAttributes.pageNumber != numeroPaginaPDF) {
paginaPDF.parent.remove(); // Eliminar el marco vacío creado
return false; // Indicar que no hay más páginas que colocar
}
var fila = Math.floor(contadorElementos / columnas);
var columna = contadorElementos % columnas;
var x = columna * anchoElemento;
var y = fila * altoElemento;
var marco = paginaPDF.parent;
marco.move([x, y]);
marco.rotationAngle = 90;
marco.geometricBounds = [y, x, y + altoElemento, x + anchoElemento];
marco.fit(FitOptions.PROPORTIONALLY);
return true; // Indicar que la colocación fue exitosa
}
// --- Página 1: Páginas IMPARES ---
var marginPrefs = pagina.marginPreferences;
marginPrefs.top = 0;
marginPrefs.bottom = 0;
marginPrefs.left = 0;
marginPrefs.right = 0;
for (var i = 0; i < elementosPorPagina; i++) {
var numPaginaImpar = i * 2 + 1;
if (!colocarUnaPagina(pagina, numPaginaImpar, i)) {
break; // Si no hay más páginas, salir del bucle
}
}
// --- Página 2: Páginas PARES ---
// Añadir una nueva página solo si hemos colocado al menos una página impar
if (pagina.allPageItems.length > 0) {
var paginaPar = documento.pages.add(LocationOptions.after, pagina);
var marginPrefsPar = paginaPar.marginPreferences;
marginPrefsPar.top = 0;
marginPrefsPar.bottom = 0;
marginPrefsPar.left = 0;
marginPrefsPar.right = 0;
for (var j = 0; j < elementosPorPagina; j++) {
var numPaginaPar = j * 2 + 2;
if (!colocarUnaPagina(paginaPar, numPaginaPar, j)) {
break; // Si no hay más páginas, salir del bucle
}
}
// Si la página de pares quedó completamente vacía, eliminarla
if (paginaPar.allPageItems.length === 0) {
paginaPar.remove();
}
}
}
// Llamar a la función principal
main();
main();
function main() {
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;
var archivoPDF = File.openDialog("Elige un archivo PDF");
if ((archivoPDF != "") && (archivoPDF != null)) {
var documento, pagina;
if (app.documents.length != 0) {
var temp = elegirDocumento();
documento = temp[0];
nuevoDocumento = temp[1];
}
else {
documento = app.documents.add();
nuevoDocumento = false;
}
alert(documento.constructor.name);
if (nuevoDocumento == false) {
pagina = elegirPagina(documento);
}
else {
pagina = documento.pages.item(0);
}
colocarPDF(documento, pagina, archivoPDF);
}
}
function elegirDocumento() {
var nombresDocumentos = new Array;
nombresDocumentos.push("Nuevo Documento");
for (var contadorDocumento = 0; contadorDocumento < app.documents.length; contadorDocumento++) {
nombresDocumentos.push(app.documents.item(contadorDocumento).name);
}
var dialogoElegirDocumento = app.dialogs.add({ name: "Elige un documento", canCancel: false });
with (dialogoElegirDocumento.dialogColumns.add()) {
with (dialogRows.add()) {
with (dialogColumns.add()) {
staticTexts.add({ staticLabel: "Colocar PDF en:" });
}
with (dialogColumns.add()) {
var desplegableElegirDocumento = dropdowns.add({ stringList: nombresDocumentos, selectedIndex: 0 });
}
}
}
var resultado = dialogoElegirDocumento.show();
if (resultado == true) {
if (desplegableElegirDocumento.selectedIndex == 0) {
documento = app.documents.add();
nuevoDocumento = true;
}
else {
documento = app.documents.item(desplegableElegirDocumento.selectedIndex - 1);
nuevoDocumento = false;
}
dialogoElegirDocumento.destroy();
}
else {
documento = "";
nuevoDocumento = "";
dialogoElegirDocumento.destroy();
}
return [documento, nuevoDocumento];
}
function elegirPagina(documento) {
alert(documento.name);
var nombresPaginas = new Array;
for (var contador = 0; contador < documento.pages.length; contador++) {
nombresPaginas.push(documento.pages.item(contador).name);
}
var dialogoElegirPagina = app.dialogs.add({ name: "Elige una página", canCancel: false });
with (dialogoElegirPagina.dialogColumns.add()) {
with (dialogRows.add()) {
with (dialogColumns.add()) {
staticTexts.add({ staticLabel: "Colocar PDF en:" });
}
with (dialogColumns.add()) {
var desplegableElegirPagina = dropdowns.add({ stringList: nombresPaginas, selectedIndex: 0 });
}
}
}
dialogoElegirPagina.show();
var pagina = documento.pages.item(desplegableElegirPagina.selectedIndex);
dialogoElegirPagina.destroy();
return pagina;
}
function colocarPDF(documento, pagina, archivoPDF) {
var paginaPDF;
app.pdfPlacePreferences.pdfCrop = PDFCrop.cropMedia;
var contador = 1;
var salir = false;
var columnas = 2;
var filas = 4;
var elementosPorPagina = columnas * filas;
var anchoPagina = documento.documentPreferences.pageWidth;
var altoPagina = documento.documentPreferences.pageHeight;
var anchoElemento = anchoPagina / columnas;
var altoElemento = altoPagina / filas;
var contadorElementos = 0;
// Establecer los márgenes a cero
var marginPrefs = pagina.marginPreferences;
marginPrefs.top = 0;
marginPrefs.bottom = 0;
marginPrefs.left = 0;
marginPrefs.right = 0;
while (salir == false) {
if (contador > 1) {
if (contadorElementos % elementosPorPagina == 0) {
pagina = documento.pages.add(LocationOptions.after, pagina);
var newMarginPrefs = pagina.marginPreferences;
newMarginPrefs.top = 0;
newMarginPrefs.bottom = 0;
newMarginPrefs.left = 0;
newMarginPrefs.right = 0;
contadorElementos = 0;
}
}
app.pdfPlacePreferences.pageNumber = contador;
var fila = Math.floor(contadorElementos / columnas);
var columna = contadorElementos % columnas;
var x = columna * anchoElemento;
var y = fila * altoElemento;
paginaPDF = pagina.place(File(archivoPDF), [x, y])[0];
var marco = paginaPDF.parent;
marco.rotationAngle = 90;
marco.geometricBounds = [y, x, y + altoElemento, x + anchoElemento];
marco.fit(FitOptions.PROPORTIONALLY);
if (contador == 1) {
var primeraPagina = paginaPDF.pdfAttributes.pageNumber;
}
else {
if (paginaPDF.pdfAttributes.pageNumber == primeraPagina) {
salir = true;
// Eliminar la última página si está vacía
if (pagina.rectangles.length == 1 && pagina.rectangles[0].graphics.length == 0) {
pagina.remove();
} else if (pagina.allPageItems.length === 0) {
pagina.remove();
}
}
}
if (!salir) {
contador = contador + 1;
contadorElementos++;
}
}
}
// Llamar a la función principal
main();
// funcionando para pagina 1 y 2
main();
function main() {
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;
var archivoPDF = File.openDialog("Elige un archivo PDF");
if ((archivoPDF != "") && (archivoPDF != null)) {
var documento, pagina;
if (app.documents.length != 0) {
var temp = elegirDocumento();
documento = temp[0];
nuevoDocumento = temp[1];
}
else {
documento = app.documents.add();
nuevoDocumento = false;
}
alert(documento.constructor.name);
if (nuevoDocumento == false) {
pagina = elegirPagina(documento);
}
else {
pagina = documento.pages.item(0);
}
colocarPDF(documento, pagina, archivoPDF);
}
}
function elegirDocumento() {
var nombresDocumentos = new Array;
nombresDocumentos.push("Nuevo Documento");
for (var contadorDocumento = 0; contadorDocumento < app.documents.length; contadorDocumento++) {
nombresDocumentos.push(app.documents.item(contadorDocumento).name);
}
var dialogoElegirDocumento = app.dialogs.add({ name: "Elige un documento", canCancel: false });
with (dialogoElegirDocumento.dialogColumns.add()) {
with (dialogRows.add()) {
with (dialogColumns.add()) {
staticTexts.add({ staticLabel: "Colocar PDF en:" });
}
with (dialogColumns.add()) {
var desplegableElegirDocumento = dropdowns.add({ stringList: nombresDocumentos, selectedIndex: 0 });
}
}
}
var resultado = dialogoElegirDocumento.show();
if (resultado == true) {
if (desplegableElegirDocumento.selectedIndex == 0) {
documento = app.documents.add();
nuevoDocumento = true;
}
else {
documento = app.documents.item(desplegableElegirDocumento.selectedIndex - 1);
nuevoDocumento = false;
}
dialogoElegirDocumento.destroy();
}
else {
documento = "";
nuevoDocumento = "";
dialogoElegirDocumento.destroy();
}
return [documento, nuevoDocumento];
}
function elegirPagina(documento) {
alert(documento.name);
var nombresPaginas = new Array;
for (var contador = 0; contador < documento.pages.length; contador++) {
nombresPaginas.push(documento.pages.item(contador).name);
}
var dialogoElegirPagina = app.dialogs.add({ name: "Elige una página", canCancel: false });
with (dialogoElegirPagina.dialogColumns.add()) {
with (dialogRows.add()) {
with (dialogColumns.add()) {
staticTexts.add({ staticLabel: "Colocar PDF en:" });
}
with (dialogColumns.add()) {
var desplegableElegirPagina = dropdowns.add({ stringList: nombresPaginas, selectedIndex: 0 });
}
}
}
dialogoElegirPagina.show();
var pagina = documento.pages.item(desplegableElegirPagina.selectedIndex);
dialogoElegirPagina.destroy();
return pagina;
}
function colocarPDF(documento, pagina, archivoPDF) {
app.pdfPlacePreferences.pdfCrop = PDFCrop.cropMedia;
var columnas = 2;
var filas = 4;
var elementosPorPagina = columnas * filas;
var anchoPagina = documento.documentPreferences.pageWidth;
var altoPagina = documento.documentPreferences.pageHeight;
var anchoElemento = anchoPagina / columnas;
var altoElemento = altoPagina / filas;
// --- Función auxiliar para colocar y ajustar una página del PDF ---
function colocarUnaPagina(paginaActual, numeroPaginaPDF, contadorElementos, invertirVerticalmente) {
app.pdfPlacePreferences.pageNumber = numeroPaginaPDF;
var paginaPDF;
try {
paginaPDF = paginaActual.place(File(archivoPDF), [0, 0])[0];
} catch (e) {
return false; // Error al colocar, probablemente no hay más páginas
}
if (paginaPDF.pdfAttributes.pageNumber != numeroPaginaPDF) {
paginaPDF.parent.remove();
return false; // El PDF no tiene la página solicitada
}
var fila;
var columna = contadorElementos % columnas;
if (invertirVerticalmente) {
// Invierte el orden de las filas
fila = (filas - 1) - Math.floor(contadorElementos / columnas);
} else {
fila = Math.floor(contadorElementos / columnas);
}
var x = columna * anchoElemento;
var y = fila * altoElemento;
var marco = paginaPDF.parent;
marco.move([x, y]);
marco.rotationAngle = 90;
marco.geometricBounds = [y, x, y + altoElemento, x + anchoElemento];
marco.fit(FitOptions.PROPORTIONALLY);
return true;
}
// --- Página 1: Páginas IMPARES (orden normal) ---
var marginPrefs = pagina.marginPreferences;
marginPrefs.top = 0; marginPrefs.bottom = 0; marginPrefs.left = 0; marginPrefs.right = 0;
for (var i = 0; i < elementosPorPagina; i++) {
var numPaginaImpar = i * 2 + 1;
if (!colocarUnaPagina(pagina, numPaginaImpar, i, false)) {
break;
}
}
// --- Página 2: Páginas PARES (orden vertical invertido) ---
if (pagina.allPageItems.length > 0) {
var paginaPar = documento.pages.add(LocationOptions.after, pagina);
var marginPrefsPar = paginaPar.marginPreferences;
marginPrefsPar.top = 0; marginPrefsPar.bottom = 0; marginPrefsPar.left = 0; marginPrefsPar.right = 0;
for (var j = 0; j < elementosPorPagina; j++) {
var numPaginaPar = j * 2 + 2;
if (!colocarUnaPagina(paginaPar, numPaginaPar, j, true)) {
break;
}
}
if (paginaPar.allPageItems.length === 0) {
paginaPar.remove();
}
}
}
// Llamar a la función principal
main();
@SebastianCastilloDev
Copy link
Author

main();
function main() {
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;
var archivoPDF = File.openDialog("Elige un archivo PDF");
if ((archivoPDF != "") && (archivoPDF != null)) {
var documento, pagina;
if (app.documents.length != 0) {
var temp = elegirDocumento();
documento = temp[0];
nuevoDocumento = temp[1];
}
else {
documento = app.documents.add();
nuevoDocumento = false;
}

	alert(documento.constructor.name);
	if (nuevoDocumento == false) {
		pagina = elegirPagina(documento);
	}
	else {
		pagina = documento.pages.item(0);
	}
	colocarPDF(documento, pagina, archivoPDF);
}

}
function elegirDocumento() {
var nombresDocumentos = new Array;
nombresDocumentos.push("Nuevo Documento");
for (var contadorDocumento = 0; contadorDocumento < app.documents.length; contadorDocumento++) {
nombresDocumentos.push(app.documents.item(contadorDocumento).name);
}
var dialogoElegirDocumento = app.dialogs.add({ name: "Elige un documento", canCancel: false });
with (dialogoElegirDocumento.dialogColumns.add()) {
with (dialogRows.add()) {
with (dialogColumns.add()) {
staticTexts.add({ staticLabel: "Colocar PDF en:" });
}
with (dialogColumns.add()) {
var desplegableElegirDocumento = dropdowns.add({ stringList: nombresDocumentos, selectedIndex: 0 });
}
}
}
var resultado = dialogoElegirDocumento.show();
if (resultado == true) {
if (desplegableElegirDocumento.selectedIndex == 0) {
documento = app.documents.add();
nuevoDocumento = true;
}
else {
documento = app.documents.item(desplegableElegirDocumento.selectedIndex - 1);
nuevoDocumento = false;
}
dialogoElegirDocumento.destroy();
}
else {
documento = "";
nuevoDocumento = "";
dialogoElegirDocumento.destroy();
}
return [documento, nuevoDocumento];
}
function elegirPagina(documento) {
alert(documento.name);
var nombresPaginas = new Array;
for (var contador = 0; contador < documento.pages.length; contador++) {
nombresPaginas.push(documento.pages.item(contador).name);
}
var dialogoElegirPagina = app.dialogs.add({ name: "Elige una página", canCancel: false });
with (dialogoElegirPagina.dialogColumns.add()) {
with (dialogRows.add()) {
with (dialogColumns.add()) {
staticTexts.add({ staticLabel: "Colocar PDF en:" });
}
with (dialogColumns.add()) {
var desplegableElegirPagina = dropdowns.add({ stringList: nombresPaginas, selectedIndex: 0 });
}
}
}

dialogoElegirPagina.show();
var pagina = documento.pages.item(desplegableElegirPagina.selectedIndex);

dialogoElegirPagina.destroy();
return pagina;

}
function colocarPDF(documento, pagina, archivoPDF) {
app.pdfPlacePreferences.pdfCrop = PDFCrop.cropMedia;
var columnas = 2;
var filas = 4;
var elementosPorPagina = columnas * filas;
var anchoPagina = documento.documentPreferences.pageWidth;
var altoPagina = documento.documentPreferences.pageHeight;
var anchoElemento = anchoPagina / columnas;
var altoElemento = altoPagina / filas;

// --- Función auxiliar para colocar y ajustar una página del PDF ---
function colocarUnaPagina(paginaActual, numeroPaginaPDF, contadorElementos) {
	app.pdfPlacePreferences.pageNumber = numeroPaginaPDF;

	// Intentar colocar la página del PDF
	var paginaPDF;
	try {
		paginaPDF = paginaActual.place(File(archivoPDF), [0, 0])[0];
	} catch (e) {
		// Si hay un error (ej. la página no existe), no hacer nada y salir.
		return false;
	}

	// Verificar si InDesign colocó la página que pedimos. Si no, es que el PDF no tiene más páginas.
	if (paginaPDF.pdfAttributes.pageNumber != numeroPaginaPDF) {
		paginaPDF.parent.remove(); // Eliminar el marco vacío creado
		return false; // Indicar que no hay más páginas que colocar
	}

	var fila = Math.floor(contadorElementos / columnas);
	var columna = contadorElementos % columnas;
	var x = columna * anchoElemento;
	var y = fila * altoElemento;

	var marco = paginaPDF.parent;
	marco.move([x, y]);
	marco.rotationAngle = 90;
	marco.geometricBounds = [y, x, y + altoElemento, x + anchoElemento];
	marco.fit(FitOptions.PROPORTIONALLY);

	return true; // Indicar que la colocación fue exitosa
}

// --- Página 1: Páginas IMPARES ---
var marginPrefs = pagina.marginPreferences;
marginPrefs.top = 0;
marginPrefs.bottom = 0;
marginPrefs.left = 0;
marginPrefs.right = 0;

for (var i = 0; i < elementosPorPagina; i++) {
	var numPaginaImpar = i * 2 + 1;
	if (!colocarUnaPagina(pagina, numPaginaImpar, i)) {
		break; // Si no hay más páginas, salir del bucle
	}
}

// --- Página 2: Páginas PARES ---
// Añadir una nueva página solo si hemos colocado al menos una página impar
if (pagina.allPageItems.length > 0) {
	var paginaPar = documento.pages.add(LocationOptions.after, pagina);
	var marginPrefsPar = paginaPar.marginPreferences;
	marginPrefsPar.top = 0;
	marginPrefsPar.bottom = 0;
	marginPrefsPar.left = 0;
	marginPrefsPar.right = 0;

	for (var j = 0; j < elementosPorPagina; j++) {
		var numPaginaPar = j * 2 + 2;
		if (!colocarUnaPagina(paginaPar, numPaginaPar, j)) {
			break; // Si no hay más páginas, salir del bucle
		}
	}
	// Si la página de pares quedó completamente vacía, eliminarla
	if (paginaPar.allPageItems.length === 0) {
		paginaPar.remove();
	}
}

}
// Llamar a la función principal
main();

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment