sql >> データベース >  >> RDS >> Oracle

PLPDF_TOOLKIT PL / SQLパッケージを使用して、Oracleで複数のPDFファイルを1つのPDFにマージ/結合

    このチュートリアルでは、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レポートを作成する方法
    1. インデックス付きビューとMERGEを使用している場合は、こちらをお読みください。

    2. MySQLで列の名前を変更します

    3. OracleデータベースでSELECTINTOステートメントを使用して一括収集句を使用する方法

    4. ループのないセットまたはシーケンスを生成する–パート3