sql >> Database teknologi >  >> RDS >> Oracle

Flet/kombiner flere PDF-filer til én PDF i Oracle ved hjælp af PLPDF_TOOLKIT PL/SQL-pakke

I denne vejledning giver jeg et eksempel på at flette/kombinere flere PDF-filer til én PDF-fil i Oracle ved hjælp af PLPDF_TOOLKIT PL/SQL-pakken.

Antag, at du har en tabel for medarbejdere med et BLOB-felt og for hver medarbejder denne tabel, der indeholder flere dokumenter i PDF-format, og du vil flette alle disse dokumenter for en medarbejder til et dokument og gemme det i en anden tabels BLOB-felt.

Du kan tjekke mine tidligere indlæg om, hvordan du gemmer PDF-filer i en BLOB-kolonne, nedenfor er listen:

  • Hvordan får man BLOB fra fil i PL/SQL?
  • Hvordan gemmer man BLOB som fil i PL/SQL?
  • Hvordan hentes fil fra BLOB i Oracle?

Fra de ovennævnte indlæg lærer du, hvordan du gemmer en enkelt PDF og udtrækker BLOB-dataene, der indeholder en enkelt PDF. Her lærer du, hvordan du kombinerer flere PDF-filer til én PDF-fil og gemmer i en BLOB.

Flet/Kombiner flere PDF-filer til én PDF-fil ved hjælp af PLPDF_TOOLKIT.MERGE-funktionen

Det følgende er den enkle struktur af en medarbejdertabel, der indeholder flere PDF-filer (i flere poster) gemt i BLOB for hver medarbejder. Fra denne tabel får vi filerne til at flette. Til test skal du oprette denne tabel og indsætte nogle flere poster (PDF-filer) for medarbejdernummer 76465:

1. Opret en kildetabel

Create Table Emp_Docs (
empno number,
blob_data blob
);

2. Opret en tabel til at gemme flettet PDF

Opret nu en tabel til at gemme de flettede PDF-filer for en medarbejder:

Create Table Emp_Pdfs (
empno number,
merged_pdf blob
);

3. Opret et PL/SQL-program til at flette PDF'er

Kør derefter følgende PL/SQL-kode for at få PDF-filerne til en medarbejder 76465, flet til én PDF-fil og gem den i Emp_Pdfs tabel. For at udføre denne opgave bruger jeg 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;

Hvis der for eksempel er 3 PDF-filer gemt i 3 poster for medarbejderen 76465, vil det blive kombineret til én PDF. Selvom der kun er ét PDF-dokument til en medarbejder, så gemmer det det eneste.

Du kan forespørge i tabellen Emp_Pdfs for at se resultatet.

Se også:

  • Vis BLOB-indhold (PDF, billeder) i en region på Oracle Apex-side
  • Sådan opretter du PDF-rapport ved hjælp af PL/SQL
  1. Returner månedens start i SQLite

  2. Sparse kolonner i SQL Server:Indvirkning på tid og rum

  3. Udfør dynamisk forespørgsel med go i sql

  4. Sådan fungerer SQLite Avg()