Oracle
 sql >> Database >  >> RDS >> Oracle

Unisci/combina più file PDF in un unico PDF in Oracle utilizzando il pacchetto PLPDF_TOOLKIT PL/SQL

In questo tutorial, fornisco un esempio per unire/combinare più file PDF in un unico file PDF in Oracle utilizzando il pacchetto PLPDF_TOOLKIT PL/SQL.

Supponiamo di avere una tabella per i dipendenti con un campo BLOB e per ogni dipendente questa tabella contenente più documenti in formato PDF e di voler unire tutti questi documenti per un dipendente in un documento e salvarlo nel campo BLOB di un'altra tabella.

Puoi controllare i miei post precedenti su come salvare i file PDF in una colonna BLOB, di seguito è riportato l'elenco:

  • Come ottenere BLOB da file in PL/SQL?
  • Come salvare BLOB come file in PL/SQL?
  • Come ottenere file da BLOB in Oracle?

Dai post sopra menzionati imparerai come salvare un singolo PDF ed estrarre i dati BLOB contenenti un singolo PDF. Qui imparerai come combinare più file PDF in un unico file PDF e archiviarli in un BLOB.

Unisci/combina più PDF in un unico file PDF utilizzando la funzione PLPDF_TOOLKIT.MERGE

Quella che segue è la struttura semplice di una tabella dipendente per contenere più file PDF (in più record) archiviati in BLOB per ciascun dipendente. Da questa tabella, otterremo i file da unire. Per il test, crea questa tabella e inserisci alcuni record multipli (file PDF) per il dipendente numero 76465:

1. Crea una tabella di origine

Create Table Emp_Docs (
empno number,
blob_data blob
);

2. Crea una tabella per archiviare PDF uniti

Ora crea una tabella per archiviare i file PDF uniti per un dipendente:

Create Table Emp_Pdfs (
empno number,
merged_pdf blob
);

3. Crea un programma PL/SQL per unire i PDF

Quindi eseguire il seguente codice PL/SQL per ottenere i file PDF per un dipendente 76465, unirli in un unico file PDF e archiviarlo nella tabella Emp_Pdfs. Per eseguire questa attività, sto utilizzando la funzione 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;

Ad esempio, se sono presenti 3 file PDF archiviati in 3 record per il dipendente 76465, verranno combinati in un unico PDF. Anche se esiste un solo documento PDF per un dipendente, memorizzerà l'unico.

Puoi interrogare la tabella Emp_Pdfs per vedere il risultato.

Vedi anche:

  • Visualizza i contenuti BLOB (PDF, immagini) in un'area nella pagina Oracle Apex
  • Come creare report PDF utilizzando PL/SQL