Supprimer un message
Raison de suppression du message (envoyée à l'utilisateur)

Voulez vous réellement supprimer ce message?  


rfr
Alors voici le code torché à la va-vite ... hum ...

  1. package be.erefer.Html2Png; 
  2. import java.io.ByteArrayOutputStream; 
  3. import java.io.IOException; 
  4. import javax.servlet.ServletException; 
  5. import javax.servlet.http.HttpServletRequest; 
  6. import javax.servlet.http.HttpServletResponse; 
  7. import org.eclipse.swt.SWT; 
  8. import org.eclipse.swt.browser.Browser; 
  9. import org.eclipse.swt.browser.ProgressEvent; 
  10. import org.eclipse.swt.browser.ProgressListener; 
  11. import org.eclipse.swt.graphics.GC; 
  12. import org.eclipse.swt.graphics.Image; 
  13. import org.eclipse.swt.graphics.ImageData; 
  14. import org.eclipse.swt.graphics.ImageLoader; 
  15. import org.eclipse.swt.layout.FillLayout; 
  16. import org.eclipse.swt.layout.GridData; 
  17. import org.eclipse.swt.layout.GridLayout; 
  18. import org.eclipse.swt.widgets.Display; 
  19. import org.eclipse.swt.widgets.Shell; 
  20. import org.mortbay.jetty.Server; 
  21. import org.mortbay.jetty.handler.AbstractHandler; 
  22. class RequestHandler extends AbstractHandler { 
  23. private Main m = null; 
  24.  
  25. public RequestHandler(Main m) { 
  26. this.m = m; 
  27.  
  28. public void handle(String arg0, HttpServletRequest arg1, 
  29. HttpServletResponse arg2, int arg3) throws IOException, 
  30. ServletException { 
  31.  
  32. synchronized (this) { 
  33.  
  34. String url = arg1.getParameter("url"); 
  35. String width = arg1.getParameter("width"); 
  36. String height = arg1.getParameter("height"); 
  37.  
  38. int x; 
  39. int y; 
  40.  
  41. if (url == null || width == null || height == null) { 
  42. throw new ServletException("Invalid Parameters"); 
  43.  
  44. try { 
  45. x = Integer.parseInt(width); 
  46. y = Integer.parseInt(height); 
  47. catch (Exception e) { 
  48. throw new ServletException("Invalid Parameters"); 
  49.  
  50. m.SetSize(x, y); 
  51.  
  52. Object synch = new Object(); 
  53. m.setSynchObject(synch); 
  54.  
  55. m.launchImageCapture(url); 
  56.  
  57. synchronized(synch) { 
  58. try { 
  59. synch.wait(); 
  60. catch (Exception e) { 
  61. new ServletException("Internal Error"); 
  62.  
  63. if (m.getRequestImageData() == null) { 
  64. throw new ServletException("No image generated"); 
  65.  
  66. ImageLoader il = new ImageLoader(); 
  67. il.data = new ImageData[] {m.getRequestImageData()}; 
  68.  
  69. ByteArrayOutputStream imgb = new ByteArrayOutputStream(); 
  70. il.save(imgb, SWT.IMAGE_PNG); 
  71. //imgb.flush(); 
  72.  
  73.  
  74. arg2.setStatus(HttpServletResponse.SC_OK); 
  75. arg2.setContentType("image/png"); 
  76. arg2.setContentLength(imgb.size()); 
  77.  
  78. byte[] data = imgb.toByteArray();  
  79.  
  80.                         arg2.getOutputStream().write(data); 
  81.  
  82. arg2.getOutputStream().flush(); 
  83.  
  84.  
  85.  
  86. public class Main { 
  87. private Browser b = null; 
  88. private Display d; 
  89. private Shell main; 
  90.  
  91. private int requestedWidth; 
  92. private int requestedHeight; 
  93.  
  94. private Object synchObject;  
  95.  
  96. private ImageData requestImageData; 
  97. private String requestUrl; 
  98.  
  99. public void SetSize(int x, int y) { 
  100. requestedHeight = y; 
  101. requestedWidth = x; 
  102.  
  103. public void setSynchObject(Object o) { 
  104. synchObject = o; 
  105.  
  106. public ImageData getRequestImageData() { 
  107. return requestImageData; 
  108.  
  109. public void setRequestImageData(ImageData id) { 
  110. requestImageData = id; 
  111.  
  112. public void loadCompleted() { 
  113. FrameGrabber fg = new FrameGrabber(this, main, b); 
  114.  
  115. d.timerExec(2000, fg); 
  116.  
  117. public void imageCapture() { 
  118. main.setSize(requestedWidth, requestedHeight); 
  119. main.setActive(); 
  120. b.setData(synchObject); 
  121. b.setUrl(requestUrl); 
  122.  
  123. public void launchImageCapture(String url) { 
  124. requestUrl = url; 
  125. d.syncExec(new Runnable() { 
  126. public void run() { 
  127. imageCapture(); 
  128. }); 
  129.  
  130. public void run() { 
  131.  
  132. Server server = new Server(9090); 
  133. server.setHandler(new RequestHandler(this)); 
  134. try { 
  135. server.start(); 
  136. catch (Exception e) { 
  137. throw new RuntimeException("Error in server"); 
  138.  
  139. d = new Display(); 
  140.  
  141. main = new Shell(d, SWT.NO_TRIM); 
  142. main.setLayout(new FillLayout()); 
  143.  
  144. GridLayout gridLayout = new GridLayout(); 
  145. gridLayout.numColumns = 1
  146. main.setLayout(gridLayout); 
  147. GridData data = new GridData(); 
  148. data.horizontalAlignment = GridData.FILL; 
  149. data.verticalAlignment = GridData.FILL; 
  150. data.grabExcessHorizontalSpace = true; 
  151. data.grabExcessVerticalSpace = true;  
  152. main.setSize(1024768); 
  153. main.setLocation(00); 
  154.  
  155. b = new Browser(main, SWT.MOZILLA); 
  156. b.setLayoutData(data); 
  157.  
  158.  
  159. main.open(); 
  160.  
  161. /* 
  162. b.addTitleListener(new TitleListener() { 
  163. public void changed(TitleEvent event) { 
  164. loadCompleted(); 
  165.  
  166. }); 
  167. */ 
  168.  
  169. //b.setText("<html><head></head><body>a</body></html>"); 
  170. if (!b.execute("window.scrollbars.visible=false;")) { 
  171. System.out.println("Script not executed"); 
  172. b.addProgressListener(new ProgressListener() { 
  173. public void changed(ProgressEvent event) { 
  174. public void completed(ProgressEvent event) { 
  175. if (requestUrl == null) { 
  176. return
  177. loadCompleted(); 
  178. b.execute("window.scrollbars.visible=false;"); 
  179.  
  180. }); 
  181.  
  182. while (!main.isDisposed()) { 
  183. if (!d.readAndDispatch()) 
  184. d.sleep(); 
  185.  
  186.  
  187.  
  188. main.dispose(); 
  189. d.dispose(); 
  190.  
  191.  
  192.  
  193.  
  194. public static void main(String s[]) { 
  195. Main m = new Main(); 
  196. m.run(); 
  197. class FrameGrabber implements Runnable { 
  198.  
  199. private Browser b; 
  200. private Shell s; 
  201. private Main m; 
  202.  
  203. public FrameGrabber(Main m, Shell s, Browser b) { 
  204. this.b = b; 
  205. this.s = s; 
  206. this.m = m; 
  207.  
  208. public void run() { 
  209.  
  210. int xDelta = 0
  211. int yDelta = 0
  212.  
  213. s.setActive(); 
  214. b.redraw(); 
  215. if (b.getVerticalBar() == null) { 
  216. System.out.println("No VScroll"); 
  217. else { 
  218. System.out.println("VScroll"); 
  219. if (b.getHorizontalBar() == null) { 
  220. System.out.println("No HScroll"); 
  221. else { 
  222. System.out.println("HScroll"); 
  223.  
  224. if (b.getHorizontalBar() != null && b.getHorizontalBar().isVisible()) { 
  225. yDelta = b.getHorizontalBar().getSize().y; 
  226. System.out.println("yDelta = "+yDelta); 
  227. if (b.getVerticalBar() != null && b.getVerticalBar().isVisible()) { 
  228. xDelta = b.getVerticalBar().getSize().x; 
  229. System.out.println("xDelta = "+xDelta); 
  230. }  
  231.  
  232. b.update();  
  233. GC browserGC = new GC(b); 
  234. Image img = new Image(Display.getCurrent(), b.getClientArea().width - xDelta, b.getClientArea().height-yDelta); 
  235.  
  236. browserGC.copyArea(img, 00); 
  237.  
  238. m.setRequestImageData(img.getImageData()); 
  239. browserGC.dispose(); 
  240. synchronized(b.getData()) { 
  241. b.getData().notify(); 
  242.  
  243. }
Informaticien.be - © 2002-2024 AkretioSPRL  - Generated via Kelare
The Akretio Network: Akretio - Freedelity - KelCommerce - Votre publicité sur informaticien.be ?