private Watermark GetWatermark(ViewDocumentParameters request)
        {
            if (string.IsNullOrWhiteSpace(request.WatermarkText))
                return null;

            return new Watermark(request.WatermarkText)
                {
                    Color = request.WatermarkColor.HasValue
                        ? Color.FromArgb(request.WatermarkColor.Value)
                        : (Color?)Color.Red,
                    Position = ToWatermarkPosition(request.WatermarkPosition),
                    Width = request.WatermarkWidth
                };
        }
 private string GetFileUrl(ViewDocumentParameters request)
 {
     return GetFileUrl(request.Path, false, false, request.FileDisplayName);
 }
 private string GetPdfPrintUrl(ViewDocumentParameters request)
 {
     return GetFileUrl(request.Path, true, true, request.FileDisplayName,
         request.WatermarkText, request.WatermarkColor,
         request.WatermarkPosition, request.WatermarkWidth,
         request.IgnoreDocumentAbsence,
         request.UseHtmlBasedEngine, request.SupportPageRotation);
 }
        public ActionResult ViewDocument(ViewDocumentParameters request)
        {
            var fileName = Path.GetFileName(request.Path);

            var result = new ViewDocumentResponse
            {
                pageCss = new string[] {},
                lic = true,
                pdfDownloadUrl = GetPdfDownloadUrl(request),
                pdfPrintUrl = GetPdfPrintUrl(request),
                url = GetFileUrl(request),
                path = request.Path,
                name = fileName
            };

            var docInfo = _imageHandler.GetDocumentInfo(new DocumentInfoOptions(request.Path));
            result.documentDescription = new FileDataJsonSerializer(docInfo.Pages, new FileDataOptions()).Serialize(true);
            result.docType = docInfo.DocumentType;
            result.fileType = docInfo.FileType;

            var imageOptions = new ImageOptions {Watermark = GetWatermark(request)};
            var imagePages = _imageHandler.GetPages(request.Path, imageOptions);

            // Provide images urls
            var urls = new List<string>();

            // If no cache - save images to temp folder
            //var tempFolderPath = Path.Combine(Microsoft.SqlServer.Server.MapPath("~"), "Content", "TempStorage");
            var tempFolderPath = Path.Combine(HttpContext.Server.MapPath("~"), "Content", "TempStorage");

            foreach (var pageImage in imagePages)
            {
                var docFoldePath = Path.Combine(tempFolderPath, request.Path);

                if (!Directory.Exists(docFoldePath))
                    Directory.CreateDirectory(docFoldePath);

                var pageImageName = string.Format("{0}\\{1}.png", docFoldePath, pageImage.PageNumber);

                using (var stream = pageImage.Stream)
                using (FileStream fileStream = new FileStream(pageImageName, FileMode.Create))
                {
                    stream.Seek(0, SeekOrigin.Begin);
                    stream.CopyTo(fileStream);
                }

                var baseUrl = Request.Url.Scheme + "://" + Request.Url.Authority + Request.ApplicationPath.TrimEnd('/') +
                              "/";
                urls.Add(string.Format("{0}Content/TempStorage/{1}/{2}.png", baseUrl, request.Path, pageImage.PageNumber));
            }

            result.imageUrls = urls.ToArray();

            var serializer = new JavaScriptSerializer {MaxJsonLength = int.MaxValue};

            var serializedData = serializer.Serialize(result);
            return Content(serializedData, "application/json");
        }