Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Scal/połącz wiele plików PDF w jeden plik PDF w Oracle za pomocą pakietu PLPDF_TOOLKIT PL/SQL

W tym samouczku podaję przykład łączenia/łączenia wielu plików PDF w jeden plik PDF w Oracle przy użyciu pakietu PLPDF_TOOLKIT PL/SQL.

Załóżmy, że masz tabelę dla pracowników z polem BLOB i dla każdego pracownika tę tabelę zawierającą wiele dokumentów w formacie PDF i chcesz połączyć wszystkie te dokumenty pracownika w jeden dokument i zapisać go w polu BLOB innej tabeli.

Możesz sprawdzić moje poprzednie posty, jak zapisywać pliki PDF w kolumnie BLOB, poniżej znajduje się lista:

  • Jak pobrać BLOB z pliku w PL/SQL?
  • Jak zapisać BLOB jako plik w PL/SQL?
  • Jak pobrać plik z BLOB w Oracle?

Z wyżej wymienionych postów dowiesz się, jak zapisać pojedynczy plik PDF i wyodrębnić dane BLOB zawierające pojedynczy plik PDF. Tutaj dowiesz się, jak połączyć wiele plików PDF w jeden plik PDF i przechowywać w BLOB.

Scal/połącz wiele plików PDF w jeden plik PDF za pomocą funkcji PLPDF_TOOLKIT.MERGE

Poniżej przedstawiono prostą strukturę tabeli pracowników, która zawiera wiele plików PDF (w wielu rekordach) przechowywanych w BLOB dla każdego pracownika. Z tej tabeli otrzymamy pliki do scalenia. W celu przetestowania utwórz tę tabelę i wstaw kilka rekordów (plików PDF) dla numeru pracownika 76465:

1. Utwórz tabelę źródłową

Create Table Emp_Docs (
empno number,
blob_data blob
);

2. Utwórz tabelę do przechowywania scalonych plików PDF

Teraz utwórz tabelę do przechowywania scalonych plików PDF dla pracownika:

Create Table Emp_Pdfs (
empno number,
merged_pdf blob
);

3. Utwórz program PL/SQL do scalania plików PDF

Następnie uruchom następujący kod PL/SQL, aby pobrać pliki PDF dla pracownika 76465, scal je w jeden plik PDF i zapisz go w tabeli Emp_Pdfs. Aby wykonać to zadanie, używam funkcji 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;

Na przykład, jeśli w 3 rekordach dla pracownika 76465 ​​znajdują się 3 pliki PDF, zostaną one połączone w jeden plik PDF. Nawet jeśli dla pracownika istnieje tylko jeden dokument PDF, zachowa on jedyny.

Możesz wysłać zapytanie do tabeli Emp_Pdfs, aby zobaczyć wynik.

Zobacz też:

  • Wyświetlaj zawartość BLOB (PDF, obrazy) w regionie na stronie Oracle Apex
  • Jak utworzyć raport PDF za pomocą 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. Tworzenie nowej bazy danych i nowe połączenie w Oracle SQL Developer

  2. Co oznacza symbol SQL Select || oznaczać?

  3. Zalecenia dotyczące obsługi Oracle i SQL Server w tej samej aplikacji ASP.NET z NHibernate

  4. Przykład Oracle WHILE LOOP

  5. Korzystanie z daty w ograniczeniu sprawdzającym, Oracle