You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2017/08/10 12:54:41 UTC

openmeetings git commit: [OPENMEETINGS-427] initial commit

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 <so...@gmail.com>
Authored: Thu Aug 10 19:54:33 2017 +0700
Committer: Maxim Solodovnik <so...@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;
 })();