123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- using FastReport.Export.Html;
- using FastReport.Web.Infrastructure;
- #if !OPENSOURCE
- using FastReport.Export.Pdf;
- #endif
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Text;
- namespace FastReport.Web.Services
- {
- internal sealed class PrintService : IPrintService
- {
- public byte[] PrintReport(WebReport webReport, string printMode)
- {
- switch (printMode)
- {
- case "html":
- return PrintHtml(webReport);
- #if !OPENSOURCE
- case "pdf":
- return PrintPdf(webReport);
- #endif
- default:
- return null;
- }
- }
- private byte[] PrintHtml(WebReport webReport)
- {
- webReport.PictureCache.Clear();
- using (var htmlExport = new HTMLExport())
- {
- htmlExport.OpenAfterExport = false;
- htmlExport.Navigator = false;
- htmlExport.Layers = webReport.Layers;
- htmlExport.SinglePage = true;
- htmlExport.Pictures = webReport.Pictures;
- htmlExport.Print = true;
- htmlExport.Preview = true;
- htmlExport.SubFolder = false;
- htmlExport.EmbedPictures = webReport.EmbedPictures;
- htmlExport.EnableMargins = webReport.EnableMargins;
- //htmlExport.WebImagePrefix = WebUtils.ToUrl(FastReportGlobal.FastReportOptions.RouteBasePath, controller.RouteBasePath, ID, "picture") + "/";
- htmlExport.WebImagePrefix = WebUtils.ToUrl(FastReportGlobal.FastReportOptions.RoutePathBaseRoot, FastReportGlobal.FastReportOptions.RouteBasePath, $"preview.getPicture?reportId={webReport.ID}&pictureId=");
- htmlExport.ExportMode = HTMLExport.ExportType.WebPrint;
- byte[] file = null;
- using (MemoryStream ms = new MemoryStream())
- {
- htmlExport.Export(webReport.Report, ms);
- file = ms.ToArray();
- }
- if (htmlExport.PrintPageData != null)
- {
- //WebReportCache cache = new WebReportCache(this.Context);
- // add all pictures in cache
- for (int i = 0; i < htmlExport.PrintPageData.Pictures.Count; i++)
- {
- Stream stream = htmlExport.PrintPageData.Pictures[i];
- byte[] image = new byte[stream.Length];
- stream.Position = 0;
- int n = stream.Read(image, 0, (int)stream.Length);
- string picGuid = htmlExport.PrintPageData.Guids[i];
- //cache.PutObject(picGuid, image);
- webReport.PictureCache[picGuid] = image;
- }
- // cleanup
- for (int i = 0; i < htmlExport.PrintPageData.Pictures.Count; i++)
- {
- Stream stream = htmlExport.PrintPageData.Pictures[i];
- stream.Dispose();
- stream = null;
- }
- htmlExport.PrintPageData.Pictures.Clear();
- htmlExport.PrintPageData.Guids.Clear();
- }
- return file;
- }
- }
- #if !OPENSOURCE
- private byte[] PrintPdf(WebReport webReport)
- {
- using (var pdfExport = new PDFExport())
- {
- pdfExport.OpenAfterExport = false;
- //pdfExport.EmbeddingFonts = PdfEmbeddingFonts;
- //pdfExport.TextInCurves = PdfTextInCurves;
- //pdfExport.Background = PdfBackground;
- //pdfExport.PrintOptimized = PdfPrintOptimized;
- //pdfExport.Title = PdfTitle;
- //pdfExport.Author = PdfAuthor;
- //pdfExport.Subject = PdfSubject;
- //pdfExport.Keywords = PdfKeywords;
- //pdfExport.Creator = PdfCreator;
- //pdfExport.Producer = PdfProducer;
- //pdfExport.Outline = PdfOutline;
- //pdfExport.DisplayDocTitle = PdfDisplayDocTitle;
- //pdfExport.HideToolbar = PdfHideToolbar;
- //pdfExport.HideMenubar = PdfHideMenubar;
- //pdfExport.HideWindowUI = PdfHideWindowUI;
- //pdfExport.FitWindow = PdfFitWindow;
- //pdfExport.CenterWindow = PdfCenterWindow;
- //pdfExport.PrintScaling = PdfPrintScaling;
- //pdfExport.UserPassword = PdfUserPassword;
- //pdfExport.OwnerPassword = PdfOwnerPassword;
- //pdfExport.AllowPrint = PdfAllowPrint;
- //pdfExport.AllowCopy = PdfAllowCopy;
- //pdfExport.AllowModify = PdfAllowModify;
- //pdfExport.AllowAnnotate = PdfAllowAnnotate;
- //pdfExport.PdfCompliance = PdfA ? PDFExport.PdfStandard.PdfA_2a : PDFExport.PdfStandard.None;
- pdfExport.ShowPrintDialog = true;
- pdfExport.ExportMode = PDFExport.ExportType.WebPrint;
- using (MemoryStream ms = new MemoryStream())
- {
- pdfExport.Export(webReport.Report, ms);
- return ms.ToArray();
- }
- }
- }
- #endif
- }
- }
|