In deze tutorial geef ik een voorbeeld om meerdere PDF-bestanden samen te voegen/combineren tot één PDF-bestand in Oracle met behulp van het PLPDF_TOOLKIT PL/SQL-pakket.
Stel u heeft een tabel voor werknemers met een BLOB-veld en voor elke werknemer bevat deze tabel meerdere documenten in PDF-formaat en u wilt al deze documenten voor een werknemer samenvoegen tot één document en dit opslaan in het BLOB-veld van een andere tabel.
Je kunt mijn eerdere berichten bekijken om PDF-bestanden op te slaan in een BLOB-kolom, hieronder is de lijst:
- Hoe haal ik BLOB uit een bestand in PL/SQL?
- Hoe BLOB opslaan als bestand in PL/SQL?
- Hoe krijg ik een bestand van BLOB in Oracle?
Van de bovengenoemde berichten leert u hoe u een enkele PDF kunt opslaan en de BLOB-gegevens met een enkele PDF kunt extraheren. Hier leert u hoe u meerdere PDF-bestanden kunt combineren tot één PDF-bestand en kunt opslaan in een BLOB.
Meerdere PDF's samenvoegen/combineren in één PDF-bestand met de functie PLPDF_TOOLKIT.MERGE
Het volgende is de eenvoudige structuur van een werknemerstabel om meerdere PDF-bestanden (in meerdere records) te bevatten die zijn opgeslagen in BLOB voor elke werknemer. Vanuit deze tabel zullen we de bestanden laten samenvoegen. Maak voor het testen deze tabel en voeg enkele meerdere records (PDF-bestanden) in voor medewerkernummer 76465:
1. Maak een brontabel
Create Table Emp_Docs ( empno number, blob_data blob );
2. Maak een tabel om samengevoegde PDF op te slaan
Maak nu een tabel om de samengevoegde PDF-bestanden voor een medewerker op te slaan:
Create Table Emp_Pdfs ( empno number, merged_pdf blob );
3. Maak een PL/SQL-programma om PDF's samen te voegen
Voer vervolgens de volgende PL/SQL-code uit om de PDF-bestanden voor een werknemer 76465 op te halen, samen te voegen tot één PDF-bestand en op te slaan in de Emp_Pdfs-tabel. Om deze taak uit te voeren, gebruik ik de functie 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;
Als er bijvoorbeeld 3 PDF-bestanden zijn opgeslagen in 3 records voor de werknemer 76465, worden deze gecombineerd tot één PDF. Zelfs als er maar één PDF-document voor een werknemer is, zal het de enige opslaan.
U kunt de tabel Emp_Pdfs opvragen om het resultaat te zien.
Zie ook:
- Blob-inhoud (PDF, afbeeldingen) weergeven in een regio op Oracle Apex-pagina
- Hoe maak je een PDF-rapport met PL/SQL
-
Deadlocks in PostgreSQL bij het uitvoeren van UPDATE
-
Hoe u invoegverklaringen uit Excel-gegevens kunt genereren en in SQL Server-tabel kunt laden - SQL Server / TSQL-zelfstudie, deel 103
-
Een incrementeel groepsnummer per groep retourneren in SQL
-
Een samengestelde externe sleutel maken in SQL Server (T-SQL-voorbeeld)