Repository: openmeetings
Updated Branches:
  refs/heads/master fbe9e48f3 -> e6e1e83da


[OPENMEETINGS-427] export to PDF is implemented


Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/e6e1e83d
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/e6e1e83d
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/e6e1e83d

Branch: refs/heads/master
Commit: e6e1e83dad57aec284d6d02dfdf4531fc0cd0dd9
Parents: fbe9e48
Author: Maxim Solodovnik <solomax...@gmail.com>
Authored: Thu Aug 10 23:06:57 2017 +0700
Committer: Maxim Solodovnik <solomax...@gmail.com>
Committed: Thu Aug 10 23:06:57 2017 +0700

----------------------------------------------------------------------
 .../apache/openmeetings/web/room/RoomPanel.java | 48 ++++++++++++++++++++
 .../web/room/menu/RoomMenuPanel.java            |  8 ++--
 .../openmeetings/web/room/wb/WbPanel.java       | 33 ++++++++------
 openmeetings-web/src/main/webapp/css/wb.css     |  2 +-
 4 files changed, 72 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e6e1e83d/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
index b540ce0..7fd3115 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
@@ -29,7 +29,11 @@ import static 
org.apache.openmeetings.web.app.Application.update;
 import static org.apache.openmeetings.web.app.WebSession.getDateFormat;
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
 import static org.apache.openmeetings.web.room.wb.WbPanel.WB_JS_REFERENCE;
+import static org.apache.wicket.util.time.Duration.NONE;
 
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
 import java.util.Calendar;
 import java.util.List;
 import java.util.Map.Entry;
@@ -74,6 +78,7 @@ import org.apache.wicket.ajax.AjaxRequestTarget;
 import 
org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.event.IEvent;
+import org.apache.wicket.extensions.ajax.AjaxDownload;
 import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.head.JavaScriptHeaderItem;
 import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
@@ -81,6 +86,10 @@ import org.apache.wicket.markup.head.PriorityHeaderItem;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.protocol.ws.api.event.WebSocketPushPayload;
 import org.apache.wicket.request.resource.JavaScriptResourceReference;
+import org.apache.wicket.request.resource.ResourceStreamResource;
+import org.apache.wicket.util.resource.AbstractResourceStream;
+import org.apache.wicket.util.resource.IResourceStream;
+import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
 import org.apache.wicket.util.string.Strings;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
@@ -149,6 +158,44 @@ public class RoomPanel extends BasePanel {
        private final WbPanel wb;
        private String sharingUser = null;
        private String recordingUser = null;
+       private byte[] pdfWb;
+       private final AjaxDownload download = new AjaxDownload(new 
ResourceStreamResource() {
+               private static final long serialVersionUID = 1L;
+
+               {
+                       setCacheDuration(NONE);
+                       setFileName("whiteboard.pdf");
+               }
+
+               @Override
+               protected IResourceStream getResourceStream(Attributes 
attributes) {
+                       return new AbstractResourceStream() {
+                               private static final long serialVersionUID = 1L;
+
+                               @Override
+                               public InputStream getInputStream() throws 
ResourceStreamNotFoundException {
+                                       return new ByteArrayInputStream(pdfWb);
+                               }
+
+                               @Override
+                               public void close() throws IOException {
+                               }
+                       };
+               }
+       }) {
+               private static final long serialVersionUID = 1L;
+
+               @Override
+               protected void onDownloadCompleted(AjaxRequestTarget target) {
+                       super.onDownloadCompleted(target);
+                       pdfWb = null;
+               }
+       };
+
+       public void startDownload(AjaxRequestTarget target, byte[] bb) {
+               pdfWb = bb;
+               download.initiate(target);
+       }
 
        public RoomPanel(String id, Room r) {
                super(id);
@@ -306,6 +353,7 @@ public class RoomPanel extends BasePanel {
                }
                if (room.isVisible()) {
                        add(new NicknameDialog("nickname", this));
+                       add(download);
                } else {
                        add(new 
WebMarkupContainer("nickname").setVisible(false));
                }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e6e1e83d/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
index 5792d78..99927b7 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
@@ -18,9 +18,9 @@
  */
 package org.apache.openmeetings.web.room.menu;
 
+import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_JPG;
 import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_PDF;
-import static org.apache.openmeetings.util.OmFileHelper.JPG_MIME_TYPE;
-import static org.apache.openmeetings.util.OmFileHelper.PNG_MIME_TYPE;
+import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_PNG;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_APPLICATION_BASE_URL;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_REDIRECT_URL_FOR_EXTERNAL_KEY;
 import static org.apache.openmeetings.web.app.Application.exitRoom;
@@ -273,7 +273,7 @@ public class RoomMenuPanel extends Panel {
 
                        @Override
                        public void onClick(AjaxRequestTarget target) {
-                               
target.appendJavaScript(String.format("WbArea.download('%s');", PNG_MIME_TYPE));
+                               
target.appendJavaScript(String.format("WbArea.download('%s');", EXTENSION_PNG));
                        }
                });
                actionsMenu.getItems().add(new 
RoomMenuItem(Application.getString("download.jpg"), 
Application.getString("download.jpg")) {
@@ -281,7 +281,7 @@ public class RoomMenuPanel extends Panel {
 
                        @Override
                        public void onClick(AjaxRequestTarget target) {
-                               
target.appendJavaScript(String.format("WbArea.download('%s');", JPG_MIME_TYPE));
+                               
target.appendJavaScript(String.format("WbArea.download('%s');", EXTENSION_JPG));
                        }
                });
                actionsMenu.getItems().add(new 
RoomMenuItem(Application.getString("download.pdf"), 
Application.getString("download.pdf")) {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e6e1e83d/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
index ff3ab9a..cc2bed7 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
@@ -32,6 +32,7 @@ import java.awt.image.BufferedImage;
 import java.io.BufferedReader;
 import java.io.BufferedWriter;
 import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.IOException;
 import java.nio.file.Files;
@@ -143,23 +144,27 @@ public class WbPanel extends Panel {
                                        boolean moder = 
c.hasRight(Room.Right.moderator);
                                        Room r = rp.getRoom();
                                        if ((moder && 
!r.isHidden(RoomElement.ActionMenu)) || (!moder && r.isAllowUserQuestions())) {
-                                               PDDocument doc = new 
PDDocument();
-                                               JSONArray arr = 
obj.getJSONArray("slides");
-                                               for (int i = 0; i < 
arr.length(); ++i) {
-                                                       String base64Image = 
arr.getString(i).split(",")[1];
-                                                       byte[] bb = 
Base64.decodeBase64(base64Image);
-                                                       BufferedImage img = 
ImageIO.read(new ByteArrayInputStream(bb));
-                                                       float width = 
img.getWidth();
-                                                       float height = 
img.getHeight();
-                                                       PDPage page = new 
PDPage(new PDRectangle(width, height));
-                                                       PDImageXObject 
pdImageXObject = LosslessFactory.createFromImage(doc, img);
-                                                       try 
(PDPageContentStream contentStream = new PDPageContentStream(doc, page, 
AppendMode.APPEND, false)) {
-                                                               
contentStream.drawImage(pdImageXObject, 0, 0, width, height);
+                                               try (PDDocument doc = new 
PDDocument()) {
+                                                       JSONArray arr = 
obj.getJSONArray("slides");
+                                                       for (int i = 0; i < 
arr.length(); ++i) {
+                                                               String 
base64Image = arr.getString(i).split(",")[1];
+                                                               byte[] bb = 
Base64.decodeBase64(base64Image);
+                                                               BufferedImage 
img = ImageIO.read(new ByteArrayInputStream(bb));
+                                                               float width = 
img.getWidth();
+                                                               float height = 
img.getHeight();
+                                                               PDPage page = 
new PDPage(new PDRectangle(width, height));
+                                                               PDImageXObject 
pdImageXObject = LosslessFactory.createFromImage(doc, img);
+                                                               try 
(PDPageContentStream contentStream = new PDPageContentStream(doc, page, 
AppendMode.APPEND, false)) {
+                                                                       
contentStream.drawImage(pdImageXObject, 0, 0, width, height);
+                                                               }
+                                                               
doc.addPage(page);
                                                        }
-                                                       doc.addPage(page);
+                                                       ByteArrayOutputStream 
baos = new ByteArrayOutputStream();
+                                                       doc.save(baos);
+                                                       
rp.startDownload(target, baos.toByteArray());
                                                }
-                                               //TODO check object
                                        }
+                                       return;
                                }
                                //presenter-right
                                if (c.hasRight(Right.presenter)) {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e6e1e83d/openmeetings-web/src/main/webapp/css/wb.css
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/webapp/css/wb.css 
b/openmeetings-web/src/main/webapp/css/wb.css
index c53ca00..c594352 100644
--- a/openmeetings-web/src/main/webapp/css/wb.css
+++ b/openmeetings-web/src/main/webapp/css/wb.css
@@ -246,7 +246,7 @@
        padding: 1px 10px;
        border-radius: 2px;
        position: absolute;
-       z-index: 1000;
+       cursor: default;
 }
 .wb-area .wb-zoom, .wb-area .wb-zoom .btn-group button {
        background-color: grey;

Reply via email to