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