Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Hợp nhất / Kết hợp nhiều tệp PDF thành một tệp PDF trong Oracle bằng gói PLPDF_TOOLKIT PL / SQL

Trong hướng dẫn này, tôi đưa ra một ví dụ để hợp nhất / kết hợp nhiều tệp PDF thành một tệp PDF trong Oracle bằng cách sử dụng gói PLPDF_TOOLKIT PL / SQL.

Giả sử bạn có một bảng cho nhân viên có trường BLOB và cho mỗi nhân viên, bảng này chứa nhiều tài liệu ở định dạng PDF và bạn muốn hợp nhất tất cả các tài liệu này cho một nhân viên thành một tài liệu và lưu nó vào trường BLOB của bảng khác.

Bạn có thể xem các bài viết trước của tôi về cách lưu tệp PDF vào cột BLOB, dưới đây là danh sách:

  • Cách tải BLOB từ tệp trong PL / SQL?
  • Cách lưu BLOB dưới dạng tệp trong PL / SQL?
  • Cách lấy tệp từ BLOB trong Oracle?

Từ các bài đăng được đề cập ở trên, bạn sẽ học cách lưu một tệp PDF và trích xuất dữ liệu BLOB chứa một tệp PDF duy nhất. Tại đây, bạn sẽ học cách kết hợp nhiều tệp PDF thành một tệp PDF và lưu trữ trong BLOB.

Hợp nhất / Kết hợp nhiều PDF thành một tệp PDF bằng hàm PLPDF_TOOLKIT.MERGE

Sau đây là cấu trúc đơn giản của bảng nhân viên để chứa nhiều tệp PDF (trong nhiều bản ghi) được lưu trữ trong BLOB cho mỗi nhân viên. Từ bảng này, chúng tôi sẽ nhận được các tệp để hợp nhất. Để thử nghiệm, hãy tạo bảng này và chèn một số bản ghi (tệp PDF) cho số nhân viên 76465:

1. Tạo bảng nguồn

Create Table Emp_Docs (
empno number,
blob_data blob
);

2. Tạo bảng để lưu trữ tệp PDF đã hợp nhất

Bây giờ, hãy tạo một bảng để lưu trữ các tệp PDF đã hợp nhất cho một nhân viên:

Create Table Emp_Pdfs (
empno number,
merged_pdf blob
);

3. Tạo một chương trình PL / SQL để hợp nhất các tệp PDF

Sau đó, chạy mã PL / SQL sau để lấy các tệp PDF cho một nhân viên 76465, hợp nhất thành một tệp PDF và lưu trữ nó vào bảng Emp_Pdfs. Để thực hiện tác vụ này, tôi đang sử dụng hàm 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;

Ví dụ:nếu có 3 tệp PDF được lưu trữ trong 3 bản ghi cho nhân viên 76465, nó sẽ được kết hợp thành một tệp PDF. Ngay cả khi chỉ có một tài liệu PDF cho nhân viên thì tài liệu đó sẽ lưu trữ tài liệu duy nhất.

Bạn có thể truy vấn bảng Emp_Pdfs để xem kết quả.

Xem thêm:

  • Hiển thị Nội dung BLOB (PDF, Hình ảnh) thành một Vùng trong Trang Oracle Apex
  • Cách tạo báo cáo PDF bằng 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. 5 cách cập nhật dữ liệu bằng truy vấn con trong Oracle SQL

  2. Cập nhật nhiều cột trong câu lệnh MERGE ORACLE

  3. sự khác biệt giữa kế hoạch giải thích và kế hoạch thực hiện

  4. dbms_metadata.get_ddl không hoạt động

  5. XMLAGG với sự cố RTRIM