PDFファイルの作成例に関するOracleサブサンプルのJavaストアドプロシージャ

すべての人に良い一日を!

最近、Oracle DBMS(Javaストアドプロシージャ)のJava言語で関数(ストアドプロシージャ)を作成した経験がありました。 このような関数を作成する手順については、pdfファイルでの作業例を見て説明します。



これに必要なものは次のとおりです。





Oracle DBMSのバージョンに応じて、異なるバージョンのJVM(Java仮想マシン)を(システムとともに)インストールできることを知っておくことが重要です。 DBMSの10番目のバージョンでは、JVM 1.4がインストールされています。 そしてこれは、Javaコードを書くとき、同じバージョンの言語を使用する必要があることを意味します。



DBMSでのライブラリのロード



Javaコードは、既存のiTextライブラリクラスメソッドで動作します。 この点で、まずライブラリをsubにロードする必要があります。 これにはloadjavaコマンドが役立ちます。 ライブラリ自体は、Javaバージョン1.4を使用してコンパイルする必要があります。 したがって、私はitext 1.4.8を選択しました。 さらに、付属のライブラリをダウンロードする必要がありました。 iTextライブラリのロードシーケンスは次のとおりです。



これはリモートで実行できます。 これを行うには、ユーザーデータとサーバー接続パラメーターが示されます。



Javaコードをダウンロードする



データベースに関数を作成する前に、独自のコードをDBMSにロードする必要があります。 この例では、既存のファイルを開いて画像を追加し、新しいファイルに保存します。 コードは次のとおりです。

create or replace and compile java source named "MyJavaPdf" as import java.io.FileOutputStream; import java.io.IOException; import com.lowagie.text.Annotation; import com.lowagie.text.DocumentException; import com.lowagie.text.Image; import com.lowagie.text.pdf.PdfContentByte; import com.lowagie.text.pdf.PdfReader; import com.lowagie.text.pdf.PdfStamper; public class PdfGenerator{ public static final float LLX1 = 50; public static final float LLY1 = 50; public static final float W1 = 100; public static final float H1 = 100; public static final float LLX2 = 200; public static final float LLY2 = 50; public static final float W2 = 100; public static final float H2 = 100; public static final float LLX3 = 350; public static final float LLY3 = 50; public static final float W3 = 100; public static final float H3 = 100; public static String addSignsToPdf(String path, String input, String output, String imm1, String imm2, String imm3) { String result = null; try { System.out.println("PDF Editing: START..."); System.out.println("Files path: " + path); System.out.println("Input file: " + input); PdfReader reader = new PdfReader(path + input); System.out.println("Output file: " + output); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(path + output)); PdfContentByte canvas = stamper.getOverContent(1); canvas.saveState(); canvas.setRGBColorFill(0xFF, 0xFF, 0xFF); canvas.rectangle(LLX1, LLY1, W1, H1); canvas.rectangle(LLX2, LLY2, W2, H2); canvas.rectangle(LLX3, LLY3, W3, H3); canvas.fill(); canvas.restoreState(); System.out.println("Image 1: " + imm1); System.out.println("Image 2: " + imm2); System.out.println("Image 3: " + imm3); putImage(canvas, Image.getInstance(path + imm1), "IMMAGINE 1", LLX1, LLY1, W1, H1); putImage(canvas, Image.getInstance(path + imm2), "IMMAGINE 2", LLX2, LLY2, W2, H2); putImage(canvas, Image.getInstance(path + imm3), "IMMAGINE 3", LLX3, LLY3, W3, H3); stamper.close(); result="OK"; System.out.println("PDF Editing: TERMINATED."); sendStaffMailWithAttachment(path + output); } catch (IOException e) { result="ERROR"; for(int i=0; i<e.getStackTrace().length;i++){ result += "\n\t\t\t" + e.getStackTrace()[i]; } return result; } catch (DocumentException e) { result="ERROR"; for(int i=0; i<e.getStackTrace().length;i++){ result += "\n\t\t\t" + e.getStackTrace()[i]; } return result; } catch (IllegalArgumentException e) { result="ERROR"; for(int i=0; i<e.getStackTrace().length;i++){ result += "\n\t\t\t" + e.getStackTrace()[i]; } return result; } return result; } private static void putImage(PdfContentByte canvas, Image img, String url, float llx, float lly, float w, float h) throws DocumentException { img.scaleToFit(w, h); float offsetX = w / 2f; float offsetY = h / 2f; img.setAbsolutePosition(llx + offsetX, lly + offsetY); img.setAnnotation(new Annotation(0, 0, 0, 0, url)); canvas.addImage(img); } };
      
      





「コンパイル」は、このコードをクラスにコンパイルするよう指示します。 このオプションに加えて、既存の* .classファイルを使用できます



Javaクラスを使用して関数を作成する



これで、Javaクラスに基づいて関数を作成できます。 とても簡単です:

 create or replace function createPdf( files_path in VARCHAR2, input_file in VARCHAR2, output_file in VARCHAR2, picture1 in VARCHAR2, picture2 in VARCHAR2, picture3 in VARCHAR2) return VARCHAR2 as language java name 'PdfGenerator.addSignsToPdf(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) return java.lang.String'; /
      
      





ここでは、入力パラメーターと戻り値のタイプを示します。



ディレクトリアクセス設定



ソースファイルと生成されたファイルはDBMSサーバーに保存されるため、Oracleにディレクトリを作成し、それに権限を付与する必要があります。



 create directory PDFDIR as '/home/oracle/PDF' ; commit; grant ALL on directory PDFDIR to PUBLIC; exec dbms_java.grant_permission('SchemaUser','java.util.PropertyPermission','*','read,write'); exec dbms_java.grant_permission('SchemaUser','java.net.SocketPermission','*','connect, resolve'); exec dbms_java.grant_permission('SchemaUser', 'SYS:java.io.FilePermission', '/home/oracle/PDF/*', 'read,write'); commit; /
      
      







機能例



これで、この関数を使用できます。

 select createPdf('/home/oracle/PDF/', 'INPUT.PDF', 'OUTPUT.PDF', 'picture1.jpg', 'picture2.jpg', 'picture3.jpg') from dual;
      
      







この例が誰かに役立つことを願っています。 厳密に判断しないでください、これはハブに関する私の最初の投稿です



皆さんの成功を祈っています! ご清聴ありがとうございました!




All Articles