このチュートリアルでは、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レポートを作成する方法