Skip to content

Commit 755a7d2

Browse files
Udated webform front end
1 parent 3290f15 commit 755a7d2

File tree

12 files changed

+558
-161
lines changed

12 files changed

+558
-161
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+

2+
namespace GroupDocs.Viewer.WebForm.FrontEnd.BusinessLayer
3+
{
4+
public class GetDocumentPageHtmlParameters
5+
{
6+
public string Path { get; set; }
7+
8+
public int PageIndex { get; set; }
9+
10+
public bool UsePngImages { get; set; }
11+
12+
public bool EmbedImagesIntoHtmlForWordFiles { get; set; }
13+
14+
public string InstanceIdToken { get; set; }
15+
16+
public string Locale { get; set; }
17+
18+
public bool SaveFontsInAllFormats { get; set; }
19+
}
20+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
namespace GroupDocs.Viewer.WebForm.FrontEnd.BusinessLayer
2+
{
3+
public class GetDocumentPageImageParameters : WatermarkedDocumentParameters
4+
{
5+
public int PageIndex { get; set; }
6+
public int? Width { get; set; }
7+
public int? Quality { get; set; }
8+
public bool UsePdf { get; set; }
9+
public bool IgnoreDocumentAbsence { get; set; }
10+
public bool UseHtmlBasedEngine { get; set; }
11+
public bool Rotate { get; set; }
12+
public string InstanceIdToken { get; set; }
13+
public string Locale { get; set; }
14+
}
15+
}
Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
using System.Collections.Generic;
2+
using System.Text;
3+
using System.Web;
4+
using System.Web.Routing;
5+
6+
7+
namespace GroupDocs.Viewer.WebForm.FrontEnd.BusinessLayer.Helpers
8+
{
9+
public static class ImageUrlHelper
10+
{
11+
public static string[] GetImageUrls(string applicationHost, int[] pageNumbers, GetImageUrlsParameters parameters)
12+
{
13+
return GetImageUrls(applicationHost, parameters.Path, parameters.FirstPage, pageNumbers.Length, parameters.Width,
14+
parameters.Quality, parameters.UsePdf,
15+
parameters.WatermarkText, parameters.WatermarkColor,
16+
parameters.WatermarkPosition,
17+
parameters.WatermarkWidth,
18+
parameters.IgnoreDocumentAbsence,
19+
parameters.UseHtmlBasedEngine, parameters.SupportPageRotation,
20+
parameters.InstanceIdToken,
21+
null,
22+
pageNumbers);
23+
}
24+
25+
public static string[] GetImageUrls(string applicationHost, int[] pageNumbers, ViewDocumentParameters parameters)
26+
{
27+
return GetImageUrls(applicationHost, parameters.Path, 0, pageNumbers.Length, parameters.Width,
28+
parameters.Quality, parameters.UsePdf,
29+
parameters.WatermarkText, parameters.WatermarkColor,
30+
parameters.WatermarkPosition,
31+
parameters.WatermarkWidth,
32+
parameters.IgnoreDocumentAbsence,
33+
parameters.UseHtmlBasedEngine, parameters.SupportPageRotation,
34+
parameters.InstanceIdToken,
35+
null,
36+
pageNumbers);
37+
}
38+
39+
private static string[] GetImageUrls(string applicationHost, string path, int startingPageNumber, int pageCount, int? pageWidth, int? quality, bool usePdf = true,
40+
string watermarkText = null, int? watermarkColor = null,
41+
WatermarkPosition? watermarkPosition = WatermarkPosition.Diagonal, float? watermarkWidth = 0,
42+
bool ignoreDocumentAbsence = false,
43+
bool useHtmlBasedEngine = false,
44+
bool supportPageRotation = false,
45+
string instanceId = null,
46+
string locale = null,
47+
int[] pageNumbers = null)
48+
{
49+
string[] pageUrls = new string[pageCount];
50+
51+
RouteValueDictionary routeValueDictionary = new RouteValueDictionary
52+
{
53+
{"path", path},
54+
{"width", pageWidth},
55+
{"quality", quality},
56+
{"usePdf", usePdf},
57+
{"useHtmlBasedEngine", useHtmlBasedEngine},
58+
{"rotate", supportPageRotation}
59+
};
60+
61+
if (!string.IsNullOrWhiteSpace(locale))
62+
routeValueDictionary.Add("locale", locale);
63+
64+
if (!string.IsNullOrEmpty(watermarkText))
65+
{
66+
routeValueDictionary.Add("watermarkText", watermarkText);
67+
routeValueDictionary.Add("watermarkColor", watermarkColor);
68+
routeValueDictionary.Add("watermarkPosition", watermarkPosition);
69+
routeValueDictionary.Add("watermarkWidth", watermarkWidth);
70+
}
71+
72+
if (!string.IsNullOrWhiteSpace(instanceId))
73+
routeValueDictionary.Add("instanceIdToken", instanceId);
74+
if (ignoreDocumentAbsence)
75+
routeValueDictionary.Add("ignoreDocumentAbsence", ignoreDocumentAbsence);
76+
77+
if (pageNumbers != null)
78+
{
79+
for (int i = 0; i < pageCount; i++)
80+
{
81+
routeValueDictionary["pageIndex"] = pageNumbers[i] - 1;
82+
pageUrls[i] = ConvertUrlToAbsolute(applicationHost, CreateRelativeRequestUrl("GetDocumentPageImage.aspx", routeValueDictionary));
83+
}
84+
}
85+
else
86+
{
87+
for (int i = 0; i < pageCount; i++)
88+
{
89+
routeValueDictionary["pageIndex"] = startingPageNumber + i;
90+
pageUrls[i] = ConvertUrlToAbsolute(applicationHost, CreateRelativeRequestUrl("GetDocumentPageImage.aspx", routeValueDictionary));
91+
}
92+
}
93+
94+
return pageUrls;
95+
}
96+
97+
private static string ConvertUrlToAbsolute(string applicationHost, string inputUrl)
98+
{
99+
string result = string.Format("{0}{1}", applicationHost, inputUrl);
100+
return result;
101+
}
102+
103+
private static string CreateRelativeRequestUrl(string actionName, RouteValueDictionary routeValueDictionary)
104+
{
105+
StringBuilder urlBuilder = new StringBuilder("/");
106+
urlBuilder.Append(actionName);
107+
if (routeValueDictionary.Count == 0)
108+
{
109+
return urlBuilder.ToString();
110+
}
111+
urlBuilder.Append("?");
112+
foreach (KeyValuePair<string, object> oneRoute in routeValueDictionary)
113+
{
114+
if (string.IsNullOrWhiteSpace(oneRoute.Key)
115+
|| oneRoute.Value == null
116+
|| string.IsNullOrWhiteSpace(oneRoute.Value.ToString()))
117+
{
118+
continue;
119+
}
120+
urlBuilder.Append(oneRoute.Key);
121+
urlBuilder.Append("=");
122+
string originalValue = oneRoute.Value.ToString();
123+
string encodedValue = HttpUtility.UrlEncode(originalValue);
124+
urlBuilder.Append(encodedValue);
125+
urlBuilder.Append("&");
126+
}
127+
urlBuilder.Remove(urlBuilder.Length - 1, 1);//remove last character '&'
128+
return urlBuilder.ToString();
129+
}
130+
}
131+
}

Showcases/WebForm_Front_End/GroupDocs.Viewer.WebForm.FrontEnd/BusinessLayer/Helpers/Utils.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,5 +294,20 @@ public static Watermark GetWatermark(string watermarkText, int? watermarkColor,
294294
throw new ArgumentOutOfRangeException();
295295
}
296296
}
297+
public static List<string> GetCssClasses(string pageHtml)
298+
{
299+
var regex = new Regex("class=['\"]([a-zA-Z0-9\\s]+)['\"]", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Multiline);
300+
301+
var matches = regex.Matches(pageHtml);
302+
303+
List<string> classes = new List<string>();
304+
for (int i = 0; i < matches.Count; i++)
305+
{
306+
var values = matches[i].Groups[1].Value.Split(' ').ToList();
307+
classes.AddRange(values);
308+
}
309+
310+
return classes.Distinct().ToList();
311+
}
297312
}
298313
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="GetDocumentPageImage.aspx.cs" Inherits="GroupDocs.Viewer.WebForm.FrontEnd.GetDocumentPageImage" %>
2+
3+
<!DOCTYPE html>
4+
5+
<html xmlns="http://www.w3.org/1999/xhtml">
6+
<head runat="server">
7+
<title></title>
8+
</head>
9+
<body>
10+
<form id="form1" runat="server">
11+
<div>
12+
13+
</div>
14+
</form>
15+
</body>
16+
</html>
Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Web;
5+
using System.Web.UI;
6+
using System.Web.UI.WebControls;
7+
using GroupDocs.Viewer;
8+
using GroupDocs.Viewer.Config;
9+
using GroupDocs.Viewer.Converter.Options;
10+
using GroupDocs.Viewer.Domain;
11+
using GroupDocs.Viewer.Domain.Options;
12+
using GroupDocs.Viewer.Handler;
13+
using GroupDocs.Viewer.WebForm.FrontEnd.BusinessLayer;
14+
using GroupDocs.Viewer.WebForm.FrontEnd.BusinessLayer.Helpers;
15+
using GroupDocs.Viewer.Domain.Html;
16+
using System.Net;
17+
using GroupDocs.Viewer.Domain.Containers;
18+
using GroupDocs.Viewer.Domain.Image;
19+
20+
using System.Net.Mime;
21+
using System.Collections.Specialized;
22+
using System.Reflection;
23+
24+
25+
namespace GroupDocs.Viewer.WebForm.FrontEnd
26+
{
27+
public partial class GetDocumentPageImage : System.Web.UI.Page
28+
{
29+
private static ViewerHtmlHandler _htmlHandler;
30+
private static ViewerImageHandler _imageHandler;
31+
private static string _storagePath = AppDomain.CurrentDomain.GetData("DataDirectory").ToString(); // App_Data folder path
32+
private static string _tempPath = AppDomain.CurrentDomain.GetData("DataDirectory") + "\\Temp";
33+
private static ViewerConfig _config;
34+
35+
protected void Page_Load(object sender, EventArgs e)
36+
{
37+
_config = new ViewerConfig
38+
{
39+
StoragePath = _storagePath,
40+
TempPath = _tempPath,
41+
UseCache = true
42+
};
43+
44+
_htmlHandler = new ViewerHtmlHandler(_config);
45+
_imageHandler = new ViewerImageHandler(_config);
46+
GetDocumentPageImageParameters parameters = new GetDocumentPageImageParameters();
47+
48+
49+
foreach (String key in Request.QueryString.AllKeys)
50+
{
51+
if (!string.IsNullOrEmpty(Request.QueryString[key]))
52+
{
53+
var propertyInfo = parameters.GetType().GetProperty(key, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance);
54+
propertyInfo.SetValue(parameters, ChangeType(Request.QueryString[key], propertyInfo.PropertyType),null);
55+
}
56+
}
57+
58+
string guid = parameters.Path;
59+
int pageIndex = parameters.PageIndex;
60+
int pageNumber = pageIndex + 1;
61+
var displayName=parameters.Path;
62+
/*
63+
//NOTE: This feature is supported starting from version 3.2.0
64+
CultureInfo cultureInfo = string.IsNullOrEmpty(parameters.Locale)
65+
? new CultureInfo("en-Us")
66+
: new CultureInfo(parameters.Locale);
67+
68+
ViewerImageHandler viewerImageHandler = new ViewerImageHandler(viewerConfig, cultureInfo);
69+
*/
70+
71+
var imageOptions = new ImageOptions
72+
{
73+
//ConvertImageFileType = _convertImageFileType,
74+
ConvertImageFileType = ConvertImageFileType.JPG,
75+
JpegQuality = 100,
76+
Watermark = Utils.GetWatermark(parameters.WatermarkText, parameters.WatermarkColor,
77+
parameters.WatermarkPosition, parameters.WatermarkWidth),
78+
Transformations = parameters.Rotate ? Transformation.Rotate : Transformation.None
79+
};
80+
81+
if (parameters.Rotate && parameters.Width.HasValue)
82+
{
83+
DocumentInfoOptions documentInfoOptions = new DocumentInfoOptions(guid);
84+
DocumentInfoContainer documentInfoContainer = _imageHandler.GetDocumentInfo(documentInfoOptions);
85+
86+
int side = parameters.Width.Value;
87+
88+
int pageAngle = documentInfoContainer.Pages[pageIndex].Angle;
89+
if (pageAngle == 90 || pageAngle == 270)
90+
imageOptions.Height = side;
91+
else
92+
imageOptions.Width = side;
93+
}
94+
95+
/*
96+
//NOTE: This feature is supported starting from version 3.2.0
97+
if (parameters.Quality.HasValue)
98+
imageOptions.JpegQuality = parameters.Quality.Value;
99+
*/
100+
101+
using (new InterProcessLock(guid))
102+
{
103+
List<PageImage> pageImages = _imageHandler.GetPages(guid, imageOptions);
104+
PageImage pageImage = pageImages.Single(_ => _.PageNumber == pageNumber);
105+
var fileStream = pageImage.Stream;
106+
// return File(pageImage.Stream, GetContentType(_convertImageFileType));
107+
byte[] Bytes = new byte[fileStream.Length];
108+
fileStream.Read(Bytes, 0, Bytes.Length);
109+
string contentDispositionString = "attachment; filename=\"" + displayName + "\"";
110+
111+
112+
contentDispositionString = new ContentDisposition { FileName = displayName, Inline = true }.ToString();
113+
114+
115+
116+
HttpContext.Current.Response.ContentType = "image/jpeg";
117+
118+
HttpContext.Current.Response.AddHeader("Content-Disposition", contentDispositionString);
119+
HttpContext.Current.Response.AddHeader("Content-Length", fileStream.Length.ToString());
120+
HttpContext.Current.Response.OutputStream.Write(Bytes, 0, Bytes.Length);
121+
HttpContext.Current.Response.Flush();
122+
HttpContext.Current.Response.End();
123+
}
124+
125+
}
126+
127+
public object ChangeType(object value, Type conversion)
128+
{
129+
var t = conversion;
130+
131+
if (t.IsGenericType && t.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
132+
{
133+
if (value == null)
134+
{
135+
return null;
136+
}
137+
138+
t = Nullable.GetUnderlyingType(t);
139+
}
140+
141+
return Convert.ChangeType(value, t);
142+
}
143+
}
144+
}

Showcases/WebForm_Front_End/GroupDocs.Viewer.WebForm.FrontEnd/GetDocumentPageImage.aspx.designer.cs

Lines changed: 26 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)