Oracle
 sql >> Base de données >  >> RDS >> Oracle

Fusionner/Combiner plusieurs fichiers PDF en un seul PDF dans Oracle à l'aide du package PLPDF_TOOLKIT PL/SQL

Dans ce didacticiel, je donne un exemple pour fusionner/combiner plusieurs fichiers PDF en un seul fichier PDF dans Oracle à l'aide du package PLPDF_TOOLKIT PL/SQL.

Supposons que vous ayez une table pour les employés ayant un champ BLOB et pour chaque employé cette table contenant plusieurs documents au format PDF et que vous souhaitiez fusionner tous ces documents pour un employé dans un document et l'enregistrer dans le champ BLOB d'une autre table.

Vous pouvez consulter mes articles précédents sur la façon d'enregistrer des fichiers PDF dans une colonne BLOB, ci-dessous la liste :

  • Comment obtenir un BLOB à partir d'un fichier en PL/SQL ?
  • Comment enregistrer un BLOB en tant que fichier en PL/SQL ?
  • Comment obtenir un fichier à partir d'un BLOB dans Oracle ?

À partir des articles mentionnés ci-dessus, vous apprendrez à enregistrer un seul PDF et à extraire les données BLOB contenant un seul PDF. Ici, vous apprendrez à combiner plusieurs fichiers PDF en un seul fichier PDF et à les stocker dans un BLOB.

Fusionner/combiner plusieurs PDF en un seul fichier PDF à l'aide de la fonction PLPDF_TOOLKIT.MERGE

Voici la structure simple d'une table d'employés contenant plusieurs fichiers PDF (dans plusieurs enregistrements) stockés dans BLOB pour chaque employé. A partir de ce tableau, nous obtiendrons les fichiers à fusionner. Pour tester, créez ce tableau et insérez des enregistrements multiples (fichiers PDF) pour le numéro d'employé 76465 :

1. Créer une table source

Create Table Emp_Docs (
empno number,
blob_data blob
);

2. Créer un tableau pour stocker le PDF fusionné

Créez maintenant une table pour stocker les fichiers PDF fusionnés d'un employé :

Create Table Emp_Pdfs (
empno number,
merged_pdf blob
);

3. Créer un programme PL/SQL pour fusionner des PDF

Exécutez ensuite le code PL/SQL suivant pour obtenir les fichiers PDF d'un employé 76465, fusionnez-les en un seul fichier PDF et stockez-le dans la table Emp_Pdfs. Pour effectuer cette tâche, j'utilise la fonction 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;

Par exemple, s'il y a 3 fichiers PDF stockés dans 3 enregistrements pour l'employé 76465, ils seront combinés en un seul PDF. Même s'il n'y a qu'un seul document PDF pour un employé, il ne stockera que le seul.

Vous pouvez interroger la table Emp_Pdfs pour voir le résultat.

Voir aussi :

  • Afficher le contenu BLOB (PDF, images) dans une région d'Oracle Apex Page
  • Comment créer un rapport PDF à l'aide de PL/SQL