Oracle
 sql >> база данни >  >> RDS >> Oracle

Обединяване/комбиниране на множество PDF файлове в един PDF в Oracle с помощта на PLPDF_TOOLKIT PL/SQL пакет

В този урок давам пример за сливане/комбиниране на множество 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
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Многоезична поддръжка в 11i/R12

  2. Как да поръчате по име на месец в PostgreSQL или Oracle

  3. Как да получите вчерашна дата в Oracle

  4. Oracle - ORA-01489:резултатът от конкатенацията на низове е твърде дълъг

  5. Как мога да напиша SQL в Oracle в моя случай?