From 379bc6407010398d9bd02a8390c716b6ed2d8d74 Mon Sep 17 00:00:00 2001 From: Pavel-Teplitsky Date: Fri, 20 Apr 2018 10:46:43 +0300 Subject: [PATCH 1/2] Added image rendering mode --- .../domain/wrapper/LoadedPageWrapper.java | 9 +++ .../resources/QuickViewResource.java | 59 +++++++++++++++---- .../resources/QuickViewResourcesBase.java | 11 ++++ 3 files changed, 67 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/aliensoft/quickview/domain/wrapper/LoadedPageWrapper.java b/src/main/java/com/aliensoft/quickview/domain/wrapper/LoadedPageWrapper.java index 380b5d8..1285f2d 100644 --- a/src/main/java/com/aliensoft/quickview/domain/wrapper/LoadedPageWrapper.java +++ b/src/main/java/com/aliensoft/quickview/domain/wrapper/LoadedPageWrapper.java @@ -6,6 +6,7 @@ public class LoadedPageWrapper { private String pageHtml; private String angle; + private String pageImage; public String getPageHtml() { return pageHtml; @@ -22,4 +23,12 @@ public String getAngle() { public void setAngle(String angle) { this.angle = angle; } + + public String getPageImage() { + return pageImage; + } + + public void setPageImage(String pageImage) { + this.pageImage = pageImage; + } } diff --git a/src/main/java/com/aliensoft/quickview/resources/QuickViewResource.java b/src/main/java/com/aliensoft/quickview/resources/QuickViewResource.java index 0389102..ee7bf58 100644 --- a/src/main/java/com/aliensoft/quickview/resources/QuickViewResource.java +++ b/src/main/java/com/aliensoft/quickview/resources/QuickViewResource.java @@ -11,6 +11,7 @@ import com.google.gson.Gson; import com.groupdocs.viewer.config.ViewerConfig; import com.groupdocs.viewer.converter.options.HtmlOptions; +import com.groupdocs.viewer.converter.options.ImageOptions; import com.groupdocs.viewer.domain.FileDescription; import com.groupdocs.viewer.domain.containers.DocumentInfoContainer; import com.groupdocs.viewer.domain.containers.FileListContainer; @@ -18,11 +19,13 @@ import com.groupdocs.viewer.domain.options.FileListOptions; import com.groupdocs.viewer.domain.options.RotatePageOptions; import com.groupdocs.viewer.handler.ViewerHtmlHandler; +import com.groupdocs.viewer.handler.ViewerImageHandler; import com.groupdocs.viewer.licensing.License; import io.dropwizard.jetty.ConnectorFactory; import io.dropwizard.jetty.HttpConnectorFactory; import io.dropwizard.server.SimpleServerFactory; import org.apache.commons.io.FilenameUtils; +import org.apache.commons.io.IOUtils; import org.eclipse.jetty.server.Request; import org.json.JSONArray; import org.json.JSONObject; @@ -50,6 +53,7 @@ import java.nio.file.Paths; import java.nio.file.StandardCopyOption; import java.util.ArrayList; +import java.util.Base64; /** * QuickView @@ -61,6 +65,7 @@ public class QuickViewResource extends QuickViewResourcesBase{ private final QuickViewConfig quickViewConfig; private final ViewerHtmlHandler viewerHtmlHandler; + private final ViewerImageHandler viewerImageHandler; /** * Constructor @@ -84,6 +89,8 @@ public QuickViewResource(QuickViewConfig quickViewConfig) throws UnknownHostExce license.setLicense(quickViewConfig.getApplication().getLicensePath()); // initialize viewer instance for the HTML mode viewerHtmlHandler = new ViewerHtmlHandler(config); + // initialize viewer instance for the Image mode + viewerImageHandler = new ViewerImageHandler(config); } /** @@ -164,14 +171,20 @@ public Object loadDocumentDescription(@Context HttpServletRequest request, @Cont String requestBody = getRequestBody(request); // get/set parameters String documentGuid = getJsonString(requestBody, "guid"); + boolean htmlMode = getJsonBoolean(requestBody, "htmlMode"); // check if documentGuid contains path or only file name if(!Paths.get(documentGuid).isAbsolute()){ documentGuid = quickViewConfig.getApplication().getFilesDirectory() + "/" + documentGuid; } + DocumentInfoContainer documentInfoContainer = new DocumentInfoContainer(); // get document info options DocumentInfoOptions documentInfoOptions = new DocumentInfoOptions(documentGuid); // get document info container - DocumentInfoContainer documentInfoContainer = viewerHtmlHandler.getDocumentInfo(documentGuid, documentInfoOptions); + if(htmlMode) { + documentInfoContainer = viewerHtmlHandler.getDocumentInfo(documentGuid, documentInfoOptions); + } else { + documentInfoContainer = viewerImageHandler.getDocumentInfo(documentGuid, documentInfoOptions); + } // return document description return objectToJson(documentInfoContainer.getPages()); }catch (Exception ex){ @@ -199,18 +212,33 @@ public Object loadDocumentPage(@Context HttpServletRequest request, @Context Htt // get/set parameters String documentGuid = getJsonString(requestBody, "guid"); int pageNumber = getJsonInteger(requestBody, "page"); + boolean htmlMode = getJsonBoolean(requestBody, "htmlMode"); LoadedPageWrapper loadedPage = new LoadedPageWrapper(); + String angle = "0"; // set options - HtmlOptions htmlOptions = new HtmlOptions(); - htmlOptions.setPageNumber(pageNumber); - htmlOptions.setCountPagesToRender(1); - htmlOptions.setResourcesEmbedded(true); - // get page HTML - loadedPage.setPageHtml(viewerHtmlHandler.getPages(documentGuid, htmlOptions).get(0).getHtmlContent()); - // get page rotation angle - String angle = String.valueOf(viewerHtmlHandler.getDocumentInfo(documentGuid).getPages().get(pageNumber - 1).getAngle()); + if(htmlMode) { + HtmlOptions htmlOptions = new HtmlOptions(); + htmlOptions.setPageNumber(pageNumber); + htmlOptions.setCountPagesToRender(1); + htmlOptions.setResourcesEmbedded(true); + // get page HTML + loadedPage.setPageHtml(viewerHtmlHandler.getPages(documentGuid, htmlOptions).get(0).getHtmlContent()); + // get page rotation angle + angle = String.valueOf(viewerHtmlHandler.getDocumentInfo(documentGuid).getPages().get(pageNumber - 1).getAngle()); + } else { + ImageOptions imageOptions = new ImageOptions(); + imageOptions.setPageNumber(pageNumber); + imageOptions.setCountPagesToRender(1); + // get page image + byte[] bytes = IOUtils.toByteArray(viewerImageHandler.getPages(documentGuid, imageOptions).get(0).getStream()); + // encode ByteArray into String + String incodedImage = new String(Base64.getEncoder().encode(bytes)); + loadedPage.setPageImage(incodedImage); + // get page rotation angle + angle = String.valueOf(viewerImageHandler.getDocumentInfo(documentGuid).getPages().get(pageNumber - 1).getAngle()); + } loadedPage.setAngle(angle); - // return html + // return loaded page object return objectToJson(loadedPage); }catch (Exception ex){ // set response content type @@ -240,6 +268,7 @@ public Object rotateDocumentPages(@Context HttpServletRequest request, @Context String documentGuid = getJsonString(requestBody, "guid"); int angle = Integer.parseInt(getJsonString(requestBody, "angle")); JSONArray pages = new JSONObject(requestBody).getJSONArray("pages"); + boolean htmlMode = getJsonBoolean(requestBody, "htmlMode"); // a list of the rotated pages info ArrayList rotatedPages = new ArrayList(); // rotate pages @@ -249,11 +278,17 @@ public Object rotateDocumentPages(@Context HttpServletRequest request, @Context int pageNumber = Integer.parseInt(pages.get(i).toString()); RotatePageOptions rotateOptions = new RotatePageOptions(pageNumber, angle); // perform page rotation - viewerHtmlHandler.rotatePage(documentGuid, rotateOptions); + String resultAngle = "0"; + if(htmlMode) { + viewerHtmlHandler.rotatePage(documentGuid, rotateOptions); + resultAngle = String.valueOf(viewerHtmlHandler.getDocumentInfo(documentGuid).getPages().get(pageNumber - 1).getAngle()); + } else { + viewerImageHandler.rotatePage(documentGuid, rotateOptions); + resultAngle = String.valueOf(viewerImageHandler.getDocumentInfo(documentGuid).getPages().get(pageNumber - 1).getAngle()); + } // add rotated page number rotatedPage.setPageNumber(pageNumber); // add rotated page angle - String resultAngle = String.valueOf(viewerHtmlHandler.getDocumentInfo(documentGuid).getPages().get(pageNumber - 1).getAngle()); rotatedPage.setAngle(resultAngle); // add rotated page object into resulting list rotatedPages.add(rotatedPage); diff --git a/src/main/java/com/aliensoft/quickview/resources/QuickViewResourcesBase.java b/src/main/java/com/aliensoft/quickview/resources/QuickViewResourcesBase.java index 2b2780c..ff6bec4 100644 --- a/src/main/java/com/aliensoft/quickview/resources/QuickViewResourcesBase.java +++ b/src/main/java/com/aliensoft/quickview/resources/QuickViewResourcesBase.java @@ -102,4 +102,15 @@ protected int getJsonInteger(String json, String key){ return value; } + protected boolean getJsonBoolean(String json, String key){ + boolean value = true; + try { + JSONObject jsonObject = new JSONObject(json); + value = jsonObject.getBoolean(key); + } catch (JSONException e) { + e.printStackTrace(); + } + return value; + } + } From b6c6c0079363b14509c364921b82123bf5901087 Mon Sep 17 00:00:00 2001 From: Pavel-Teplitsky Date: Thu, 19 Apr 2018 12:55:27 +0300 Subject: [PATCH 2/2] Added new options --- configuration.yml | 8 ++++- .../quickview/config/QuickViewConfig.java | 36 +++++++++++++++++++ .../aliensoft/quickview/views/quickview.ftl | 5 ++- 3 files changed, 47 insertions(+), 2 deletions(-) diff --git a/configuration.yml b/configuration.yml index 8226dac..85aeb62 100755 --- a/configuration.yml +++ b/configuration.yml @@ -47,4 +47,10 @@ resources: # Enable/disable document upload upload: true # Enable/disable document print - print: true \ No newline at end of file + print: true + # Set default document to view + defaultDocument: '' + # Enable/disable documents browse + browse: true + # Enable/disable HTMl rendering mode, false for image mode + htmlMode: true \ No newline at end of file diff --git a/src/main/java/com/aliensoft/quickview/config/QuickViewConfig.java b/src/main/java/com/aliensoft/quickview/config/QuickViewConfig.java index f395839..ffa4495 100644 --- a/src/main/java/com/aliensoft/quickview/config/QuickViewConfig.java +++ b/src/main/java/com/aliensoft/quickview/config/QuickViewConfig.java @@ -128,6 +128,18 @@ public class Resources{ @JsonProperty private boolean print; + @Valid + @JsonProperty + private String defaultDocument; + + @Valid + @JsonProperty + private boolean browse; + + @Valid + @JsonProperty + private boolean htmlMode; + public Boolean getRunAsService() { return runAsService; } @@ -215,6 +227,30 @@ public boolean isPrint() { public void setPrint(boolean print) { this.print = print; } + + public String getDefaultDocument() { + return defaultDocument; + } + + public void setDefaultDocument(String defaultDocument) { + this.defaultDocument = defaultDocument; + } + + public boolean isBrowse() { + return browse; + } + + public void setBrowse(boolean browse) { + this.browse = browse; + } + + public boolean isHtmlMode() { + return htmlMode; + } + + public void setHtmlMode(boolean htmlMode) { + this.htmlMode = htmlMode; + } } /** diff --git a/src/main/resources/com/aliensoft/quickview/views/quickview.ftl b/src/main/resources/com/aliensoft/quickview/views/quickview.ftl index 840f291..9e39811 100755 --- a/src/main/resources/com/aliensoft/quickview/views/quickview.ftl +++ b/src/main/resources/com/aliensoft/quickview/views/quickview.ftl @@ -23,7 +23,10 @@ rotate: ${config.resources.rotate?c}, download: ${config.resources.download?c}, upload: ${config.resources.upload?c}, - print: ${config.resources.print?c} + print: ${config.resources.print?c}, + defaultDocument: '${config.resources.defaultDocument}', + browse: ${config.resources.browse?c}, + htmlMode: ${config.resources.htmlMode?c} });