Skip to content
This repository was archived by the owner on Dec 30, 2022. It is now read-only.

Commit bfbf531

Browse files
authored
Merge pull request #13 from Pavel-Teplitsky/master
Added image rendering mode
2 parents 098e2ab + b6c6c00 commit bfbf531

File tree

6 files changed

+114
-14
lines changed

6 files changed

+114
-14
lines changed

configuration.yml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,10 @@ resources:
4747
# Enable/disable document upload
4848
upload: true
4949
# Enable/disable document print
50-
print: true
50+
print: true
51+
# Set default document to view
52+
defaultDocument: ''
53+
# Enable/disable documents browse
54+
browse: true
55+
# Enable/disable HTMl rendering mode, false for image mode
56+
htmlMode: true

src/main/java/com/aliensoft/quickview/config/QuickViewConfig.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,18 @@ public class Resources{
128128
@JsonProperty
129129
private boolean print;
130130

131+
@Valid
132+
@JsonProperty
133+
private String defaultDocument;
134+
135+
@Valid
136+
@JsonProperty
137+
private boolean browse;
138+
139+
@Valid
140+
@JsonProperty
141+
private boolean htmlMode;
142+
131143
public Boolean getRunAsService() {
132144
return runAsService;
133145
}
@@ -215,6 +227,30 @@ public boolean isPrint() {
215227
public void setPrint(boolean print) {
216228
this.print = print;
217229
}
230+
231+
public String getDefaultDocument() {
232+
return defaultDocument;
233+
}
234+
235+
public void setDefaultDocument(String defaultDocument) {
236+
this.defaultDocument = defaultDocument;
237+
}
238+
239+
public boolean isBrowse() {
240+
return browse;
241+
}
242+
243+
public void setBrowse(boolean browse) {
244+
this.browse = browse;
245+
}
246+
247+
public boolean isHtmlMode() {
248+
return htmlMode;
249+
}
250+
251+
public void setHtmlMode(boolean htmlMode) {
252+
this.htmlMode = htmlMode;
253+
}
218254
}
219255

220256
/**

src/main/java/com/aliensoft/quickview/domain/wrapper/LoadedPageWrapper.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
public class LoadedPageWrapper {
77
private String pageHtml;
88
private String angle;
9+
private String pageImage;
910

1011
public String getPageHtml() {
1112
return pageHtml;
@@ -22,4 +23,12 @@ public String getAngle() {
2223
public void setAngle(String angle) {
2324
this.angle = angle;
2425
}
26+
27+
public String getPageImage() {
28+
return pageImage;
29+
}
30+
31+
public void setPageImage(String pageImage) {
32+
this.pageImage = pageImage;
33+
}
2534
}

src/main/java/com/aliensoft/quickview/resources/QuickViewResource.java

Lines changed: 47 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,21 @@
1111
import com.google.gson.Gson;
1212
import com.groupdocs.viewer.config.ViewerConfig;
1313
import com.groupdocs.viewer.converter.options.HtmlOptions;
14+
import com.groupdocs.viewer.converter.options.ImageOptions;
1415
import com.groupdocs.viewer.domain.FileDescription;
1516
import com.groupdocs.viewer.domain.containers.DocumentInfoContainer;
1617
import com.groupdocs.viewer.domain.containers.FileListContainer;
1718
import com.groupdocs.viewer.domain.options.DocumentInfoOptions;
1819
import com.groupdocs.viewer.domain.options.FileListOptions;
1920
import com.groupdocs.viewer.domain.options.RotatePageOptions;
2021
import com.groupdocs.viewer.handler.ViewerHtmlHandler;
22+
import com.groupdocs.viewer.handler.ViewerImageHandler;
2123
import com.groupdocs.viewer.licensing.License;
2224
import io.dropwizard.jetty.ConnectorFactory;
2325
import io.dropwizard.jetty.HttpConnectorFactory;
2426
import io.dropwizard.server.SimpleServerFactory;
2527
import org.apache.commons.io.FilenameUtils;
28+
import org.apache.commons.io.IOUtils;
2629
import org.eclipse.jetty.server.Request;
2730
import org.json.JSONArray;
2831
import org.json.JSONObject;
@@ -50,6 +53,7 @@
5053
import java.nio.file.Paths;
5154
import java.nio.file.StandardCopyOption;
5255
import java.util.ArrayList;
56+
import java.util.Base64;
5357

5458
/**
5559
* QuickView
@@ -61,6 +65,7 @@
6165
public class QuickViewResource extends QuickViewResourcesBase{
6266
private final QuickViewConfig quickViewConfig;
6367
private final ViewerHtmlHandler viewerHtmlHandler;
68+
private final ViewerImageHandler viewerImageHandler;
6469

6570
/**
6671
* Constructor
@@ -84,6 +89,8 @@ public QuickViewResource(QuickViewConfig quickViewConfig) throws UnknownHostExce
8489
license.setLicense(quickViewConfig.getApplication().getLicensePath());
8590
// initialize viewer instance for the HTML mode
8691
viewerHtmlHandler = new ViewerHtmlHandler(config);
92+
// initialize viewer instance for the Image mode
93+
viewerImageHandler = new ViewerImageHandler(config);
8794
}
8895

8996
/**
@@ -164,14 +171,20 @@ public Object loadDocumentDescription(@Context HttpServletRequest request, @Cont
164171
String requestBody = getRequestBody(request);
165172
// get/set parameters
166173
String documentGuid = getJsonString(requestBody, "guid");
174+
boolean htmlMode = getJsonBoolean(requestBody, "htmlMode");
167175
// check if documentGuid contains path or only file name
168176
if(!Paths.get(documentGuid).isAbsolute()){
169177
documentGuid = quickViewConfig.getApplication().getFilesDirectory() + "/" + documentGuid;
170178
}
179+
DocumentInfoContainer documentInfoContainer = new DocumentInfoContainer();
171180
// get document info options
172181
DocumentInfoOptions documentInfoOptions = new DocumentInfoOptions(documentGuid);
173182
// get document info container
174-
DocumentInfoContainer documentInfoContainer = viewerHtmlHandler.getDocumentInfo(documentGuid, documentInfoOptions);
183+
if(htmlMode) {
184+
documentInfoContainer = viewerHtmlHandler.getDocumentInfo(documentGuid, documentInfoOptions);
185+
} else {
186+
documentInfoContainer = viewerImageHandler.getDocumentInfo(documentGuid, documentInfoOptions);
187+
}
175188
// return document description
176189
return objectToJson(documentInfoContainer.getPages());
177190
}catch (Exception ex){
@@ -199,18 +212,33 @@ public Object loadDocumentPage(@Context HttpServletRequest request, @Context Htt
199212
// get/set parameters
200213
String documentGuid = getJsonString(requestBody, "guid");
201214
int pageNumber = getJsonInteger(requestBody, "page");
215+
boolean htmlMode = getJsonBoolean(requestBody, "htmlMode");
202216
LoadedPageWrapper loadedPage = new LoadedPageWrapper();
217+
String angle = "0";
203218
// set options
204-
HtmlOptions htmlOptions = new HtmlOptions();
205-
htmlOptions.setPageNumber(pageNumber);
206-
htmlOptions.setCountPagesToRender(1);
207-
htmlOptions.setResourcesEmbedded(true);
208-
// get page HTML
209-
loadedPage.setPageHtml(viewerHtmlHandler.getPages(documentGuid, htmlOptions).get(0).getHtmlContent());
210-
// get page rotation angle
211-
String angle = String.valueOf(viewerHtmlHandler.getDocumentInfo(documentGuid).getPages().get(pageNumber - 1).getAngle());
219+
if(htmlMode) {
220+
HtmlOptions htmlOptions = new HtmlOptions();
221+
htmlOptions.setPageNumber(pageNumber);
222+
htmlOptions.setCountPagesToRender(1);
223+
htmlOptions.setResourcesEmbedded(true);
224+
// get page HTML
225+
loadedPage.setPageHtml(viewerHtmlHandler.getPages(documentGuid, htmlOptions).get(0).getHtmlContent());
226+
// get page rotation angle
227+
angle = String.valueOf(viewerHtmlHandler.getDocumentInfo(documentGuid).getPages().get(pageNumber - 1).getAngle());
228+
} else {
229+
ImageOptions imageOptions = new ImageOptions();
230+
imageOptions.setPageNumber(pageNumber);
231+
imageOptions.setCountPagesToRender(1);
232+
// get page image
233+
byte[] bytes = IOUtils.toByteArray(viewerImageHandler.getPages(documentGuid, imageOptions).get(0).getStream());
234+
// encode ByteArray into String
235+
String incodedImage = new String(Base64.getEncoder().encode(bytes));
236+
loadedPage.setPageImage(incodedImage);
237+
// get page rotation angle
238+
angle = String.valueOf(viewerImageHandler.getDocumentInfo(documentGuid).getPages().get(pageNumber - 1).getAngle());
239+
}
212240
loadedPage.setAngle(angle);
213-
// return html
241+
// return loaded page object
214242
return objectToJson(loadedPage);
215243
}catch (Exception ex){
216244
// set response content type
@@ -240,6 +268,7 @@ public Object rotateDocumentPages(@Context HttpServletRequest request, @Context
240268
String documentGuid = getJsonString(requestBody, "guid");
241269
int angle = Integer.parseInt(getJsonString(requestBody, "angle"));
242270
JSONArray pages = new JSONObject(requestBody).getJSONArray("pages");
271+
boolean htmlMode = getJsonBoolean(requestBody, "htmlMode");
243272
// a list of the rotated pages info
244273
ArrayList<RotatedPageWrapper> rotatedPages = new ArrayList<RotatedPageWrapper>();
245274
// rotate pages
@@ -249,11 +278,17 @@ public Object rotateDocumentPages(@Context HttpServletRequest request, @Context
249278
int pageNumber = Integer.parseInt(pages.get(i).toString());
250279
RotatePageOptions rotateOptions = new RotatePageOptions(pageNumber, angle);
251280
// perform page rotation
252-
viewerHtmlHandler.rotatePage(documentGuid, rotateOptions);
281+
String resultAngle = "0";
282+
if(htmlMode) {
283+
viewerHtmlHandler.rotatePage(documentGuid, rotateOptions);
284+
resultAngle = String.valueOf(viewerHtmlHandler.getDocumentInfo(documentGuid).getPages().get(pageNumber - 1).getAngle());
285+
} else {
286+
viewerImageHandler.rotatePage(documentGuid, rotateOptions);
287+
resultAngle = String.valueOf(viewerImageHandler.getDocumentInfo(documentGuid).getPages().get(pageNumber - 1).getAngle());
288+
}
253289
// add rotated page number
254290
rotatedPage.setPageNumber(pageNumber);
255291
// add rotated page angle
256-
String resultAngle = String.valueOf(viewerHtmlHandler.getDocumentInfo(documentGuid).getPages().get(pageNumber - 1).getAngle());
257292
rotatedPage.setAngle(resultAngle);
258293
// add rotated page object into resulting list
259294
rotatedPages.add(rotatedPage);

src/main/java/com/aliensoft/quickview/resources/QuickViewResourcesBase.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,4 +102,15 @@ protected int getJsonInteger(String json, String key){
102102
return value;
103103
}
104104

105+
protected boolean getJsonBoolean(String json, String key){
106+
boolean value = true;
107+
try {
108+
JSONObject jsonObject = new JSONObject(json);
109+
value = jsonObject.getBoolean(key);
110+
} catch (JSONException e) {
111+
e.printStackTrace();
112+
}
113+
return value;
114+
}
115+
105116
}

src/main/resources/com/aliensoft/quickview/views/quickview.ftl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,10 @@
2323
rotate: ${config.resources.rotate?c},
2424
download: ${config.resources.download?c},
2525
upload: ${config.resources.upload?c},
26-
print: ${config.resources.print?c}
26+
print: ${config.resources.print?c},
27+
defaultDocument: '${config.resources.defaultDocument}',
28+
browse: ${config.resources.browse?c},
29+
htmlMode: ${config.resources.htmlMode?c}
2730
});
2831
</script>
2932
</body>

0 commit comments

Comments
 (0)