sql >> Database >  >> RDS >> Oracle

Meerdere PDF-bestanden samenvoegen/combineren tot één PDF in Oracle met behulp van PLPDF_TOOLKIT PL/SQL-pakket

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
  1. Deadlocks in PostgreSQL bij het uitvoeren van UPDATE

  2. Hoe u invoegverklaringen uit Excel-gegevens kunt genereren en in SQL Server-tabel kunt laden - SQL Server / TSQL-zelfstudie, deel 103

  3. Een incrementeel groepsnummer per groep retourneren in SQL

  4. Een samengestelde externe sleutel maken in SQL Server (T-SQL-voorbeeld)