sql >> Databasteknik >  >> RDS >> Oracle

Slå samman/kombinera flera PDF-filer till en PDF i Oracle med PLPDF_TOOLKIT PL/SQL-paket

I den här handledningen ger jag ett exempel på att slå samman/kombinera flera PDF-filer till en PDF-fil i Oracle med hjälp av PLPDF_TOOLKIT PL/SQL-paketet.

Anta att du har en tabell för anställda som har ett BLOB-fält och för varje anställd denna tabell som innehåller flera dokument i PDF-format och att du vill slå samman alla dessa dokument för en anställd till ett dokument och spara det i en annan tabells BLOB-fält.

Du kan kontrollera mina tidigare inlägg om hur man sparar PDF-filer i en BLOB-kolumn, nedan är listan:

  • Hur får man BLOB från fil i PL/SQL?
  • Hur sparar man BLOB som fil i PL/SQL?
  • Hur får man en fil från BLOB i Oracle?

Från de ovan nämnda inläggen kommer du att lära dig hur du sparar en enda PDF och extraherar BLOB-data som innehåller en enda PDF. Här kommer du att lära dig hur du kombinerar flera PDF-filer till en PDF-fil och lagrar i en BLOB.

Slå samman/kombinera flera PDF-filer till en PDF-fil med funktionen PLPDF_TOOLKIT.MERGE

Följande är den enkla strukturen för en anställdstabell som innehåller flera PDF-filer (i flera poster) lagrade i BLOB för varje anställd. Från den här tabellen kommer vi att få filerna att slås samman. För testning, skapa den här tabellen och infoga flera poster (PDF-filer) för anställd nummer 76465:

1. Skapa en källtabell

Create Table Emp_Docs (
empno number,
blob_data blob
);

2. Skapa en tabell för att lagra sammanslagen PDF

Skapa nu en tabell för att lagra de sammanslagna PDF-filerna för en anställd:

Create Table Emp_Pdfs (
empno number,
merged_pdf blob
);

3. Skapa ett PL/SQL-program för att slå samman PDF-filer

Kör sedan följande PL/SQL-kod för att få PDF-filerna för en anställd 76465, slå samman till en PDF-fil och lagra den i Emp_Pdfs tabell. För att utföra denna uppgift använder jag funktionen 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;

Till exempel, om det finns 3 PDF-filer lagrade i 3 poster för den anställde 76465, kommer det att kombineras till en PDF. Även om det bara finns ett PDF-dokument för en anställd kommer det att lagra det enda.

Du kan fråga tabellen Emp_Pdfs för att se resultatet.

Se även:

  • Visa BLOB-innehåll (PDF, bilder) i en region på Oracle Apex-sida
  • Hur man skapar PDF-rapporter med PL/SQL
  1. ORA-00054:resurs upptagen och förvärv med NOWAIT specificerad

  2. Hur hämtar man data från en SQL Server-databas i C#?

  3. Hur man skapar PL/SQL SYS_REFCURSOR i Oracle Database

  4. Salesforce SOQL från Java