sql >> Databáze >  >> RDS >> Oracle

Sloučení/kombinace více souborů PDF do jednoho PDF v Oracle pomocí balíčku PLPDF_TOOLKIT PL/SQL

V tomto tutoriálu uvádím příklad sloučení/kombinace více souborů PDF do jednoho souboru PDF v Oracle pomocí balíčku PLPDF_TOOLKIT PL/SQL.

Předpokládejme, že máte tabulku pro zaměstnance s polem BLOB a pro každého zaměstnance tuto tabulku obsahující více dokumentů ve formátu PDF a chcete všechny tyto dokumenty pro zaměstnance sloučit do jednoho dokumentu a uložit jej do pole BLOB jiné tabulky.

Můžete se podívat na mé předchozí příspěvky o tom, jak uložit soubory PDF do sloupce BLOB, níže je seznam:

  • Jak získat BLOB ze souboru v PL/SQL?
  • Jak uložit BLOB jako soubor v PL/SQL?
  • Jak získat soubor z BLOB v Oracle?

Z výše uvedených příspěvků se dozvíte, jak uložit jeden PDF a extrahovat data BLOB obsahující jeden PDF. Zde se dozvíte, jak zkombinovat více souborů PDF do jednoho souboru PDF a uložit do BLOB.

Sloučit/zkombinovat více souborů PDF do jednoho souboru PDF pomocí funkce PLPDF_TOOLKIT.MERGE

Následuje jednoduchá struktura tabulky zaměstnanců, která obsahuje více souborů PDF (ve více záznamech) uložených v BLOB pro každého zaměstnance. Z této tabulky dostaneme soubory ke sloučení. Pro testování vytvořte tuto tabulku a vložte několik záznamů (soubory PDF) pro zaměstnance číslo 76465:

1. Vytvořte zdrojovou tabulku

Create Table Emp_Docs (
empno number,
blob_data blob
);

2. Vytvořte tabulku pro uložení sloučeného PDF

Nyní vytvořte tabulku pro uložení sloučených souborů PDF pro zaměstnance:

Create Table Emp_Pdfs (
empno number,
merged_pdf blob
);

3. Vytvořte program PL/SQL pro sloučení souborů PDF

Poté spusťte následující kód PL/SQL, abyste získali soubory PDF pro zaměstnance 76465, sloučili je do jednoho souboru PDF a uložili jej do tabulky Emp_Pdfs. K provedení tohoto úkolu používám funkci 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;

Pokud jsou například pro zaměstnance 76465 ​​uloženy 3 soubory PDF ve 3 záznamech, sloučí se do jednoho PDF. I když pro zaměstnance existuje pouze jeden dokument PDF, uloží se pouze jeden.

Chcete-li vidět výsledek, můžete se dotázat na tabulku Emp_Pdfs.

Viz také:

  • Zobrazení obsahu BLOB (PDF, obrázky) do oblasti na stránce Oracle Apex
  • Jak vytvořit sestavu PDF pomocí PL/SQL
  1. Oracle SQL:Aktualizujte tabulku daty z jiné tabulky

  2. Jak získat aktuální datum na serveru SQL

  3. Jak funguje SQLite Avg()

  4. Jak vypočítat průměr sloupce a poté jej zahrnout do výběrového dotazu v oracle?