sql >> Base de Datos >  >> RDS >> Oracle

Fusionar/combinar varios archivos PDF en un solo PDF en Oracle mediante el paquete PLPDF_TOOLKIT PL/SQL

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