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;
})();