рд╕рднреА рдХреЛ рд╢реБрдн рджрд┐рди!
рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореБрдЭреЗ рдУрд░реЗрдХрд▓ рдбреАрдмреАрдПрдордПрд╕ (рдЬрд╛рд╡рд╛ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛) рдореЗрдВ рдЬрд╛рд╡рд╛ рднрд╛рд╖рд╛ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди (рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд╛рд░реНрдпрд╡рд┐рдзрд┐рдпрд╛рдБ) рдмрдирд╛рдиреЗ рдХрд╛ рдЕрдиреБрднрд╡ рдерд╛ред рдореИрдВ рдкреАрдбреАрдПрдл рдлрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рдЪрд░рдгреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред
рдпрд╣рд╛рдБ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП:
- DBMS Oracle (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдВрд╕реНрдХрд░рдг 10)
- iText рд▓рд╛рдЗрдмреНрд░реЗрд░реА (рд╕рдВрд╕реНрдХрд░рдг 1.4.8)
- рдЬрд╛рд╡рд╛ рдХреЛрдб рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ
рдпрд╣ рдЬрд╛рдирдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐, рдУрд░реЗрдХрд▓ рдбреАрдмреАрдПрдордПрд╕ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЬреЗрд╡реАрдПрдо (рдЬрд╛рд╡рд╛ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди) рдХрд╛ рдПрдХ рдЕрд▓рдЧ рд╕рдВрд╕реНрдХрд░рдг рдЗрд╕рдХреЗ рд╕рд╛рде (рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде) рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред DBMS рдХреЗ 10 рд╡реЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, JVM 1.4 рд╕реНрдерд╛рдкрд┐рдд рд╣реИред рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЬрд╛рд╡рд╛ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╕рдордп, рдЖрдкрдХреЛ рднрд╛рд╖рд╛ рдХреЗ рдПрдХ рд╣реА рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
DBMS рдореЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓реЛрдб рд╣реЛ рд░рд╣реА рд╣реИ
рдЬрд╛рд╡рд╛ рдХреЛрдб рдореМрдЬреВрджрд╛ iText рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреНрд▓рд╛рд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рдкрд░ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рд╣рдореЗрдВ рдкрд╣рд▓реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдЙрдк рдореЗрдВ рд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд▓реЛрдбрдЬрд╡рд╛ рдХрдорд╛рдВрдб рд╣рдореЗрдВ рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЬрд╛рд╡рд╛ рд╕рдВрд╕реНрдХрд░рдг 1.4 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрд╡рдпрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ itext 1.4.8 рдХреЛ рдЪреБрдирд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рдХреЗ рд╕рд╛рде рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдпрд╣рд╛рдБ iText рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд▓реЛрдбрд┐рдВрдЧ рдЕрдиреБрдХреНрд░рдо рд╣реИ:
- loadjava -resolve -verbose -thin -user рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ / рдкрд╛рд╕рд╡рд░реНрдб @ ip-addres: port: TNS_NAME bcprov-jdk14-149.jar
- loadjava -resolve -verbose -thin -user рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ / рдкрд╛рд╕рд╡рд░реНрдб @ ip-addres: port: TNS_NAME bcpkix-jdk14-149.jar
- loadjava -resolve -verbose -thin -user рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ / рдкрд╛рд╕рд╡рд░реНрдб @ ip-addres: port: TNS_NAME bcmail-jdk14-149.jar
- loadjava -resolve -verbose -thin -user рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ / рдкрд╛рд╕рд╡рд░реНрдб @ ip-addres: port: TNS_NAME itext-1.4.8.jar
рдпрд╣ рджреВрд░ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдФрд░ рд╕рд░реНрд╡рд░ рдХрдиреЗрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдЗрдВрдЧрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рд╣рдорд╛рд░реЗ рдЬрд╛рд╡рд╛ рдХреЛрдб рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ
рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ 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 рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдПрдХ рдЬрд╛рд╡рд╛ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдлрдВрдХреНрд╢рди рдмрдирд╛рдирд╛
рдЕрдм рд╣рдо рдЕрдкрдиреЗ рдЬрд╛рд╡рд╛ рдХреНрд▓рд╛рд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдлрдВрдХреНрд╢рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ:
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
рдлрдВрдХреНрд╢рди рдХрд╛ рдЙрджрд╛рд╣рд░рдг
рдЕрдм рд╣рдо рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
select createPdf('/home/oracle/PDF/', 'INPUT.PDF', 'OUTPUT.PDF', 'picture1.jpg', 'picture2.jpg', 'picture3.jpg') from dual;
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред рдХрдбрд╝рд╛рдИ рд╕реЗ рдиреНрдпрд╛рдп рди рдХрд░реЗрдВ, рд╣рдм рдкрд░ рдпрд╣ рдореЗрд░реА рдкрд╣рд▓реА рдкреЛрд╕реНрдЯ рд╣реИ
рдореИрдВ рдЖрдк рд╕рднреА рдХреА рд╕рдлрд▓рддрд╛ рдХреА рдХрд╛рдордирд╛ рдХрд░рддрд╛ рд╣реВрдБ! рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!