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
-
Comment exporter des données vers un fichier plat avec l'utilitaire BCP et importer des données avec Bulk Insert
-
Comment créer une application d'internationalisation hors ligne :Construire la structure du projet
-
* ALERTE * Impossible d'ouvrir d'autres bogues de bases de données avec Microsoft Office build 2201
-
Utiliser des modèles de formation Cloud pour lancer des instances MySQL sur RDS