Categorías
hoy aprendí ...

… a intercalar páginas desde dos archivos PDFs

El tema surgió hace un par de semana, cuando tenía un PDF de un libro exportado en páginas dobles, es decir, cada página era un pliego con 2 páginas (par e impar). Tocaba producir un PDF de página simple.

Opción 1: recurrir al archivo de origen y exportar de esa manera.

Opción 2: usando el PDF de página dobles generar por un lado las páginas izquierdas, luego las derechas y al final intercalar.

La opción 2 se realizó recortando de las páginas la mitad que no correspondía para cada mometo, es decir, recortar la mitad derecha para exportar las página pares. Desde el Acrobat se puede muy sencillo, luego guardar como libro_paginas_pares.pdf. Lo mismo pero inverso para las otras.

La cuestión era hacer el intercalado. En un documento corto se puede hacer a mano, pero con 200 páginas mejor algo automático.

Búsqueda rápida: https://duckduckgo.com/?q=intercalando+p%C3%A1ginas+de+2+archivos+PDF&t=ffsb&ia=web

Y gracias a que todos tenemos los mismos problemas en algún momento, alguien ya tenía la solución. Pero lo importantes es que la compartió.

https://desfaziendoentuertos.prepress.es/mezclar-e-intercalar-paginas-pares-e-impares-de-dos-pdf-en-un-unico-documento-script-gratuito-para-acrobat-9-y-x/

Lleva a un foro de Adobe donde también se compartió la solución.

https://forums.adobe.com/message/3945387

Un script en javascript que se «instala» en el Acrobat Profesional (yo estaba usando la versión X) y agrega un item al menú. Muy fácil de usar.

// Complements: Planet PDF (http://www.planetpdf.com/)

// Modified by Jeff Baitis for Acrobat 9 and Acrobat X compatibility

// Improved Collate function with status bar.

 

// Add a menu item to reverse all pages in the active document

app.addMenuItem({  cName: «Reverse», cParent: «Edit», cExec: «trustedReversePages();»,  cEnable: «event.rc = (event.target != null);», nPos: 0 });

// Add a menu item to collate with another document on the filesystem

app.addMenuItem({  cName: «Collate», cParent: «Edit», cExec: «trustedCollatePages();»,  cEnable: «event.rc = (event.target != null);», nPos: 0 });

 

trustedReversePages = app.trustedFunction(function()

{

app.beginPriv(); // Explicitly raise privileges

var t = app.thermometer;

t.duration = this.numPages;

t.begin();

for (i = this.numPages – 1; i >= 0; i–)

{

t.value = (i-this.numPages)*-1;

this.movePage(i);

t.text = ‘Moving page ‘ + (i + 1);

}

t.end();

app.endPriv();

})

 

// Collating pages

/*

Title: Collate Document

Purpose: User is prompted to select document to insert/collate.

Author: Sean Stewart, ARTS PDF, www.artspdf.com

*/

 

trustedCollatePages = app.trustedFunction(function()

{

app.beginPriv(); // Explicitly raise privileges

// create an array to use as the rect parameter in the browse for field

 

var arRect = new Array();

arRect[0] = 0;

arRect[1] = 0;

arRect[2] = 0;

arRect[3] = 0;

 

// create a non-visible form field to use as a browse for field

 

var f = this.addField(«txtFilename», «text», this.numPages – 1, arRect);

 

f.delay = true;

f.fileSelect = true;

f.delay = false;

 

// user prompted to select file to collate the open document with

 

app.alert(«Select the PDF file to merge with»)

 

// open the browse for dialog

 

f.browseForFileToSubmit();

var evenDocPath = f.value;

 

var q = this.numPages;

 

var t = app.thermometer;

t.duration = q;

t.begin();

 

// insert pages from selected document into open document

 

for (var i = 0; i < q; i++) {

var j = i*2;

this.insertPages(j, evenDocPath, i);

t.value = i;

t.text = ‘Inserting page ‘ + (i+1);

}

t.end();

 

// remove unused field

 

this.removeField(«txtFilename»);

app.endPriv();

})

Y chau.

Categorías
hoy aprendí ...

… a repasar matemáticas (1)

Tenía que calcular el monto de un valor una vez aplicado un descuento porcentual específico. Es decir, conocía el resultado que quería una vez aplicado el descuento. La formula era:

x – D% = A

A = el valor que conozco.

D = el descuento en porcentual de x

Por poner un ejemplo: A=16 D=12%

x – ( x . (12/100) ) = 16

x – (x . 0,12) = 16

despejamos los decimales

(100 . x) – (100 . x . 0,12) = 16 . 100

100x – 12x = 1600

88x = 1600

x = 1600 / 88

x = 18,1818…

Gracias a http://matematicasmodernas.com/como-resolver-ecuaciones-con-fracciones/

Categorías
hoy aprendí ...

… expresiones regulares con Notepad++ (2)

Recientemente tenía que formatear un texto de estatuto en donde los capítulos y artículos estaba formateados con P y STRONG reemplazando por H2 y H3

La forma fue para los artículos (h3)

Find:

(<p><strong>)(ARTÍCULO.*)(<\/strong><\/p>)

Replace with:

<h3>\2</h3>

Y listo.

Rememorando el primer intento.

Categorías
hoy aprendí ...

… a hacer una redirección con HTACCESS

El tema es que se muda uno de los sitios a otro servidor y como el dominio por ahora es temporario, hasta que se pueda hacer la transferencia del mismo, lo que vamos a hacer en esta primera etapa es redireccionar.

Pensaba hacerlo con PHP pero quería probar el HTACCESS primero.

Tengo entendido que existe una directiva REDIRECT que puede enviar el tipo 301 (permanente) o 302 (temporario). Buscando un poco encontré: Cambio de URL redirección 301 con .htaccess (vía Desarrollo WEB)

Donde se explica básicamente la redirección, me quedo con:

Ahora, si deseamos hacer una redirección de una URL de un dominio a la misma URL, pero en otro dominio, podríamos hacer algo como esto:

redirectMatch 301 ^(.*)$ http://www.desarrolloweb.com$1

Pero como no quiero hacer 301, cambio ese valor

En mi caso sería entonces

redirectMatch 302 ^(.*)$ http://www.nuevodminio.com$1
Categorías
hoy aprendí ...

… a arreglar el problema de Thundebird con los resultados de búsquedas

https://support.mozilla.org/t5/Thunderbird/Messages-in-search-results-won-t-open-and-can-t-be-found/m-p/923276

Que apunta a esta solución.

https://support.mozilla.org/t5/Troubleshooting/Rebuilding-the-Global-Database/ta-p/15801

Reconstruir la base de datos global interna de índices.