Dependiendo de la versión de PeopleTools hay diferentes herramientas para crear documentos PDF. Específicamente para este tema comento que estoy utilizando la versión de tools 8.44 y Java 4.1
Al ser en línea usamos java, y utilizamos iText, que nos da la funcionalidad que requerimos.
Desde esta ubicación pueden tanto descargar el ejecutable ( .jar) como el código fuente, si es que lo requieren. Viene la referencia de todas las clases, de forma que podemos revisar como usarlo.
Repito, según la versión de Java que estén utilizando es la versión de iText que deben utilizar, en este caso estoy utilizando la 2.0.8.
El archivo JAR lo deben ubicar a donde apunte PS_CLASSPATH, de estar vacía es necesario que la definan, de otra forma no funciona.
Dicho lo anterior, entramos en tema.
Los primeros pasos son:
/* Crea un objeto de tipo documento */
Local string &MyFile = "myfile.pdf";
Local JavaObject &Obj_Doc = CreateJavaObject("com.lowagie.text.Document");
/* Podemos desde un inicio cargar clases complementarias que vamos a usar */
Local JavaObject &Obj_Font = CreateJavaObject("com.lowagie.text.Font");
Local JavaObject &Element = GetJavaClass("com.lowagie.text.Element");
/* es importante obtener la ruta en donde deja los archivos para que posteriormente podemos tomar los mismos*/
&ambiente = GetEnv("PS_HOME");
/* Obtiene una instancia de PDF Writer */
Local JavaObject &obj_PDFoutput =
GetJavaClass("com.lowagie.text.pdf.PdfWriter").getInstance(&Obj_Doc, CreateJavaObject("java.io.FileOutputStream", &ambiente | "/" |
&MyFile, True));
/* y abrimos el documento para comenzar a escribir */
&Obj_Doc.open();
Bien, ya tenemos abierto el archivo y podemos comenzar a llenar el documento. Podemos agregar directamente texto e imágenes, pero con finalidad de darle una mejor presentación podemos utilizar tablas, para acomodar mejor la información en el documento.
/* Creación de una tabla */
/* El número de renglones no es necesario especificarlo, pero las columnas si */
Local JavaObject &Obj_Table = CreateJavaObject("com.lowagie.text.Table", 6)
/* creado el objeto tabla, se establecen propiedades */
&Obj_Table.setWidth(100);
&Obj_Table.setBorderWidth(0);
&Obj_Table.setDefaultCellBorderWidth(0);
/* creada la tabla, se deben de ir incluyendo las celdas*/
Local JavaObject &cell = CreateJavaObject("com.lowagie.text.Cell");
/* se especifican sus propiedades */
&cell.setBorderWidth(&border);
&cell.setHorizontalAlignment(&AlinearHorizontal);
&cell.setVerticalAlignment(&AlinearVertical);
/* En este punto es cuando se agrega a la celda aquello que se vaya a presentar */
/* ... agregando una imagen a la celda */
Local JavaObject &Obj_Img = GetJavaClass("com.lowagie.text.Image").getInstance(&URLImagen);
/* se establecen propiedades */
&Obj_Img.scaleAbsolute(50, 50);
/* se agrega a la celda */
&cell.addElement(&Obj_Img);
/* finalmente se agrega la celda a la tabla, incluso se puede especificar la posición exacta dentro de la tabla */
Local float &Row, &Column;
&Row=1;
&Column=3;
&Obj_Table.addCell(&cell, &Row, &Column);
/* … agregando texto a la celda, y especificando el COLSPAN */
/* primero creamos la fuente */
Local JavaObject &fuente = CreateJavaObject("com.lowagie.text.Font", 1);
&fuente.setSize(&TamanioFuente);
&fuente.setStyle("bold");
Local JavaObject &Obj_Parrafo = CreateJavaObject("com.lowagie.text.Paragraph", “Texto a Mostrar”, &fuente);
/* Creamos la celda */
Local JavaObject &cell = CreateJavaObject("com.lowagie.text.Cell");
&cell.setColspan(2);
&cell.setWidth(&Ancho);
&cell.setBorderWidth(&border);
&cell.setHorizontalAlignment(&AlinearHorizontal); /* 0,1,2 -> Izq, centro, derecha */
&cell.setVerticalAlignment(&AlinearVertical);
&cell.addElement(&Obj_ Parrafo);
/* agregamos a tabla */
&Obj_Table.addCell(&cell, &Row, &Colum);
/* Agregando una imagen directamente al documento */
Local JavaObject &Obj_Img = GetJavaClass("com.lowagie.text.Image").getInstance(&URLImagen);
&Obj_Img.scaleAbsolute(&Width, &Height);
&Obj_Doc.add(&Obj_Img);
/* Agregar texto directamente al documento */
Local JavaObject &fuente = CreateJavaObject("com.lowagie.text.Font", 12); /* desde aquí se puede especificar el tamaño o posteriormente */
&fuente.setSize(&TamanioFuente);
&fuente.setStyle("bold");
Local JavaObject &Obj_Parrafo = CreateJavaObject("com.lowagie.text.Paragraph", “Texto a Mostrar”, &fuente);
&Obj_Parrafo.setAlignment(&Alinear);
&Obj_Doc.add(&Obj_Parrafo);
/* Como último paso es cerrar el documento */
&Obj_Doc.close();
Listo, ya tenemos listo el documento, ahora tendríamos que moverlo, mostrarlo y/o guardarlo, mandarlo por correo, etc ...
Aquí solo mostraré como moverlo a una ubicación de FTP y mostrar el archivo
/* Obtiene el archivo desde la ubicación donde esta el application server y lo manda a otra ubicación, en este caso de FTP */
&salida = PutAttachment(URL.MiURL, "/psmysite/" | &MyNewFile, &ambiente | "/" | &MyFile);
/* Muestra el archivo desde la ubicación de FTP */
&salida = ViewAttachment(URL.MiURL, "/psmysite/" | &MyNewFile, &MyNewFile, True);
/* Eliminamos el archivo copiado después de haberlo mostrado*/
&salida = DeleteAttachment(URL.MiURL, "/psmysite/" | &MyNewFile);