From 1b4308e6967ebfc2e4fc49b8080247bf9404cd46 Mon Sep 17 00:00:00 2001 From: Heng Sin Low Date: Thu, 15 Feb 2007 08:06:33 +0000 Subject: [PATCH] * [ 1658530 ] Remove jPDF dependency --- print/.classpath | 3 +- print/build.xml | 3 +- print/src/org/adempiere/pdf/Document.java | 112 ++++ .../pdf/viewer/22x22/document-print.png | Bin 0 -> 972 bytes .../pdf/viewer/22x22/document-save.png | Bin 0 -> 1150 bytes .../adempiere/pdf/viewer/22x22/go-first.png | Bin 0 -> 1013 bytes .../adempiere/pdf/viewer/22x22/go-last.png | Bin 0 -> 1043 bytes .../adempiere/pdf/viewer/22x22/go-next.png | Bin 0 -> 688 bytes .../pdf/viewer/22x22/go-previous.png | Bin 0 -> 689 bytes .../pdf/viewer/22x22/rotate-cclock.png | Bin 0 -> 908 bytes .../pdf/viewer/22x22/rotate-clock.png | Bin 0 -> 901 bytes .../org/adempiere/pdf/viewer/22x22/rotate.png | Bin 0 -> 908 bytes .../pdf/viewer/22x22/system-search.png | Bin 0 -> 1267 bytes .../adempiere/pdf/viewer/22x22/zoom-in.png | Bin 0 -> 1142 bytes .../adempiere/pdf/viewer/22x22/zoom-out.png | Bin 0 -> 1137 bytes .../pdf/viewer/48x48/document-print.png | Bin 0 -> 2296 bytes .../pdf/viewer/48x48/document-save.png | Bin 0 -> 3339 bytes .../adempiere/pdf/viewer/48x48/go-first.png | Bin 0 -> 2164 bytes .../adempiere/pdf/viewer/48x48/go-last.png | Bin 0 -> 2161 bytes .../adempiere/pdf/viewer/48x48/go-next.png | Bin 0 -> 2028 bytes .../pdf/viewer/48x48/go-previous.png | Bin 0 -> 2021 bytes .../pdf/viewer/48x48/system-search.png | Bin 0 -> 3991 bytes .../adempiere/pdf/viewer/PDFViewerBean.java | 551 ++++++++++++++++++ .../src/org/compiere/print/ArchiveEngine.java | 7 +- .../src/org/compiere/print/ReportEngine.java | 2 +- 25 files changed, 671 insertions(+), 7 deletions(-) create mode 100644 print/src/org/adempiere/pdf/Document.java create mode 100644 print/src/org/adempiere/pdf/viewer/22x22/document-print.png create mode 100644 print/src/org/adempiere/pdf/viewer/22x22/document-save.png create mode 100644 print/src/org/adempiere/pdf/viewer/22x22/go-first.png create mode 100644 print/src/org/adempiere/pdf/viewer/22x22/go-last.png create mode 100644 print/src/org/adempiere/pdf/viewer/22x22/go-next.png create mode 100644 print/src/org/adempiere/pdf/viewer/22x22/go-previous.png create mode 100644 print/src/org/adempiere/pdf/viewer/22x22/rotate-cclock.png create mode 100644 print/src/org/adempiere/pdf/viewer/22x22/rotate-clock.png create mode 100644 print/src/org/adempiere/pdf/viewer/22x22/rotate.png create mode 100644 print/src/org/adempiere/pdf/viewer/22x22/system-search.png create mode 100644 print/src/org/adempiere/pdf/viewer/22x22/zoom-in.png create mode 100644 print/src/org/adempiere/pdf/viewer/22x22/zoom-out.png create mode 100644 print/src/org/adempiere/pdf/viewer/48x48/document-print.png create mode 100644 print/src/org/adempiere/pdf/viewer/48x48/document-save.png create mode 100644 print/src/org/adempiere/pdf/viewer/48x48/go-first.png create mode 100644 print/src/org/adempiere/pdf/viewer/48x48/go-last.png create mode 100644 print/src/org/adempiere/pdf/viewer/48x48/go-next.png create mode 100644 print/src/org/adempiere/pdf/viewer/48x48/go-previous.png create mode 100644 print/src/org/adempiere/pdf/viewer/48x48/system-search.png create mode 100644 print/src/org/adempiere/pdf/viewer/PDFViewerBean.java diff --git a/print/.classpath b/print/.classpath index 6f092c0ec6..a7ea1544ca 100644 --- a/print/.classpath +++ b/print/.classpath @@ -7,6 +7,7 @@ - + + diff --git a/print/build.xml b/print/build.xml index 43d603c6c5..40abbee739 100644 --- a/print/build.xml +++ b/print/build.xml @@ -25,9 +25,10 @@ - + + diff --git a/print/src/org/adempiere/pdf/Document.java b/print/src/org/adempiere/pdf/Document.java new file mode 100644 index 0000000000..35116e323e --- /dev/null +++ b/print/src/org/adempiere/pdf/Document.java @@ -0,0 +1,112 @@ +/****************************************************************************** + * Product: Adempiere ERP & CRM Smart Business Solution * + * Copyright (C) 1999-2006 Adempiere, Inc. All Rights Reserved. * + * This program is free software; you can redistribute it and/or modify it * + * under the terms version 2 of the GNU General Public License as published * + * by the Free Software Foundation. This program is distributed in the hope * + * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied * + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * + * See the GNU General Public License for more details. * + * You should have received a copy of the GNU General Public License along * + * with this program; if not, write to the Free Software Foundation, Inc., * + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * + *****************************************************************************/ +package org.adempiere.pdf; + +import java.awt.Graphics2D; +import java.awt.print.PageFormat; +import java.awt.print.Pageable; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.OutputStream; + +import org.adempiere.pdf.viewer.PDFViewerBean; + +import com.lowagie.text.FontFactory; +import com.lowagie.text.Rectangle; +import com.lowagie.text.pdf.DefaultFontMapper; +import com.lowagie.text.pdf.PdfContentByte; +import com.lowagie.text.pdf.PdfTemplate; +import com.lowagie.text.pdf.PdfWriter; + +/** + * Generate PDF document using iText + * @author Low Heng Sin + * + */ +public class Document { + + private static void writePDF(Pageable pageable, OutputStream output) + { + try { + final PageFormat pf = pageable.getPageFormat(0); + + final com.lowagie.text.Document document = + new com.lowagie.text.Document(new Rectangle( + (int) pf.getWidth(), (int) pf.getHeight())); + final PdfWriter writer = PdfWriter.getInstance( + document, output); + writer.setPdfVersion(PdfWriter.VERSION_1_2); + document.open(); + final DefaultFontMapper mapper = new DefaultFontMapper(); + FontFactory.registerDirectories(); + final float w = (float) pf.getWidth(); + final float h = (float) pf.getHeight(); + final PdfContentByte cb = writer.getDirectContent(); + for (int page = 0; page < pageable.getNumberOfPages(); page++) { + if (page != 0) { + document.newPage(); + } + + final PdfTemplate tp = cb.createTemplate(w, h); + final Graphics2D g2 = tp.createGraphics(w, h, mapper); + tp.setWidth(w); + tp.setHeight(h); + pageable.getPrintable(page).print(g2, pf, page); + g2.dispose(); + cb.addTemplate(tp, 0, 0); + } + document.close(); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static File getPDFAsFile(String filename, Pageable pageable) { + final File result = new File(filename); + + try { + writePDF(pageable, new FileOutputStream(result)); + } catch (Exception e) { + e.printStackTrace(); + } + + return result; + } + + public static byte[] getPDFAsArray(Pageable pageable) { + try { + ByteArrayOutputStream output = new ByteArrayOutputStream(10240); + writePDF(pageable, output); + return output.toByteArray(); + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } + + public static PDFViewerBean getViewer() { + return new PDFViewerBean(); + } + + public static boolean isValid(Pageable layout) { + return true; + } + + public static boolean isLicensed() { + return true; + } +} \ No newline at end of file diff --git a/print/src/org/adempiere/pdf/viewer/22x22/document-print.png b/print/src/org/adempiere/pdf/viewer/22x22/document-print.png new file mode 100644 index 0000000000000000000000000000000000000000..fdfe1c1c488aebff64e32b9dfa67236809aaa206 GIT binary patch literal 972 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 literal 0 HcmV?d00001 diff --git a/print/src/org/adempiere/pdf/viewer/22x22/go-last.png b/print/src/org/adempiere/pdf/viewer/22x22/go-last.png new file mode 100644 index 0000000000000000000000000000000000000000..67884eacd6dea1736363f7cb76efef1141b244c9 GIT binary patch literal 1043 zcmV+u1nm2XP)b zm0gHcRTze!Z>_!0pMS^3X~rppFtZ?UEQ~q@c2^gfph6IMQD_lC1m_t2Ty!A>IY}|m zMM`O2qz0x^X*L#!BW9>Y5|TE9BIc-PYI2UV=j^@K*Twmn-yX1k*Jqtr2N6oCzS?VpJ8cp6=hbHJ|;j zjAvx>yu5N_Zt3Dj)`;Oqp%~7YvT@8t2mlJjFhIDB(mKgzDjg+0&h!ra%$nsdWm@uW z4}SOKm%kK>;p07>aUX!9HPv_&9R&k{6?@y;>$YITV#Fe1Fk%47BtE8Gxy+5IOkv3r zVN1Ss!LCDFPZf&clRcgB@tRnV_nyY~ZRRB+IG@mSVGn^xVZ>s^fJn_Hj+mSL+JBgZ zcRV2LSC{hJ_jPp_isAFtSk!o&CaC(!89SdalH4SUhlt`KhT|ckxWY(Mp{m0q3^T$F ze!G5{Fb6L_^V*D-eCsDQVIE9^S2tcUfYXF(GECyDBtFKg!-yr9nMu}UYbr#+IL-|o zrG3UCo?HD&?%?Si-itF{s;Kz!U{&RxsLc6mCvloI7ZZUXZAhgp*<6lnI!ijt5QHg4 zXh#gpoi$H9RU*AX;zuS&5xZy{6hMq%tRNN~5fOt7ag~nQiD3^aE|qpY@)$t1j zLJ$bw^u13moWsK%tGIBfR}Xx9pi(~P)}7t!k3CijHY30&w+W6tzW?Jd-o3r{dUT{R zL3RC_VzwoFC(AlkaN^X__@|R6uJ?WKUikC0_5qoRuAAUv?Y02%8i|Z8^>{!AD+BEB-ZgUNV)@|d zZLUil)jF`zTL)`>RtKx9iiiUokN_4i2$6G1u=}fR(bc|6=b4>;e_cSMFRmA&hNl;o zaLEM4sv3*P*nEBTw+{G3k6k`r`RMFEe`-wrz7BUl?7S;~@ae{U^Gl&$Cf<1>Vt`aV zzp$>p=AZ^{*l)m-{9WSP?ib&3k7*o&coKNb0#b*K1)B*_2RNMq@-LP~vU$=UmN)@@%Y literal 0 HcmV?d00001 diff --git a/print/src/org/adempiere/pdf/viewer/22x22/go-next.png b/print/src/org/adempiere/pdf/viewer/22x22/go-next.png new file mode 100644 index 0000000000000000000000000000000000000000..cf93647658d6298e78aa95ebb6f49a0aa5380e86 GIT binary patch literal 688 zcmV;h0#E&kP)8|#$y=2{GaSvX!lFCe`tAADVukM0>&19IMjm`1UdEeg3hT3C> zt>DSy7tOWR_1}{G74XvH?TMMm<<_w9p}|G*6CaA|{LFP723{GYWv@A3U|S7r>(tE7 zEVH({4x2k+kmi-%56_;y1Oy`qVhkb%L1<=2I9H%SvGsi>YfG2H`@mn1-XnmRqzxAV z1Q7@!pg{?$9M|_5Pv-{0`!x36Qu+etETzkFzQAjN)Am!<;hJFh(#*8!iGq6nIylt$-@152Wb=%S-op z^LB^rt*mkpxO%RS2u6qr1QRQVb^{Rs0=3#Si__=O*~ln>Q0bZ(3Bby=JBVnMLXe~l zZ{~-bWrwH=B7xf20&^4hI?$C^q>Fv?eNyc0y}s~*Jb3t=+9M;V=*^zc z&@Dv({PtEh1&nri6{v1(j=yXFeF9;m8+r>UW2GI}UX5ElV^m{c36PG?K^Wo6)T0jc zMqF=2&jCB=RM@V})wrGjJ0icLNvzyC-w_? WL?~}8zZg&e0000FFIBbRtg(`_&p!< z-pk*hrDB=hpo54*MJW`@6j!z}46}fRKrjy&uU@~n0M1+mbq-F>KB1C9R8dg|QHTDZ z0~lsTFpmX~U1voKO~$8;q6nuB(+P^hL_h?LDKvx`e1cr^;h9C~&+ZYyJWex!191=( zQ3W&Nq(?FuOy_Qne71y$UO&8Oc#5cy&Ezp0$vDRQ7$0KBlObjh0$4D7fZ&aMwsiHn zwVF}p;IK{Q)+3Aw-ToKOdY>5#zcZSg;Vnj;piXcOR0UNKg^5qD1PhRBHKWag!#0(j z$E>Yypvnve&dD@&3KazvP`Ti5ZqW*z8cL?sjBe9tf2&pNoVxeKqZ34?-4$2&D6Q-f zf?*zfFoHMCl+N*2W()x=1>3@+->1<&s#WWp4?i%PoPc=Ni@Usg`|?JAUH~SubilaP zj2_Tvf2>vO{OG=!`X#>$KLkdzOy<(3P0sI03=C(27#Oyi(Y=GiHaqK2z_JwbTd8&c zM05INuF$2IPy%#;9?%E+t!A{F!iUi?)%E7!=`*>>Mekp=l_jg XNLd;Hp6zbW00000NkvXXu0mjfMnXET literal 0 HcmV?d00001 diff --git a/print/src/org/adempiere/pdf/viewer/22x22/rotate-cclock.png b/print/src/org/adempiere/pdf/viewer/22x22/rotate-cclock.png new file mode 100644 index 0000000000000000000000000000000000000000..6ec64656560ee6e3ec1f9a927d3d3922655996af GIT binary patch literal 908 zcmV;719SX|P)qHh2I010qNS#tmY3ljhU3ljkVnw%H_000McNliru)e966C@Ca|DP#Zu03CEi zSad^gZEa<4bO1wgWnpw>WFU8GbZ8({Xk{QrNlj4iWF>9@00QtyL_t(I%iWbvZyQw< z#ee5{?6E@;NKJ|=YO1KL5MqOnD}hj#^@^{MW%7xVrPq9cc9|6-f(n5^s)T4n(=@7@ zgeKJWpYhzoV#ZEMQ@TKGxSM(JN%wcpJG$=<{70el2iG58@q8Vl_;~Ne;V=Ih{K4)@ zu3TdP&-_Hvd!YM-R|#+c21@Tb*p?YQ{OIY<8^Lq6lV6Kb^ID^kI;rIo?q3FlQ5>hSgC@_Kp288tiB8I3*#{`GX!gA9w$0VddH&>C3u3EF!G;1rXwP7N_uJtH4Ne13&22AQ{)eoaRc)eLHBPn;-w-kxvgN6%#c8taIk%W z6$}wqY3h4&qXIkwf(@Cic^_9d@H(MQ8b)oQtePPNgA0dH_s8XB2T%PRJgH_uOaZf_ zVBkvqnoN((C{HLE>L-2BKi+ulJic~s`40AN59_8cz*FOCZ9~JTAxMJEq?WL`d(c1b z|I>8i(Wi%fLR;h_EeW+j?RvcgYNu-70p-G#(*7I&AoFqHh2I010qNS#tmY3ljhU3ljkVnw%H_000McNliru)e966DFk>!L{I<#03CEi zSad^gZEa<4bO1wgWnpw>WFU8GbZ8({Xk{QrNlj4iWF>9@00QYrL_t(I%iWaCYg}a% zho9e>x$}`!6XOJ#+9;_X6a-y}1Oy?=WaYmw%k(cwmiaG|WkH1o1)++&5|UP=F|9}& zCU<7;`MJ0m^VJp+-1u(pdoK4r?>P_WJ@6kb{o5ax9`-(oZu~rr4{jdmAA#TdWpTw~ zpkS4TmJuj`07CoVJGP&wsdoTex^uYvd-+=M(u3Y6p$!a-O;#X`Bq%^Fp*fMm9E~4W zRr{l&do}CkHRz9vJGR$2F`gLGFsdJtp#{+mG$*1Pt>{#lWlo|Uex-_A-}g2NHat9o zmc|o-*pt{sK!X7tzKD6LG2f6AvdpZWR%Pq`!Us2xW-o!?z5n)#r28%tkHACY1cmMr zY$1>!D;L0spek-R!lgwUC^QM{xx>9jw~zB&MKZv~r{GiL2@qN**#)Bz1{4~*vN7Yy zlWe(isv<0!t&fX&!Qs-w-dAw}yqc%RV{i#1cS-L$4HiyA0vL>_X#2UJQ8ILisKCRN zLURP&iy1Gw1WJS1Gi)hqS;nYw22Bxf(ghkG`BS7jaYNtI;Vs504sIQNceyJPT!F`c z*(Rt<2bA@m5DMcHol2m#egYnNDJ#_*pXPvkzpc8*FLLSlUnt3qk!lL%>vTyrS@R7SRQDggSv{AZBzH*L&K6)Yet#YX^OQXJJKR;9wPLS>frBN76pwdj#9Re))8d b|Hb+X;oN>_N(v}000000NkvXXu0mjf&bfzO literal 0 HcmV?d00001 diff --git a/print/src/org/adempiere/pdf/viewer/22x22/rotate.png b/print/src/org/adempiere/pdf/viewer/22x22/rotate.png new file mode 100644 index 0000000000000000000000000000000000000000..138b44d4280c0a60cd12972e8a0caa591c506414 GIT binary patch literal 908 zcmV;719SX|P)qHh2I010qNS#tmY3ljhU3ljkVnw%H_000McNliru)e966Cp%E4MB@Me03CEi zSad^gZEa<4bO1wgWnpw>WFU8GbZ8({Xk{QrNlj4iWF>9@00QtyL_t(I%iWbvZyQw< z#ee5{?6E@;NKJ|=YO1KL5MqOnD}hj#^@^{MW%7xVrPq9cc9|6-f(n5^s)T4n(=@7@ zgeKJWpYhzoV#ZEMQ@TKGxSM(JN%wcpJG$=<{70el2iG58@q8Vl_;~Ne;V=Ih{K4)@ zu3TdP&-_Hvd!YM-R|#+c21@Tb*p?YQ{OIY<8^Lq6lV6Kb^ID^kI;rIo?q3FlQ5>hSgC@_Kp288tiB8I3*#{`GX!gA9w$0VddH&>C3u3EF!G;1rXwP7N_uJtH4Ne13&22AQ{)eoaRc)eLHBPn;-w-kxvgN6%#c8taIk%W z6$}wqY3h4&qXIkwf(@Cic^_9d@H(MQ8b)oQtePPNgA0dH_s8XB2T%PRJgH_uOaZf_ zVBkvqnoN((C{HLE>L-2BKi+ulJic~s`40AN59_8cz*FOCZ9~JTAxMJEq?WL`d(c1b z|I>8i(Wi%fLR;h_EeW+j?RvcgYNu-70p-G#(*7I&AoFDTAjLaB+%Yd6 zk9Re0dWW32a4X-d2sw)^O9q9&f$6DKD(jyH%hK8k)4@XrXqmgLZpZeWq5CS1#gvXM zZ*L{-=OWs$Y8TfnsYsPim2XqV^o(lgSHcPH_ukQml79^4H#crI9X#}DCji^Mz&rr# z_~8A3e{S8f8;W4uNXz0IOJ|JuoD#8^IFV9N%AngMQO~IQT3)C5T;51g#?k;w6R@5^5L(>1YOvB}oR)3$97Q zgb-dg4Df=$$1{4`EOH!(pc;(jIYM${>HNs4OOf-0!xTmVUJ!Ty;5foh3Z|6mW>FAD zj0eK z)tk}Mo6*b}#vwuoH^MVSC_{n=+#t-Vj7FZWdZ?5rN=)^7eP{0l<_aEv8SFSYwA%0C zC9AZ^VAKXiI4~wKM$L>+J0&pXa=9|6+x_gyr`%l2;ja_%_*ih#b~||@7@AdG6|kBG zb@pSG@{MS|ZggnSElJXK@B~^e?}~&6wm4m`S60_JAgD3wn(9tmxzf9&a>m1lFZcAO zCIkb(OKV>I?a!V|n^&%cj-)T{!aj$8`Df=ehp= zew*E1qTNo!8y=Za`R(2CJBCp6zCCjW25$c1cDZv7N2$p_*YB7PKRqbSM~N85fJnsmA~@7wb_fVG2zgNq3v5@Re| zQBiRkz|p3__HP;+8}|~9y|-cgMs#&`fl_K*xY(VE#bQ;*emH*Xp5UU7xIo`gTvv-0^o|D zC>9EgtG+{hku3}W1z?Qlf`#*^RXtvHM3!Z*5*u6A*4B23OfdM#1VFyX=W+0O>V*Py d-2eYI{sF*Z|Ipo-va0|9002ovPDHLkV1mNbUMBzm literal 0 HcmV?d00001 diff --git a/print/src/org/adempiere/pdf/viewer/22x22/zoom-in.png b/print/src/org/adempiere/pdf/viewer/22x22/zoom-in.png new file mode 100644 index 0000000000000000000000000000000000000000..3518ce5815470e3047828f4683b14719f74436e8 GIT binary patch literal 1142 zcmV-+1d02JP)3dVFqTP^SU$lagHB_W(u?rUCBxA z&BJSoVi5p(KK`iF zS5v!hDk_;%Nkx9QVP~i`-%d7*ATtKWI1GnfHc}bmjz7x0R+iE|`8KModM0socw}@V zV&T5p#SUMMPyS_EH}>o*`bQE;*9@kmH8a6DPXati;K^uQpCh6x<6+Qqb$e{#aH#9C zR!EZM5=0p`CC9q0z@}$(#sQd;C>R`EXAJ3JG#!Y zq(ckA**0cqMT}UXp4Pm<>8UQO&Dz^k<$@MpWLv({+qakRzxMOh(Osd?T>ERSWk24Q zs%D~krN)SI6)PWXKTH5{Axls;yde*NPwY4E^Bi7v%=;;os`CJDgN|aGVL`o^m+3lsnXV3J%wG}X5JbAyT z`^juB_e0k+U1C{TIcmDeOa@fokRX69m0W!znM}P@T53Of_DuivEh#?zaqoddA~A9N z?f3A??{~FXh0j}MSu!c`1elRdr*r z0{*7vWAh4c&Szxd)uX#3KBt6MkqDFmr3?(aBp6xMm|0M0jfG})kJF0v4UeUN8XKQj z4@~}18|(Hr`Gp&Ibfa~z>o(7!t{GIzYi61YIW+9?xVr9BwWXMZC2XD_@Fb zuQLKsL=xc`L@9$L2jB)|Hf1IHMD4C}RFt^t_4;mX1SSQKzZ@OAy4>OSaFR_rWHM?8 zh6EVn8KV}4w3H%<`Fy^@>2^QW{#{S1`a{bYp!T`@r2Xmda3g@!op(6OMSqjuQC(ea zUszbU|H`A!mpP|hTY~;|X<_~D)<4kqG5~aiLZQQmC^5!z-<|qa{?Fi|hb4tuVNJxN z#y?DL%L-B`KW;4>8ym&J!NGkVkH-f9d@L4=4-XID8X6i(0RZjn>^xXm<-7d)Yj0vI zl>(>J37__Ta`)0V!Aeq8&msT_h0!9*vJ?me_WOLk7N5`etjpzUx7lnBb#--n3SF&a zWMpJ&^0%o&=f3z1yk0NZ?RIcD9610WSfpGi9I&SPU+Rl&VE{k@z+B7LgDpF2AF2IX zmSwLJUp*EK25;gz*5EoouE@4E@LC#$188CG|Bb%^h%UbB_%Ss}00000NkvXXu0mjf Dl;H?> literal 0 HcmV?d00001 diff --git a/print/src/org/adempiere/pdf/viewer/48x48/document-print.png b/print/src/org/adempiere/pdf/viewer/48x48/document-print.png new file mode 100644 index 0000000000000000000000000000000000000000..30b6348d9a01138527a3a01cf2d8942cb85113d8 GIT binary patch literal 2296 zcmVW=UzJw_TnTE5*i33ghBZ#>F7|Wt}r2O)flu? z+84hHYSKsug&(Yc*w{Kvi$wWDm4&F&G&K}7wEX~7(T%p-mpOC@~pDH;i@yweXDu?(uH#v6Da=q@txGU%L8Y>J9p?sk4Mp_vzKLA-nVaG zJYP(C6F6|-z+1Ym|Bw)(=hERE_{U(C*tB>NUAL+MAKxB@C{VO43gR#CU4kAP(pqZ9 z)al0IoD)jvZ+GwB{fm5XO*@;G?BBn?T9Tx#+qZ8Qr_<{^@(E_^Nj$xJAKzj97j&+!rbNSgcqJ!H0^i?4<39Kz@sCes;bZH_3E0YVPs?^tInxUhH?3B z1Y0+*#HIc*BvR=}iNzJ%9-hFK^~>vq-PF%n%8>>-UVJv8UeSNVoiqAsz z_4TN)uZJd8;!o$suxb4=Jcy+bnM~!h85&JM)(AE}y#zfUJVbd#&6ffX6hMFw0zwEF zV-N%ZLqkKjdb1y|9l3&y>zbkH6ycaWqn}VXj)32XmSywt%fpv&w?70y5I`vfrG?LD z!4`rbfH8(Swe>jk{wP*2n-8zgi{VHjFMAH)UO0}&>MBt?w+e^PPJj>!#uykYJfe#t zKnTUJ-ue`?s{^R531TRc058CYu5*MQ#_{#WI*cWBym{)jy$XaBRvZ*WzzU%^PJ9N1 zda!KqJUkqiAy5J)5D0YU!9{^WVic4Rj83NT)Dw$v{>~WQ=^HBT3Rp99)=)Zz}>rd?fd_}Hi~yIN8uF#aCaCvvrCys;PW#4`lWAU<)W%7dV~;gUdV1L z;vf?Q0RYh0*l6FoJu1R~D~`sRa%lSW0GL4V5i>Td<;y9$p0m`-?k`_O=Q&`BHCvQY zctnbM!LphC0AQ5Z>DVcp^U@KpoKH+lxKf=g%MdA0HOoDtHgJaxqkyWaNTpIab@G+G z3Fx{GRaFsl#@VfYwPAUYu0RN zXjn*{peUtKRTYDSgIPh8LIgpuCng?`J#$-|z13K56Mqp}%X_uA7~m zolT6foF}5L>vpc@oZHPQg`TFF!Z~-PSf9^_L?VH`d-vY&>gt*YqcTsgKu1SMSt^xk zkR%D5^PEfWe&|SpEe3ZkvSnrNLs60>Fvcp{+uLipy1Iq|2Z71SNhuHr=!&8s9DV@K z0YU&Kh<3pRZqE9Y!MP3I24m@PZrd9D7GZAsvaQXJ(Pz2UG!2PF9J+4!X>MKuuh+|? z(WqVax;C+Z~)D24-W)`8#cvrQg0z_a_qxjE;uE zIftUSUlvRu;H*W4haaHK>%&NR1S?mr!i^g@;PH4}4zf!oxMIYxymI9#R8@r_2vAkk z6>>QVghGP|1}h;5BKrFJzyu*{^;l}TapNWyESPT+P{1=7xI)MxKql32;ozEry3DrToXbRfc#aK<^7p>^C@z?00IEY9nEL9GP8LBc+4ikm>2=+B*6h_ zW>Wy90LTE601{@4JK7|GF#u6hH>VU*r7;t%-vQnUT*?41IQ(+}dKMB+B1r%-0OKZ! zybh#d%S>Vdl}r*=6CL1b1_6tNYJ!$w%zV-$q@sw&hf>tZB;(r>SB(E(0Q?6@#^~dc SQ9#WA0000<~D$+3`ZV@nP;!b)slZIEK5 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 literal 0 HcmV?d00001 diff --git a/print/src/org/adempiere/pdf/viewer/48x48/go-last.png b/print/src/org/adempiere/pdf/viewer/48x48/go-last.png new file mode 100644 index 0000000000000000000000000000000000000000..e9f976bc544343d0af9b72fab34158a963e8a7d8 GIT binary patch literal 2161 zcmV-%2#)uOP)&f=gxz%%d;$RXMh584YHNmK#NhhZso}tncCGYR+(=(PSg;xbfrvnaq1nUA-!BXA-x2~9 ziAp>-`=zQsZC~?}EZuT%_PTy*-*4dcr7t2v)6w-{(a`K;#<&Fq_ti~7Tx?)PnDg*= ztL98y_>Ib1ch}^_7~GeBBot9`HQjUqk2j!(0MFAo9KZAd9{Ak!iiKZUKC!BDz&|H1 zsTkL{UIPggBXQFSv^sEu;TUPJ14mo-VC3!f&U5pAGP3Try5^}%+!^KdXu$&liB1WC zTO=WY2n$2A51%tQaj_Xl`1JhTAKx~5=-9WWHYA=eqb~>qEF2_q?EbAGAOaB$Ej~2+ zVDWLf^)N1{PGjM$It}27-cS&qR&E!f0v#7@fImnES=2s)y_!{;eGc-yV1W3;xV~Kgad%!AEAm{FOxj z0DidO*U;<(00;yk0!sjj%u+~^HBqw|*IDGy+OrG$is=;-`C%w6I z{oyG~>CxRQvL}m;O$cVddR#*#5m4k{_kT7*L4k;%NC7Y{Q2}^sHsLJzsE#{xZ8&(g z33rcr$o=-0zhB?j^zy#Ri}kEMzw~!>=|==C8UjNij;#~|A`E6f(6nf14)pD_2VLO4 zadRF%qv5j;W^HmpBkQMe=-hjt3ZI_-`U|zg2Hn1OT0`RLVu7%;&0qjrJ^==Y;Fv9_ zJQ<(;fRuU0o`;|%{~nvf4ienM@k`BUNqvMTXD+U;AMu&hQySdW^XDT>F1v+b(O}kL zNwrpT70}{?pul3JBS9|YDF8a3OMOXVF*Q8^tiTqyX)Otp8ul%7ED!;hI80<_n-e;`cBSJinzL_X z>ckmUgKLLPdw2h)L+~Zcf#AKaGf(zTGusA54v18j ztwebeGHU=#s}uoH0TF{<0DvT1D{?xGl%GU8*N&{83gp8AWjEHv6o>!;!Pi;%l7*+!$Z-Z)or-J& zf*esWvqJ(g^Tm(?5+eqV#e;Xu#LiTzOLUJ)|B}=F?*M`nq8-M_a<0v?e1LY_{ zF`xuW1s_1nB!L{0;AST*0tf-j0TG5knfojO$xjcvALE8k#yfjnPoKMRt~yR2ZsmU> zqu|2|6d+1Nh=V*(6cA7m0wy6usDJ>-vL}}ga*!utW&zQP1ORLbh)s0!ztXM6q|x(m;qn=5+x1S$%j#$M{z|`E zYCyXqK;~Wn0Sa;!W)EkM^JJ7V5st_RVk;BC0w@UBEPaD3N8*7|vvKJ7Uf#R!gO2o7 z%sa47@98D5y%LCm4++#%)P?eJ96-4NXvfXVLpi3rIst){Hrsp&N+y`V2uO_j#N8M_ zWCphF{fl?v#IcsEN7bBTo4r%kpKLv%ubJ^|rR?@gt)2+j-HeJjUjE}xOX;h? zmVNIocKgyBM1pgKtxcfsxV>D*U*v7pz*B@nPf|D&AxSdZ3L`s8TlZVO(065 zxAOv`p$i-!*tR$>K?JB)b@=?C**JCPglyUJw@m9vfBDfjcw33%l}#Z24N`aKaStL# z&;Z1i+CdeganHc7qWRzset&0k^4#Bf(dixhFBEFMr}4@nPz;oc9NXz-0NNbu=(|Ml zZD*qfd=_`rJd7>dH|0J&bmGECfAyZd{2^K*eOZ^-u{|%FfCbzW*eGZV+&-_#LDt^5 zvvLv|H*UzB{rKX6Bd>Z5?U&FI=}!ajBgeW3v9bxE7qG=ZThbZ;k%LMAXzRF&Km2)J zy7fYGQ}bH=Gvq>m(Y7b=GXX)@2*+g=ohgk-`Be^b%#v8UVNK?Gi?`yydfga#uVA)% zAreY){(Z~KA^;R>u_po+yd^-KK|26kIhA|n$ZL9MEC@Z3h?4Qld9Q0wDdj47zqo!Z0qZfe3pz|#G=5vBVgNT)XS>*#q4JN nN?B|*1#V!0>bHLTAK8Ba8h-Gb@`J}#00000NkvXXu0mjfQ)v$p literal 0 HcmV?d00001 diff --git a/print/src/org/adempiere/pdf/viewer/48x48/go-next.png b/print/src/org/adempiere/pdf/viewer/48x48/go-next.png new file mode 100644 index 0000000000000000000000000000000000000000..5fae27b3d2f91c550bc00aa91607140c3d0f9a43 GIT binary patch literal 2028 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 Dr61H~ literal 0 HcmV?d00001 diff --git a/print/src/org/adempiere/pdf/viewer/48x48/system-search.png b/print/src/org/adempiere/pdf/viewer/48x48/system-search.png new file mode 100644 index 0000000000000000000000000000000000000000..dbd8d4e019fb0092b7cb73248f96a9b7c54d36a7 GIT binary patch literal 3991 zcmV;I4`}d-P)lCj;-2~ zWxcG&eM|STdw0+I^$*z^)yQ>X8<@`YH}jiwcIWKw_p|4>=bYbJ;Q#H{Yjm|24h{~! zPY7`jGryOJIsn7~tT1zyh)y!|4;;riIxsL$zkYIm(cTfj!Gi~zG)?=guImrneDlp6 zy}iANMxzJ>0?>6Gp69`JT@;H&jE#+9Y;0`V_x)#u5JQhX`snDd4PankAZ*+ApT%Oa zzqsqJyMk?PZSXt~l}ZJk=RrydDJ3*bgRbkaEDN@6gNQIQGlSvbVU$XxZ!z=d4jecz z{VN3+92~q+*Y)r2*|XA#C#d~l{zY}L_9o)b~8^cMlvm@cmy2z~JEEu23lS>;n%x5Vma_nM?-7l^UM; z$$9+ftsFDhi-dzE!_exQCOpqmX5I75Lb2M=7&W!szmcL3Z*M`!4x+ia8B0q`c;=aB zP^nZtd*Hxbj1lOcvkx;aR+ScDdfWx$Wg!dt1=g+t?Wi>NW#lX5}j= zC0Y5bzG`fqPbA)QVmm&@U)r=EiAx_$fi?|rjwo4xEt-_hCI-e@;!I%zryP1l5=)jnjY z7z{9&8B9vDf@ui7rNIs@l-#Txw&#w#I<@JRu9y}wS0NS_7LwI!b^iJ1pMU*o0mP*z zeBb};UAuOnR4SoZc5&!OvuaCk$H<+xq}rQffyi3JOM*`jDM6$_q!?ggVgLvSG|MtH zEfNY;x;C}E{&(M>s8_315D{*_{dQ=YHZU+SU|tu1p`oE?DfWrT2g4T(j|jdHGKv^8lbJ8J#b? zTzu_J0mWhwO-)Tmr_-rmFu3=+04SyQ_V)H_j^n`fd>s9Gh7(QkH{Y`<*361oDOSE> zB^jPnT$c*2l&CXMmx?_Q>P+wmTnDp9K)q1*3IwWwNdiE!DSrCjUO8W{)oRdn9qsMy zVCH?-1%R3NwYRs!aUA^oTnUM2prUJ<*BlQ-d%L-FF&wGbWyP*i zTnCd2CYJ#h#P#W1bso$$20O&?o05^t)MA+`j*nWchR)7T=(@i5(4j*c4k+&kKnSrT z5{ba~eVm+LK`0a~#)5_+2;?iJq-0Mi)TL5&#q21>j<1xX7>;Ci0IEq=u43ha;nrNW zGPO{hXTTwlqX1VUQ4fa#xv|-0)a!K^hJi>Vl9-;J-f}en`o+q?z<_OrSv7`l{Fj|2@cGo+O8eIJ^p)vgJ^vaC|QUROjUgb-+qn8;`Skgr(fR@{}w zu%$Cg$xObk3!kBUO^~MmDHJ>q`waHaE>-^PrMEIuirEkZ1tEwOYZsoS6OrNj%4!H3 z001c^T-SwCYVK+P);{7-fBMs|>$+3E??cyhysJHma=8{Ikebd^@^vXapV{>lTq)V{ zCD%Nu9O-jK5z4u;J8|UA`NJ>#d~sAsRV5~efjR&WfX56UV5t&!xsMhc3BQe==&J^>O!NMgu^T(PA!9#pZA3Bxe3xVVUFwfg3P z0|%C_8GxCeot&KfqnmEJ33k9h-wf#X0DR^%pQ$;H^UcxGQ3QiQG{-~Ob8AXJGckLY zk}QZ7F%gjJ zut5Y9OcsO)3Wm)ZYyl1s!DPT-z$llUhLdBne|-P@JM8y%H=?1T0oiO8$B!R}>$-n+ zwc>#d@`2&u;mWREyTtPH@~)1K4#eYe+|**=#JOVh^i-xd9I+=XU2|x4>AV`*0s;yG z1YH0oNSF+=z{*<8F87=npZny!x3$JTdPj$7X=y<&m&1!MzKEHb8C0v)LU(ufk58UF zDX$9v0Ni)qeXlGnE$#F??}qmFb~Gm9*tRK16~_zy=x4LrUDs_01nfCoCr<#x3?T$G z5Dcuobt|7Mw~tTGKa?*l@BY-?-NAeMI;pj_6{S)M0MOmtjdVJVQmNFxxVX5ptE=mK zXU?2)-YLLkllp@P4>p>n`O3C!+iu*pZ5v{-7_!+crsnhb*JCqy<#fRh2lZSqU`;{j zS!NW#GOm1?T&X!Xf;qhBeXYj5JK89fjH98U0ZU6u5JF&XZVoTK^b&{&$z&39b8|R) z^ypifrrrJAbI(m(7XScw?6Jo>eBXa|^XARlZ@cX_B$G)nGYW+QR?1bJm?~lX!oE=1 z@evOhXpCCex+#jD)(9ezFyiqzT-U|Y(h{bpr_tTrji3JXrzjK($mjD=N};v271?YS z!^6W1p6A^&JUsliQ_L%FY<>C5Uk)jy{wW@hf9#f9Zb4^fC!*0PEXzWzR)goQt}2yM zYddqMX~MEBRI62#N+nEAPU6_HV@M#x6#P$-0IwTfIW2gh;H-rkPo za->?T)jodY$dT{89e^t)5yQj7-t*5t|5Sf}|9?(SPQE9T$+TV+PDCIg7={7UTup0z z-$%7t#p2>3CMG6u?AS59_S$Q26pO`AW-^(*ZEbC)X__b$3b1V(!C(+lN@Ow_B$G*W zb#)nwi;KVC*4CDrn3#C&ntNcq4Gav33;FAVx~}hOZf*`YG&CR(2*5B5xULJwaZoCi zkjZ4KD=RC*wOZ{Tzx1UqJqLgve)!=(jYJ}U-`Ceijg5_1TwH`@Sr9@Xm&>74Dj}6h zK}w0^$B$!XX6CWJzP>*n7#O(hw#!v-uRs3y+bG8eD>_w{5t_yFLonA>xHd9Hm=m}+_`f_ z+qR!NfByW=U@(|Yr_<0h4W&{Ekw^rAKmfH`4drqf9UUELYimnPPEJ19)6?_p`1pA4 zqQFb@fs3Lq3g4*wAN5as;uE3%{{F`1=H^&58VwnSVG)t$`@Zr#&s|<#u1rl$EsulqOZ@u+aBoYba^Ld0qAv8BPqg*bdtE&sUcI`q> zPfy}&U;Em>0O(sUb|c~9GWE6ct6%+UYWw!>?Wt5MZQFJ_7z{S+x}MZ^Jqo~JW=~4F z>^M%|ah%0svA8fhJ3D{u*s-~xp`q+L5ETlA#Eu<1{&LHfEq~JA-;ay`B5d2n)~#D% z+cty{2#3S?{O3Q9Q>RXC9vK-KU*7|lir)xg?Rd+UEoLf}Y6u2{4MK>dVHnMZVYHd1 znbvi^Mbos1@B1sB=PmfYAJjArLI`PDmMetFT?jD-pa7^!rNS?~@WSV$l+&eB=?lAe z?-r?43cl~dwrv2bTRpz-qphtCr%#{m0B{z-T5__X&?}vL=%I(AAN=44Q=2z$ZjZ;~ zEtX})G)=QFhETm;cXGL0ZgO&R_Ki2*Sa|yBr!(izpZ6{ZUjta@e8(Mk{7zF-)7SUy z+ZWuveLJGj=-U4`%d+t3qmR}nCnq~ze);9xr2togxMFw(0s+mkECGNV$ARm*>mqb5 zWY$7wgHi$D9Xobxi^t decoder.getPageCount()) { + return; + } + + final Cursor oldCursor = getCursor(); + try { + setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + decoder.setPageParameters(zoomFactors[scaleStep], page); + decoder.decodePage(page); + setRotation(decoder.getPdfPageData().getRotation(page)); + currentPage = page; + } catch (Exception e) { + e.printStackTrace(); + return; + } finally { + setCursor(oldCursor); + } + + goFirstAction.setEnabled(currentPage > 1); + goPreviousAction.setEnabled(currentPage > 1); + goNextAction.setEnabled(currentPage < decoder.getPageCount()); + goLastAction.setEnabled(currentPage < decoder.getPageCount()); + + pageField.setText(Integer.toString(currentPage)); + } + + public void zoomIn() { + setScaleStep(scaleStep + 1); + } + + public void zoomOut() { + setScaleStep(scaleStep - 1); + } + + public void rotateCClock() { + rotationSelect.setSelectedIndex( + (rotationSelect.getSelectedIndex() + 3) % 4); + } + + public void rotateClock() { + rotationSelect.setSelectedIndex( + (rotationSelect.getSelectedIndex() + 1) % 4); + } + + public void save() { + final JFileChooser fc = new JFileChooser(); + fc.setFileFilter(new FileFilter() { + + public String getDescription() { + return "PDF File"; + } + + public boolean accept(File f) { + return f.isDirectory() + || f.getName().toLowerCase().endsWith(".pdf"); + } + + }); + + if (fc.showSaveDialog(this) != JFileChooser.APPROVE_OPTION) { + return; + } + + File targetFile = fc.getSelectedFile(); + if (!targetFile.getName().toLowerCase().endsWith(".pdf")) { + targetFile = + new File(targetFile.getParentFile(), targetFile.getName() + ".pdf"); + } + if (targetFile.exists()) { + if (JOptionPane.showConfirmDialog(this, + "Do you want to overwrite the file?") + != JOptionPane.YES_OPTION) { + return; + } + } + + try { + final InputStream is = new FileInputStream(filename); + try { + final OutputStream os = new FileOutputStream(targetFile); + try { + final byte[] buffer = new byte[32768]; + for (int read; (read = is.read(buffer)) != -1; ) { + os.write(buffer, 0, read); + } + } finally { + os.close(); + } + } finally { + is.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void print() { + PrinterJob printJob = PrinterJob.getPrinterJob(); + //decoder.enableScaledPrinting(false); + printJob.setPageable(decoder); + final PageFormat pf = printJob.defaultPage(); + decoder.setPageFormat(pf); + decoder.setTextPrint(PdfDecoder.TEXTGLYPHPRINT); + printJob.setPrintable(decoder, pf); + if (printJob.printDialog()) { + final Cursor oldCursor = getCursor(); + try { + setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + printJob.print(); + } catch (PrinterException e) { + e.printStackTrace(); + } finally { + setCursor(oldCursor); + } + } + } + + protected void createToolBar() { + final JToolBar bar = new JToolBar(); + + bar.add(createActionButton(printAction, + null, + "22x22/document-print.png", + "Print document")); + bar.add(createActionButton(saveAction, + null, + "22x22/document-save.png", + "Save document")); + + //bar.addSeparator(new Dimension(10,0)); + + bar.add(createActionButton(goFirstAction, + null, + "22x22/go-first.png", + "First page")); + bar.add(createActionButton(goPreviousAction, + null, + "22x22/go-previous.png", + "Previos page")); + final JPanel pagePanel = createToolbarItemPanel(pageField); + + bar.add(pagePanel); + //bar.add(new JLabel("/")); + //bar.add(pageCountLabel); + bar.add(createActionButton(goNextAction, + null, + "22x22/go-next.png", + "Next page")); + bar.add(createActionButton(goLastAction, + null, + "22x22/go-last.png", + "Last page")); + + //bar.addSeparator(new Dimension(10,0)); + + bar.add(createActionButton(zoomOutAction, + null, + "22x22/zoom-out.png", + "Next page")); + bar.add(createToolbarItemPanel(zoomSelect)); + bar.add(createActionButton(zoomInAction, + null, + "22x22/zoom-in.png", + "Next page")); + + //bar.addSeparator(new Dimension(10,0)); + + bar.add(createActionButton(rotateCClockAction, + null, + "22x22/rotate-cclock.png", + "Next page")); + bar.add(createToolbarItemPanel(rotationSelect)); + bar.add(createActionButton(rotateClockAction, + null, + "22x22/rotate-clock.png", + "Next page")); + + bar.setFloatable(false); + add(BorderLayout.NORTH, bar); + } + + protected JPanel createToolbarItemPanel(JComponent component) { + final JPanel pagePanel = new JPanel(new GridBagLayout()); + pagePanel.add(component); + pagePanel.setMaximumSize(pagePanel.getPreferredSize()); + return pagePanel; + } + + public void loadPDF(String filename) { + this.filename = filename; + try { + decoder.closePdfFile(); + decoder.openPdfFile(filename); + pageCountLabel.setText(decoder.getPageCount() + " "); + setCurrentPage(1); + } catch (Exception e) { + e.printStackTrace(); + } + } + + protected JButton createActionButton(Action action, + String text, + String image, + String tooltip) { + final ImageIcon icon = + new ImageIcon(getClass().getResource(image)); + final double colorFactor = 0.9; + + final RGBImageFilter filter = new RGBImageFilter() { + public int filterRGB(int x, int y, int rgb) { + final int alpha = (rgb >> 24) & 0xff; + final int red = (rgb >> 16) & 0xff; + final int green = (rgb >> 8) & 0xff; + final int blue = (rgb ) & 0xff; + return ((int) (alpha * colorFactor) << 24) + | ((int) (red * colorFactor) << 16) + | ((int) (green * colorFactor) << 8) + | ((int) (blue * colorFactor)); + } + }; + + final ImageIcon darkerIcon = new ImageIcon( + Toolkit.getDefaultToolkit().createImage( + new FilteredImageSource(icon.getImage().getSource(), + filter))); + final JButton result = new JButton(); + result.setAction(action); + result.setText(text); + result.setIcon(darkerIcon); + result.setBorderPainted(false); + result.setHorizontalTextPosition(SwingConstants.CENTER); + result.setVerticalTextPosition(SwingConstants.BOTTOM); + result.setMnemonic(0); + result.setToolTipText(tooltip); + + final Dimension dim = result.getPreferredSize(); + result.setMaximumSize(new Dimension(32, dim.height)); + + result.addMouseListener(new MouseAdapter() { + public void mouseEntered(MouseEvent me) { + result.setBorderPainted(true); + result.setIcon(icon); + } + public void mouseExited(MouseEvent me) { + result.setBorderPainted(false); + result.setIcon(darkerIcon); + } + }); + + result.setBorderPainted(false); + result.setFocusPainted(false); + + return result; + } + + public int getCurrentPage() { + return currentPage; + } + + public void clearDocument() { + decoder.closePdfFile(); + if (tmpFile != null) { + tmpFile.delete(); + tmpFile = null; + } + } + + public void setScaleStep(int scaleStep) { + if (scaleStep < 0 || zoomFactors.length <= scaleStep) { + return; + } + + this.scaleStep = scaleStep; + zoomSelect.setSelectedIndex(scaleStep); + updateZoomRotate(); + } + + protected void updateZoomRotate() { + final Cursor oldCursor = getCursor(); + try { + setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + decoder.setPageParameters(zoomFactors[scaleStep], + currentPage, + rotation); + decoder.invalidate(); + decoder.repaint(); + zoomInAction.setEnabled(scaleStep < zoomFactors.length - 1); + zoomOutAction.setEnabled(scaleStep > 0); + } finally { + setCursor(oldCursor); + } + } + + public void setScale(int percent) { + int step; + for (step = 0; step < zoomFactors.length - 1; step++) { + if (zoomFactors[step] * 100 >= percent) { + break; + } + } + setScaleStep(step); + } + + public void loadPDF(InputStream is) { + if (tmpFile != null) { + tmpFile.delete(); + } + + try { + tmpFile = File.createTempFile("compiere", ".pdf"); + tmpFile.deleteOnExit(); + } catch (IOException e) { + e.printStackTrace(); + return; + } + + try { + final OutputStream os = new FileOutputStream(tmpFile); + try { + final byte[] buffer = new byte[32768]; + for (int read; (read = is.read(buffer)) != -1; ) { + os.write(buffer, 0, read); + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + os.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + + loadPDF(tmpFile.getAbsolutePath()); + } + + protected void finalize() throws Throwable { + if (tmpFile != null) { + tmpFile.delete(); + } + decoder.closePdfFile(); + } +} diff --git a/print/src/org/compiere/print/ArchiveEngine.java b/print/src/org/compiere/print/ArchiveEngine.java index b608a188b1..fd4e042679 100644 --- a/print/src/org/compiere/print/ArchiveEngine.java +++ b/print/src/org/compiere/print/ArchiveEngine.java @@ -20,8 +20,7 @@ import java.awt.print.*; import org.compiere.model.*; import org.compiere.print.layout.*; import org.compiere.util.*; -import com.qoppa.pdf.*; -import com.qoppa.pdfProcess.*; +import org.adempiere.pdf.*; /** @@ -44,7 +43,7 @@ public class ArchiveEngine * @return existing document or newly created if Client enabled archiving. * Will return NULL if archiving not enabled */ - public PDFDocument archive (LayoutEngine layout, PrintInfo info) + public byte[] archive (LayoutEngine layout, PrintInfo info) { // Do we need to Archive ? MClient client = MClient.get(layout.getCtx()); @@ -86,7 +85,7 @@ public class ArchiveEngine archive.setBinaryData(data); archive.save(); - return null; + return data; } // archive /** diff --git a/print/src/org/compiere/print/ReportEngine.java b/print/src/org/compiere/print/ReportEngine.java index 0b4755a645..79be67ffde 100644 --- a/print/src/org/compiere/print/ReportEngine.java +++ b/print/src/org/compiere/print/ReportEngine.java @@ -33,7 +33,7 @@ import org.compiere.model.*; import org.compiere.print.layout.*; import org.compiere.process.*; import org.compiere.util.*; -import com.qoppa.pdf.*; +import org.adempiere.pdf.*; /** * Report Engine.