このチュートリアルでは、PLPDF_TOOLKIT PL / SQLパッケージを使用して、Oracleで複数のPDFファイルを1つのPDFファイルにマージ/結合する例を示しています。
BLOBフィールドを持つ従業員用のテーブルがあり、各従業員用にPDF形式の複数のドキュメントを含むこのテーブルがあり、従業員のこれらすべてのドキュメントを1つのドキュメントにマージして、別のテーブルのBLOBフィールドに保存するとします。
PDFファイルをBLOB列に保存する方法については、以前の投稿を確認できます。以下にリストを示します。
- PL / SQLのファイルからBLOBを取得するにはどうすればよいですか?
- PL / SQLでBLOBをファイルとして保存するにはどうすればよいですか?
- OracleでBLOBからファイルを取得する方法
上記の投稿から、単一のPDFを保存し、単一のPDFを含むBLOBデータを抽出する方法を学習します。ここでは、複数のPDFファイルを1つのPDFファイルに結合してBLOBに保存する方法を学習します。
PLPDF_TOOLKIT.MERGE関数を使用して複数のPDFを1つのPDFファイルにマージ/結合
以下は、従業員ごとにBLOBに格納された複数のPDFファイル(複数のレコード)を含む従業員テーブルの単純な構造です。このテーブルから、マージするファイルを取得します。テストのために、このテーブルを作成し、従業員番号76465の複数のレコード(PDFファイル)を挿入します。
1。ソーステーブルを作成する
Create Table Emp_Docs ( empno number, blob_data blob );
2。マージされたPDFを保存するテーブルを作成する
次に、従業員のマージされたPDFファイルを保存するテーブルを作成します。
Create Table Emp_Pdfs ( empno number, merged_pdf blob );
3。 PDFをマージするためのPL/SQLプログラムを作成する
次に、次のPL / SQLコードを実行して従業員76465のPDFファイルを取得し、1つの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;
たとえば、従業員76465の3つのレコードに3つのPDFファイルが保存されている場合、それは1つのPDFに結合されます。従業員のPDFドキュメントが1つしかない場合でも、保存されるのは1つだけです。
テーブルEmp_Pdfsにクエリを実行して、結果を確認できます。
関連項目:
- BLOBコンテンツ(PDF、画像)をOracleApexページのリージョンに表示する
- PL/SQLを使用してPDFレポートを作成する方法