lunes, 13 de junio de 2011
Drupal y Google: SiteMap, Analytics y AdSense
Nuestra página en Drupal nos puede ayudar gracias a algunos módulos a gestionar todo lo que hemos visto anteriormente, ya que la podremos combinar y promocionar en un buscador tan potente como Google que nos puede proporcionar numerosas visitas.
Vamos a ver como tres módulos nos puede ayudar a gestionar las visitas a nuestro espacio e intentar sacarle algún eurillo a nuestro sitio.
SiteMap
Si hay algo que valora el buscador Google a la hora de indexar una página es su orden y la capacidad de actualización y crecimiento en contenidos de la misma. Del crecimiento depende la voluntad del webmaster o de las necesidades informativas o de actualización del sitio. Del orden se ocupará el módulo SiteMap. Este módulo nos permitirá generar un Mapa Web de nuestro sitio de manera automática sin tener que escribir una sóla línea de código, amén de poder actualizar el mismo simplemente añadiendo o modificando los contenidos de nuestra página, es decir, si añado un nuevo apartado automáticamente SiteMap me lo ubicará en el mapa del sitio.
Instalar y poner a andar SiteMap es extremadamente fácil. Lo descargas (la url la tienes en el enlace de arriba), lo descomprimes, lo subes a tu sites/all/modules y lo activas. Si pones http://misitioDrupal/sitemap , ¡voilá! ahí tenemos nuestro mapa web. Más fácil y mejor imposible. En la administración del módulo podremos configurar si deseamos que algunas partes de nuestra web no aparezcan en el mapa.
Analytics
Una vez tenemos nuestro 'índice' del sitio web, Google nos facilita una herramienta para gestionar todo lo que rodea al tráfico web de nuestra aplicación. Tráfico, páginas vistas, ficheros descargados, media de tiempo de visita, motores de búsqueda desde los que se accede... es decir, con esta herramienta podrías ver desde donde obtienes más visitantes (Google, Bing, ...), que partes de la página son más visitadas y, por tanto, más interesantes para los visitantes, etc, etc. Interesante, ¿no?. 'Toneladas' de información que puedes obtener de tu sitio que 'dejan' los visitantes. Si quieres profundizar sobre esta herramienta y hacer auténticas 'virguerías' pueden entrar en Trucos Google Analytics
Una vez te has registrado en Google Analytics y has dado de alta tu sitio (no profundizaremos demasiado, ya que no es complicado), nos bajamos el módulo para Drupal llamado Google Analytics , lo descomprimimos, lo subimos a nuestro directorio de módulos y lo habilitamos. Accedemos a la administración del mismo y añadimos el ID para el sitio que hemos dado de alta en analytics indicando 'Único Dominio' y le indicamos que añada a todos los roles el seguimiento. Guardamos la configuración y en el plazo de un día (seguramente menos) cuando accedamos a nuestro Panel de Control de Google Analytics observaremos que empezamos a ver resultados, es decir, al lado de nuestro perfil del sitio veremos la señal de visto bueno verde y empezaremos a ver las visitas subir.
AdSense
Ya que tenemos organizado nuestro sitio y tenemos controlado y estudiado todo el tráfico que transcurre por él, es buena idea intentar sacarle rendimiento económico. Google AdSense es otra herramienta integrable en Analytics que te permitirá colocar anuncios en tu web y proporcionarte beneficios por clic.
Deberás darte de alta en Google AdSense, rellenar tus datos y esperar a que el programa de AdSense dé de alta tu solicitud.
Cuando estés dado de alta, accediendo a tu panel de AdSense podemos ver todas las opciones y para empezar es recomendable crear un anuncio. En la pestaña "Mis Anuncios" podremos crear un panel con anuncios de diferentes tamaños y estilos personalizados, para que los podamos adaptar a la apariencia de nuestro sitio. Una vez creado, te saldrá en tu listado de Anuncios. La pantalla del listado de anuncios nos será útil en un futuro
Ahora vamos a integrar todo en Drupal. Nos bajamos el módulo AdSense, lo descomprimimos, lo subimos a nuestra localización de módulos y lo activamos (es necesario activar el módulo del Core Profile para poder activar AdSense).
Pues vamos al menu de administración y entramos en el Apartado AdSense para incluir nuestro Id de usuario en la pestaña 'Publisher ID'.
A continuación, marchamos a la configuración y creamos un bloque (llámalo como quieras pero recuerda el nombre, recomiendo algo referente a AdSense). En el Body del bloque vamos a añadir el código que nos proporciona el listado de AdSense de anuncios para un anuncio creado, por ejemplo:
<script type="text/javascript"><!--
google_ad_client = "ca-pub-0000000000000000";
/* Bloque1 */
google_ad_slot = "0000000000";
google_ad_width = 250;
google_ad_height = 250;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
Quítale los comentarios // y /* y publica el bloque. Ponlo en una zona visible y asegurate de que para tí no está activado, es decir, sólo para usuarios anónimos, por ejemplo. Así, no prodrás picar ni te aparecerán los anuncios, Google es muy escrupuloso con la gente que pica en sus propios anuncios, no es recomendable hacerlo.
Al rato, se activarán los anuncios en tu sitio y podrás empezar a ganar dinero por clic.
Una vez realizadas todas estas operaciones tienes un sitio con anuncios que te rentan, con herramientas de seguimiento de visitas, buscadores, etc y una organización como si de un sitio profesional se tratara. Opcionalmente, tendrás la opción de profundizar en las herramientas de Google, que tienen muchísima "chicha" y con las que se puede jugar muchísimo, pero eso os lo dejo a vosotros, :P
martes, 7 de junio de 2011
Relleno de PDF Editables con iText 2.1.7
La librería iText tiene bastantes usos entre los que se encuentran las herramientas y métodos necesarios para la generación de un archivo pdf a partir de una información. Podemos decir que es la responsable última de crear el archivo PDF.
Sin embargo, nos hemos encontrado con un problema:
- La librería de generación de informes, implementada en base a DynamicJasper, mostraba los informes a través de la clase JasperViewer, la cual daba opciones de exportación diversas (ODT, PDF, XLS,...). Sin embargo, con la versión antigua de iText (2.0.1) daba una excepción:
1 java.lang.NoSuchMethodError: com.lowagie.text.pdf.PdfWriter.setRgbTransparencyBlending(Z)V
- Lógico es pensar en actualizar la librería. Actualizando a la última versión estable 2.1.7, arreglamos el problema anterior, pero a la hora de rellenar ficheros PDF que disponen de campos rellenables (Certificados de paternidad, de incapacidad temporal, ...) obteníamos el siguiente error:
1 com.lowagie.text.exceptions.BadPasswordException: PdfReader not opened with owner password
Explicamos las implementaciones con las que se ha solucionado el error.
Implementación para iText 2.0.1
Para el relleno de un formulario PDF con campos editables hemos seguido un algoritmo sencillo con el que no hay ninguna pega:
1 public static void printPDFFields(String pathIN, String pathOUT) throws IOException, DocumentException {
2 PdfReader reader = new PdfReader(pathIN);
3 // Creamos el pdf de salida
4 PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(pathOUT));
5 // Rellenamos los campos
6 //Obtenemos el formulario
7 AcroFields form1 = stamp.getAcroFields();
8 //Obtenemos los campos
9 HashMap map = form1.getFields();
10 //Obtenemos el conjunto de claves de los campos que no es más que el nombre de los mismos
11 Set s = map.keySet();
12
13 int i = 0;
14 //Recorremos todos las claves
15 for (Iterator it = s.iterator(); it.hasNext();) {
16 String key = (String) it.next();
17 int j = i++;
18 //Grabamos en el campo el valor de un contador
19 form1.setField(key, new Integer(j).toString());
20 if (form1.getFieldType(key) == AcroFields.FIELD_TYPE_CHECKBOX) {
21 //Comprobación de si el campo es un check
22 form1.setField(key, "Sí");
23 }
24 }
25
26 stamp.setFormFlattening(true);
27 stamp.close();
28 }
Esto sería un ejemplo para crear un pdf en 'pathOUT' a partir del formulario que se encuentra en la ruta 'pathIN' y cuyos campos estarían rellenos con un número que se iría incrementando. Esto da la excepción que hemos visto arriba si lo lanzamos con iText 2.1.7
NOTA: Para encontrar los valores válidos de un check hay que abrir el pdf como texto plano y buscar la etiqueta >>/N<< y a la derecha de ella se encontrará el valor que toma el check.
Implementación para iText 2.1.7
Para el relleno de un formulario PDF con campos con la siguiente versión de iText seguimos el siguiente método teniéndo en cuenta el atributo OWNER que hemos creado.
1 private static final byte[] OWNER = "inss".getBytes();
2
3 public static void printPDFFields(String pathIN, String pathOUT) throws IOException, DocumentException {
4 PdfReader reader = new PdfReader(pathIN, OWNER);
5 // Creamos el pdf de salida
6 PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(pathOUT));
7 // Rellenamos los campos
8 //Obtenemos el formulario
9 AcroFields form1 = stamp.getAcroFields();
10 //Obtenemos los campos
11 HashMap map = form1.getFields();
12 //Obtenemos el conjunto de claves de los campos que no es más que el nombre de los mismos
13 Set s = map.keySet();
14
15 int i = 0;
16 //Recorremos todos las claves
17 for (Iterator it = s.iterator(); it.hasNext();) {
18 String key = (String) it.next();
19 int j = i++;
20 //Grabamos en el campo el valor de un contador
21 form1.setField(key, new Integer(j).toString());
22 if (form1.getFieldType(key) == AcroFields.FIELD_TYPE_CHECKBOX) {
23 //Comprobación de si el campo es un check
24 form1.setField(key, "Sí");
25 }
26 }
27
28 stamp.setFormFlattening(true);
29 stamp.close();
30 }
Así evitamos la excepción, pues con el OWNER le estamos proporcionando el ownerPassword del documento al constructor del PdfReader. Pero, ¿cómo obtenemos ese password?: Existen numerosas aplicaciones por la red que te ayudan a desencriptar o recuperar contraseñas de archivos PDF de este tipo. En particular, podemos usar la denominada Recovery PDF Password que nos dirá cual es la cadena de la que debemos obtener los bytes para pasarsela a OWNER y así poder trabajar correctamente con nuestro PDF editable