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


[OPENMEETINGS-427] initial commit


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

Branch: refs/heads/master
Commit: fbe9e48f34a78eecc9a3e1a174bbf4497e6fb01b
Parents: f273d8c
Author: Maxim Solodovnik <solomax...@gmail.com>
Authored: Thu Aug 10 19:54:33 2017 +0700
Committer: Maxim Solodovnik <solomax...@gmail.com>
Committed: Thu Aug 10 19:54:33 2017 +0700

----------------------------------------------------------------------
 openmeetings-web/pom.xml                        | 12 +++++++
 .../web/room/menu/RoomMenuPanel.java            | 17 ++++++++--
 .../openmeetings/web/room/wb/WbAction.java      |  1 +
 .../openmeetings/web/room/wb/WbPanel.java       | 35 ++++++++++++++++++++
 .../org/apache/openmeetings/web/room/wb/wb.js   | 27 +++++++++++----
 5 files changed, 83 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/fbe9e48f/openmeetings-web/pom.xml
----------------------------------------------------------------------
diff --git a/openmeetings-web/pom.xml b/openmeetings-web/pom.xml
index c087139..feedeb9 100644
--- a/openmeetings-web/pom.xml
+++ b/openmeetings-web/pom.xml
@@ -33,6 +33,7 @@
                <mysql.version>5.1.43</mysql.version>
                
<old-backups.dir>${project.build.directory}/test-data</old-backups.dir>
                <site.basedir>${project.parent.basedir}</site.basedir>
+               <pdfbox.version>2.0.6</pdfbox.version>
        </properties>
        <profiles>
                <profile>
@@ -603,5 +604,16 @@
                        <version>${derby.version}</version>
                        <scope>test</scope>
                </dependency>
+               <dependency>
+                       <groupId>org.apache.pdfbox</groupId>
+                       <artifactId>pdfbox</artifactId>
+                       <version>${pdfbox.version}</version>
+                       <exclusions>
+                               <exclusion>
+                                       <groupId>org.apache.pdfbox</groupId>
+                                       <artifactId>pdfbox-tools</artifactId>
+                               </exclusion>
+                       </exclusions>
+               </dependency>
        </dependencies>
 </project>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/fbe9e48f/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 5a37991..5792d78 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,6 +18,9 @@
  */
 package org.apache.openmeetings.web.room.menu;
 
+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.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;
@@ -270,7 +273,7 @@ public class RoomMenuPanel extends Panel {
 
                        @Override
                        public void onClick(AjaxRequestTarget target) {
-                               
target.appendJavaScript("WbArea.download('png');");
+                               
target.appendJavaScript(String.format("WbArea.download('%s');", PNG_MIME_TYPE));
                        }
                });
                actionsMenu.getItems().add(new 
RoomMenuItem(Application.getString("download.jpg"), 
Application.getString("download.jpg")) {
@@ -278,7 +281,15 @@ public class RoomMenuPanel extends Panel {
 
                        @Override
                        public void onClick(AjaxRequestTarget target) {
-                               
target.appendJavaScript("WbArea.download('jpeg');");
+                               
target.appendJavaScript(String.format("WbArea.download('%s');", JPG_MIME_TYPE));
+                       }
+               });
+               actionsMenu.getItems().add(new 
RoomMenuItem(Application.getString("download.pdf"), 
Application.getString("download.pdf")) {
+                       private static final long serialVersionUID = 1L;
+
+                       @Override
+                       public void onClick(AjaxRequestTarget target) {
+                               
target.appendJavaScript(String.format("WbArea.download('%s');", EXTENSION_PDF));
                        }
                });
                //TODO seems need to be removed actionsMenu.getItems().add(new 
RoomMenuItem(Application.getString(1126), Application.getString(1490)));
@@ -298,7 +309,7 @@ public class RoomMenuPanel extends Panel {
                exitMenuItem.setEnabled(notExternalUser);//TODO check this
                filesMenu.setEnabled(room.getSidebar().isShowFiles());
                boolean moder = room.getClient().hasRight(Room.Right.moderator);
-               actionsMenu.setEnabled((moder 
&&!r.isHidden(RoomElement.ActionMenu)) || (!moder && r.isAllowUserQuestions()));
+               actionsMenu.setEnabled((moder && 
!r.isHidden(RoomElement.ActionMenu)) || (!moder && r.isAllowUserQuestions()));
                inviteMenuItem.setEnabled(notExternalUser && moder);
                //TODO add check "sharing started"
                boolean shareVisible = room.screenShareAllowed();

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/fbe9e48f/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbAction.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbAction.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbAction.java
index 6838064..5ef5bfd 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbAction.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbAction.java
@@ -32,4 +32,5 @@ public enum WbAction {
        , load
        , undo
        , setSize
+       , downloadPdf
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/fbe9e48f/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 2c32d81..ff3ab9a 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
@@ -28,8 +28,10 @@ import static 
org.apache.openmeetings.web.util.CallbackFunctionHelper.getNamedFu
 import static org.apache.wicket.AttributeModifier.append;
 import static org.apache.wicket.ajax.attributes.CallbackParameter.explicit;
 
+import java.awt.image.BufferedImage;
 import java.io.BufferedReader;
 import java.io.BufferedWriter;
+import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.IOException;
 import java.nio.file.Files;
@@ -43,6 +45,9 @@ import java.util.UUID;
 import java.util.function.Consumer;
 import java.util.function.Function;
 
+import javax.imageio.ImageIO;
+
+import org.apache.commons.codec.binary.Base64;
 import org.apache.openmeetings.core.data.whiteboard.WhiteboardCache;
 import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
 import org.apache.openmeetings.db.dao.record.RecordingDao;
@@ -53,6 +58,7 @@ import org.apache.openmeetings.db.entity.basic.Client;
 import org.apache.openmeetings.db.entity.file.FileExplorerItem;
 import org.apache.openmeetings.db.entity.file.FileItem;
 import org.apache.openmeetings.db.entity.file.FileItem.Type;
+import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.room.Room.Right;
 import org.apache.openmeetings.db.entity.room.Room.RoomElement;
 import org.apache.openmeetings.util.NullStringer;
@@ -60,6 +66,13 @@ import org.apache.openmeetings.util.OmFileHelper;
 import org.apache.openmeetings.web.app.Application;
 import org.apache.openmeetings.web.common.NameDialog;
 import org.apache.openmeetings.web.room.RoomPanel;
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.PDPage;
+import org.apache.pdfbox.pdmodel.PDPageContentStream;
+import org.apache.pdfbox.pdmodel.PDPageContentStream.AppendMode;
+import org.apache.pdfbox.pdmodel.common.PDRectangle;
+import org.apache.pdfbox.pdmodel.graphics.image.LosslessFactory;
+import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
 import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
@@ -126,6 +139,28 @@ public class WbPanel extends Panel {
                                }
 
                                Client c = rp.getClient();
+                               if (WbAction.downloadPdf == a) {
+                                       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);
+                                                       }
+                                                       doc.addPage(page);
+                                               }
+                                               //TODO check object
+                                       }
+                               }
                                //presenter-right
                                if (c.hasRight(Right.presenter)) {
                                        switch (a) {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/fbe9e48f/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js
index 9d49383..61789f8 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js
@@ -1458,13 +1458,28 @@ var WbArea = (function() {
                if (!_inited) return;
                self.getWb(json.wbId).setSize(json);
        }
+       function _getImage(cnv, fmt) {
+               //TODO zoom ???
+               return cnv.toDataURL({format: fmt, width: cnv.width, height: 
cnv.height, left: 0, top: 0});
+       }
        self.download = function(fmt) {
-               var wb = getActive().data(), cnv = wb.getCanvas()
-                       , a = document.createElement('a');
-               a.setAttribute('target', '_blank')
-               a.setAttribute('download', wb.name + '.' + fmt);
-               a.setAttribute('href', cnv.toDataURL({format: fmt, width: 
cnv.width, height: cnv.height, left: 0, top: 0})); //TODO zoom
-               a.dispatchEvent(new MouseEvent('click', {view: window, bubbles: 
false, cancelable: true}));
+               var wb = getActive().data();
+               if ('pdf' === fmt) {
+                       var arr = [];
+                       wb.eachCanvas(function(cnv) {
+                               arr.push(_getImage(cnv, 'image/png'));
+                       });
+                       wbAction('downloadPdf', JSON.stringify({
+                               slides: arr
+                       }));
+               } else {
+                       var cnv = wb.getCanvas()
+                               , a = document.createElement('a');
+                       a.setAttribute('target', '_blank')
+                       a.setAttribute('download', wb.name + '.' + fmt);
+                       a.setAttribute('href', _getImage(cnv, fmt));
+                       a.dispatchEvent(new MouseEvent('click', {view: window, 
bubbles: false, cancelable: true}));
+               }
        }
        return self;
 })();

Reply via email to