Es posible generar archivos PDF desde Oracle?
Buscando por la web encontre un paquete AS_PDF que permite generar archivos PDF con el formato que necesitemos, viendo los ejemplos es muy completa y la podemos adaptar a nuestras necesidades, pero dependiendo del contenido va a depender la complejidad de armar un archivo PDF.
Este post fue realizado con la referencia de ejemplos de la siguiente pagina:
https://technology.amis.nl/2010/10/20/as_pdf-generating-a-pdf-document-with-some-plsql/
Voy a dar unos ejemplos sencillos de como utilizar el paquete, pero antes de usar los ejemplos primero hay que descargar el código del paquete AS_PDF_MINI y compilarlo:
AS_PDF_MINI.PKS
AS_PDF_MINI.PKB
Creación archivo PDF con AS_PDF_MINI
Una vez creado el paquete AS_PDF_MINI tenemos que definir un directorio en el host y crear el directorio en la BD para poder guardar los archivos PDF generados.
Directorio del host de BD D:\PDF
Creamos el directorio en la BD
El archivo EjemploPDF.PDF se generará en la ruta D:\PDF
Ejemplo 2
Creaciónn de lineas verticales y horizontales
El archivo EjemploPDF_2.PDF se generará en la ruta D:\PDF
Ejemplo 3
Manejo de los tipo de lestras y fornato de hoja
El archivo EjemploPDF_3.PDF se generará en la ruta D:\PDF
Ejemplo 4
Inserción de una imagen en el documemento PDF, para ello ubicaremos una imagen BARCELONA.JPG dentro de la ruta del host D:\DMP para que sea leida e insertada en el documento.
El archivo EjemploPDF_4.PDF se generará en la ruta D:\PDF
Buscando por la web encontre un paquete AS_PDF que permite generar archivos PDF con el formato que necesitemos, viendo los ejemplos es muy completa y la podemos adaptar a nuestras necesidades, pero dependiendo del contenido va a depender la complejidad de armar un archivo PDF.
Este post fue realizado con la referencia de ejemplos de la siguiente pagina:
https://technology.amis.nl/2010/10/20/as_pdf-generating-a-pdf-document-with-some-plsql/
Voy a dar unos ejemplos sencillos de como utilizar el paquete, pero antes de usar los ejemplos primero hay que descargar el código del paquete AS_PDF_MINI y compilarlo:
AS_PDF_MINI.PKS
AS_PDF_MINI.PKB
Creación archivo PDF con AS_PDF_MINI
Una vez creado el paquete AS_PDF_MINI tenemos que definir un directorio en el host y crear el directorio en la BD para poder guardar los archivos PDF generados.
Directorio del host de BD D:\PDF
Creamos el directorio en la BD
CREATE OR REPLACE DIRECTORY PDF AS 'D:\PDF';
Ejemplo 1
Generación de un archivo PDF simple
begin as_pdf_mini.init; as_pdf_mini.write( 'Esto es una prueba para la creacion de un PDF desde una rutina PL/SQL.' ); as_pdf_mini.write( 'Por cada linea escrita por as_pdf_mini.write() se agrega en la linea siguiente. Sin embargo el texto se ajuasta automaticamente en la nueva linea .' ); as_pdf_mini.write( 'Tambien existe la posibilidad de poner el texto en cualquier lugar ubicando las coordenadas', -1, 700 ); as_pdf_mini.write( 'Asi es', 100, 650 ); as_pdf_mini.write( 'Tambien tienes la capacidad de alinear el texto a las izquierda, derecha y centrada', p_y => 600, p_alignment => 'right' ); --P_DIR directorio donde se almacenara el archivos,P_FILENAME nombre del archivo as_pdf_mini.save_pdf(p_dir=>'PDF',p_filename=>'EjemploPDF.pdf'); end; |
El archivo EjemploPDF.PDF se generará en la ruta D:\PDF
Ejemplo del archivo generado |
Ejemplo 2
Creaciónn de lineas verticales y horizontales
begin as_pdf_mini.init; for i in 1 .. 10 loop as_pdf_mini.horizontal_line( 30, 700 - i * 15, 100, i ); end loop; for i in 1 .. 10 loop as_pdf_mini.vertical_line( 150 + i * 15, 700, 100, i ); end loop; for i in 0 .. 255 loop as_pdf_mini.horizontal_line( 330, 700 - i, 100, p_line_color => to_char( i, 'fm0x' ) || to_char( i, 'fm0x' ) || to_char( i, 'fm0x' ) ); end loop; --P_DIR es el directorio donde se almacenara los archivos,P_FILENAME es el nombre del archivo que se va a generar as_pdf_mini.save_pdf(p_dir=>'PDF',p_filename=>'EjemploPDF_2.pdf'); end; |
El archivo EjemploPDF_2.PDF se generará en la ruta D:\PDF
Archivo generado |
Ejemplo 3
Manejo de los tipo de lestras y fornato de hoja
begin as_pdf_mini.init; --p_format formato de la hoja, p_orientation direccion de la hoja PORTRAIT o LANDSCAPE AS_PDF_MINI.SET_FORMAT(p_format=>'A4',p_orientation=>'PORTRAIT'); as_pdf_mini.write( 'La versión mini de AS_PDF se limita a los 14 PDF- fuentes estándar y la codificación WINDOWS- 1252.' ); as_pdf_mini.set_font( 'helvetica' ); as_pdf_mini.write( 'helvetica, normal: ' || 'Guayaquil es la perla del pacifico. 1234567890', -1, 700 ); as_pdf_mini.set_font( 'helvetica', 'I' ); as_pdf_mini.write( 'helvetica, italic: ' || 'Guayaquil es la perla del pacifico. 1234567890', -1, -1 ); as_pdf_mini.set_font( 'helvetica', 'b' ); as_pdf_mini.write( 'helvetica, bold: ' || 'Guayaquil es la perla del pacifico. 1234567890', -1, -1 ); as_pdf_mini.set_font( 'helvetica', 'BI' ); as_pdf_mini.write( 'helvetica, bold italic: ' || 'Guayaquil es la perla del pacifico. 1234567890', -1, -1 ); as_pdf_mini.set_font( 'times' ); as_pdf_mini.write( 'times, normal: ' || 'Guayaquil es la perla del pacifico. 1234567890', -1, 625 ); as_pdf_mini.set_font( 'times', 'I' ); as_pdf_mini.write( 'times, italic: ' || 'Guayaquil es la perla del pacifico. 1234567890', -1, -1 ); as_pdf_mini.set_font( 'times', 'b' ); as_pdf_mini.write( 'times, bold: ' || 'Guayaquil es la perla del pacifico. 1234567890', -1, -1 ); as_pdf_mini.set_font( 'times', 'BI' ); as_pdf_mini.write( 'times, bold italic: ' || 'Guayaquil es la perla del pacifico. 1234567890', -1, -1 ); as_pdf_mini.set_font( 'courier' ); as_pdf_mini.write( 'courier, normal: ' || 'Guayaquil es la perla del pacifico. 1234567890', -1, 550 ); as_pdf_mini.set_font( 'courier', 'I' ); as_pdf_mini.write( 'courier, italic: ' || 'Guayaquil es la perla del pacifico. 1234567890', -1, -1 ); as_pdf_mini.set_font( 'courier', 'b' ); as_pdf_mini.write( 'courier, bold: ' || 'Guayaquil es la perla del pacifico. 1234567890', -1, -1 ); as_pdf_mini.set_font( 'courier', 'BI' ); as_pdf_mini.write( 'courier, bold italic: ' || 'Guayaquil es la perla del pacifico. 1234567890', -1, -1 ); -- as_pdf_mini.set_font( 'courier' ); as_pdf_mini.write( 'symbol:', -1, 475 ); as_pdf_mini.set_font( 'symbol' ); as_pdf_mini.write( 'Guayaquil es la perla del pacifico. 1234567890', -1, -1 ); as_pdf_mini.set_font( 'courier' ); as_pdf_mini.write( 'zapfdingbats:', -1, -1 ); as_pdf_mini.set_font( 'zapfdingbats' ); as_pdf_mini.write( 'Guayaquil es la perla del pacifico. 1234567890', -1, -1 ); -- as_pdf_mini.set_font( 'times', 'N', 20 ); as_pdf_mini.write( 'times, normal with fontsize 20pt', -1, 400 ); as_pdf_mini.set_font( 'times', 'N', 6 ); as_pdf_mini.write( 'times, normal with fontsize 5pt', -1, -1 ); --P_DIR es el directorio donde se almacenara los archivos,P_FILENAME es el nombre del archivo que se va a generar as_pdf_mini.save_pdf(p_dir=>'PDF',p_filename=>'EjemploPDF_3.pdf'); end; |
El archivo EjemploPDF_3.PDF se generará en la ruta D:\PDF
Ejemplo 4
Inserción de una imagen en el documemento PDF, para ello ubicaremos una imagen BARCELONA.JPG dentro de la ruta del host D:\DMP para que sea leida e insertada en el documento.
begin as_pdf_mini.init; as_pdf_mini.set_format(p_format=>'A4',p_orientation => 'PORTRAIT'); as_pdf_mini.put_image (p_dir=> 'PDF',p_file_name=>'BARCELONA.jpg',p_x=>130, p_y => 500); as_pdf_mini.set_font( 'times', 'N', 24 ); as_pdf_mini.write( p_txt=>'BARCELONA CAMPEON', p_Y=> 500, p_alignment=>'center' ); --se presenta imagen en dimension especifica as_pdf_mini.put_image (p_dir=> 'PDF',p_file_name=>'BARCELONA.jpg',p_x=>10, p_y => 300, p_width=>100, p_height=>100); as_pdf_mini.save_pdf(p_dir=>'PDF',p_filename=>'EjemploPDF_4.pdf'); end; |
El archivo EjemploPDF_4.PDF se generará en la ruta D:\PDF
Hola Víctor,
ResponderEliminarTu aporte es genial y mas para explotar ya que tiene una estructura muy compleja para que efectué la magia de formar el PDF.
Seria genial que se pudiera sacar lo básico de para poder hacer un PDF muy simple y dentro de este traiga los resultados de una consulta.
como puedo saltar de linea?
ResponderEliminartiene salto de pagina pero no salto de linea, cual es el comando por favor?
ResponderEliminarHola, pregunta, ¿Para poder generar un archivo con tablas, tendrás un ejemplo?
ResponderEliminarHola Luis, estoy trabajando en ello, si tengo resultados positivos, te regalaré el proceso. un saludo
EliminarHola, buen día.
EliminarActualmente tengo un documento RTF almacenado en una columna CLOB de una tabla en Oracle 18c, necesito convertir este archivo RTF en un PDF y almacenarlo en una columna BLOB de la misma tabla.
¿Sabes cómo podría hacer esto?
Hola, pregunta, ¿Para poder generar un archivo con tablas, tendrás un ejemplo?
ResponderEliminaruna pregunta
ResponderEliminarel paquete es bueno pero es lo siguiente:
como se debe hacer cuando el texto ocupa mas de dos lineas?
el paquete es bueno pero es lo siguiente:
ResponderEliminarcomo se debe hacer cuando el texto ocupa mas de dos lineas?
mi correo es hencalo@hotmail.com
hola buenas, necesito generar un reporte con pl sql, no saben como podria hacer, ya que tiene que llevar el resultado de consultas
ResponderEliminarsi alguien sabe que me pueda ayudar? se lo agradezco
ResponderEliminarmi correo es: caqg1996@gmail.com
Erro a partir da linha : 2 no comando -
ResponderEliminarbegin
as_pdf_mini.init;
as_pdf_mini.write( 'Esto es una prueba para la creacion de un PDF desde una rutina PL/SQL.' );
as_pdf_mini.write( 'Por cada linea escrita por as_pdf_mini.write() se agrega en la linea siguiente. Sin embargo el texto se ajuasta automaticamente en la nueva linea .' );
as_pdf_mini.write( 'Tambien existe la posibilidad de poner el texto en cualquier lugar ubicando las coordenadas', -1, 700 );
as_pdf_mini.write( 'Asi es', 100, 650 );
as_pdf_mini.write( 'Tambien tienes la capacidad de alinear el texto a las izquierda, derecha y centrada', p_y => 600, p_alignment => 'right' );
as_pdf_mini.save_pdf(p_dir=>'PDF',p_filename=>'EjemploPDF.pdf');
end;
Relatório de erros -
ORA-29283: operação de arquivo inválida
ORA-06512: em "SYS.UTL_FILE", line 536
ORA-29283: operação de arquivo inválida
ORA-06512: em "DBAMV.AS_PDF_MINI", line 1186
ORA-06512: em line 8
29283. 00000 - "invalid file operation"
*Cause: An attempt was made to read from a file or directory that does
not exist, or file or directory access was denied by the
operating system.
*Action: Verify file and directory access privileges on the file system,
and if reading, verify that the file exists.
Hola Victor. Me genere el archivo, pero me sale en blanco.
ResponderEliminarHola, será posible poder agregarle una firma digital al PDF?
ResponderEliminarCómo saber cuando crear una nueva pagina cuando el reporte es extenso de más de una página?
ResponderEliminarHola, alguien tendra alguna solucion para agregar password al pdf de salida..se lo agradeceria.
ResponderEliminarHola, buen día a todos.
ResponderEliminarActualmente tengo un documento RTF almacenado en una columna CLOB de una tabla en Oracle 18c, necesito convertir este archivo RTF en un PDF y almacenarlo en una columna BLOB de la misma tabla. ¿Saben cómo podría hacer esto?