In diesem Tutorial gebe ich ein Beispiel zum Zusammenführen/Kombinieren mehrerer PDF-Dateien zu einer PDF-Datei in Oracle mit dem PLPDF_TOOLKIT PL/SQL-Paket.
Angenommen, Sie haben eine Tabelle für Mitarbeiter mit einem BLOB-Feld und für jeden Mitarbeiter enthält diese Tabelle mehrere Dokumente im PDF-Format und Sie möchten alle diese Dokumente für einen Mitarbeiter zu einem Dokument zusammenführen und im BLOB-Feld einer anderen Tabelle speichern.
Sie können meine vorherigen Posts zum Speichern von PDF-Dateien in einer BLOB-Spalte lesen, unten ist die Liste:
- Wie erhalte ich BLOB aus einer Datei in PL/SQL?
- Wie speichert man BLOB als Datei in PL/SQL?
- Wie bekomme ich eine Datei von BLOB in Oracle?
In den oben genannten Beiträgen erfahren Sie, wie Sie einzelne PDF-Dateien speichern und die BLOB-Daten extrahieren, die einzelne PDF-Dateien enthalten. Hier erfahren Sie, wie Sie mehrere PDF-Dateien zu einer PDF-Datei zusammenfassen und in einem BLOB speichern.
Mehrere PDFs mit der Funktion PLPDF_TOOLKIT.MERGE zu einer PDF-Datei zusammenführen/kombinieren
Das Folgende ist die einfache Struktur einer Mitarbeitertabelle, die mehrere PDF-Dateien (in mehreren Datensätzen) enthält, die in BLOB für jeden Mitarbeiter gespeichert sind. Aus dieser Tabelle erhalten wir die Dateien zum Zusammenführen. Erstellen Sie zum Testen diese Tabelle und fügen Sie mehrere Datensätze (PDF-Dateien) für die Mitarbeiternummer 76465 ein:
1. Erstellen Sie eine Quelltabelle
Create Table Emp_Docs ( empno number, blob_data blob );
2. Erstellen Sie eine Tabelle zum Speichern von zusammengeführten PDFs
Erstellen Sie nun eine Tabelle zum Speichern der zusammengeführten PDF-Dateien für einen Mitarbeiter:
Create Table Emp_Pdfs ( empno number, merged_pdf blob );
3. Erstellen Sie ein PL/SQL-Programm zum Zusammenführen von PDFs
Führen Sie dann den folgenden PL/SQL-Code aus, um die PDF-Dateien für einen Mitarbeiter 76465 abzurufen, zu einer PDF-Datei zusammenzuführen und in der Tabelle Emp_Pdfs zu speichern. Um diese Aufgabe auszuführen, verwende ich die Funktion 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;
Wenn beispielsweise 3 PDF-Dateien in 3 Datensätzen für den Mitarbeiter 76465 gespeichert sind, werden diese zu einem PDF zusammengefasst. Auch wenn es nur ein PDF-Dokument für einen Mitarbeiter gibt, wird nur das einzige gespeichert.
Sie können die Tabelle Emp_Pdfs abfragen, um das Ergebnis zu sehen.
Siehe auch:
- Anzeigen von BLOB-Inhalten (PDF, Bilder) in einer Region auf der Oracle Apex-Seite
- Erstellung eines PDF-Berichts mit PL/SQL