В този урок давам пример за сливане/комбиниране на множество PDF файлове в един PDF файл в Oracle с помощта на PLPDF_TOOLKIT PL/SQL пакет.
Да приемем, че имате таблица за служители с BLOB поле и за всеки служител тази таблица съдържа множество документи в PDF формат и искате да обедините всички тези документи за служител в един документ и да го запишете в полето BLOB на друга таблица.
Можете да проверите предишните ми публикации за това как да записвате PDF файлове в колона BLOB, по-долу е списъкът:
- Как да получа BLOB от файл в PL/SQL?
- Как да запишете BLOB като файл в PL/SQL?
- Как да получа файл от BLOB в Oracle?
От гореспоменатите публикации ще научите как да запазите един PDF и да извлечете BLOB данните, съдържащи един PDF. Тук ще научите как да комбинирате множество PDF файлове в един PDF файл и да ги съхранявате в BLOB.
Обединяване/комбиниране на множество PDF файлове в един PDF файл с помощта на функция PLPDF_TOOLKIT.MERGE
Следва простата структура на таблица на служителите, която съдържа множество PDF файлове (в множество записи), съхранявани в BLOB за всеки служител. От тази таблица ще получим файловете за сливане. За тестване създайте тази таблица и вмъкнете няколко записа (PDF файлове) за номер на служител 76465:
1. Създайте таблица с източник
Create Table Emp_Docs ( empno number, blob_data blob );
2. Създайте таблица за съхраняване на обединени PDF
Сега създайте таблица за съхраняване на обединените PDF файлове за служител:
Create Table Emp_Pdfs ( empno number, merged_pdf blob );
3. Създайте PL/SQL програма за обединяване на PDF файлове
След това изпълнете следния PL/SQL код, за да получите PDF файловете за служител 76465, слейте в един PDF файл и го съхранете в таблицата Emp_Pdfs. За да изпълня тази задача, използвам функцията 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;
Например, ако има 3 PDF файла, съхранени в 3 записа за служителя 76465, той ще бъде комбиниран в един PDF. Дори ако има само един PDF документ за служител, той ще съхранява единствения.
Можете да направите заявка в таблицата Emp_Pdfs, за да видите резултата.
Вижте също:
- Показване на BLOB съдържание (PDF, изображения) в регион в страницата на Oracle Apex
- Как да създадете PDF отчет с помощта на PL/SQL