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