En este tutorial, doy un ejemplo para fusionar/combinar varios archivos PDF en un solo archivo PDF en Oracle usando el paquete PLPDF_TOOLKIT PL/SQL.
Suponga que tiene una tabla para empleados que tiene un campo BLOB y para cada empleado esta tabla contiene varios documentos en formato PDF y desea fusionar todos estos documentos para un empleado en un documento y guardarlo en el campo BLOB de otra tabla.
Puede consultar mis publicaciones anteriores sobre cómo guardar archivos PDF en una columna BLOB, a continuación se muestra la lista:
- ¿Cómo obtener BLOB de un archivo en PL/SQL?
- ¿Cómo guardar BLOB como archivo en PL/SQL?
- ¿Cómo obtener un archivo de BLOB en Oracle?
De las publicaciones mencionadas anteriormente, aprenderá cómo guardar un solo PDF y extraer los datos BLOB que contienen un solo PDF. Aquí aprenderá cómo combinar varios archivos PDF en un solo archivo PDF y almacenarlos en un BLOB.
Fusionar/combinar varios archivos PDF en un solo archivo PDF mediante la función PLPDF_TOOLKIT.MERGE
La siguiente es la estructura simple de una tabla de empleados para contener múltiples archivos PDF (en múltiples registros) almacenados en BLOB para cada empleado. A partir de esta tabla, obtendremos los archivos para fusionar. Para realizar pruebas, cree esta tabla e inserte varios registros (archivos PDF) para el número de empleado 76465:
1. Crear una tabla de origen
Create Table Emp_Docs ( empno number, blob_data blob );
2. Crear una tabla para almacenar PDF combinado
Ahora cree una tabla para almacenar los archivos PDF combinados para un empleado:
Create Table Emp_Pdfs ( empno number, merged_pdf blob );
3. Cree un programa PL/SQL para fusionar archivos PDF
Luego ejecute el siguiente código PL/SQL para obtener los archivos PDF para un empleado 76465, combínelos en un archivo PDF y guárdelo en la tabla Emp_Pdfs. Para realizar esta tarea, estoy usando la función PLPDF_TOOLKIT.MERGE.
Declare l_Blob1 BLOB; l_Blob2 BLOB; l_Blob3 BLOB; CURSOR Cur_empDocs IS SELECT blob_data, Rownum Row_n FROM emp_docs WHERE empno = 76465; n_Count INTEGER := 0; BEGIN FOR c IN Cur_empDocs LOOP IF c.row_n = 1 THEN Dbms_Lob.Createtemporary(Lob_Loc => l_Blob1, Cache => TRUE, Dur => Dbms_Lob.Call); l_Blob1 := c.blob_data; ELSE Dbms_Lob.Createtemporary(Lob_Loc => l_Blob2, Cache => TRUE, Dur => Dbms_Lob.Call); l_Blob2 := c.blob_data; Dbms_Lob.Createtemporary(Lob_Loc => l_Blob3, Cache => TRUE, Dur => Dbms_Lob.Call); l_Blob3 := Plpdf_Toolkit.Merge(l_Blob1, l_Blob2); l_Blob1 := l_Blob3; END IF; n_Count := n_Count + 1; END LOOP; IF n_Count > 0 THEN insert into emp_pdfs (empno, merged_pdf) values (76465, l_blob1); COMMIT; END IF; EXCEPTION WHEN OTHERS THEN raise; END;
Por ejemplo, si hay 3 archivos PDF almacenados en 3 registros para el empleado 76465, se combinarán en un PDF. Incluso si solo hay un documento PDF para un empleado, almacenará el único.
Puede consultar la tabla Emp_Pdfs para ver el resultado.
Véase también:
- Mostrar contenido BLOB (PDF, imágenes) en una región en la página de Oracle Apex
- Cómo crear un informe PDF usando PL/SQL