Merged PR 17498: Removed PdfViewController, HtmlViewRenderer and FakeView to be replaced with...
Removed PdfViewController, HtmlViewRenderer and FakeView to be replaced with ViewEngineResult Render method To test use url http://mestsa05ec.infineon.com:8080/ecn/printecnpdf?ecnNumber=82654
This commit is contained in:
parent
8bae94de96
commit
65a433e9ab
@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Configuration;
|
using System.Configuration;
|
||||||
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Web;
|
using System.Web;
|
||||||
using System.Web.Mvc;
|
using System.Web.Mvc;
|
||||||
@ -21,7 +22,7 @@ namespace Fab2ApprovalSystem.Controllers;
|
|||||||
[Authorize]
|
[Authorize]
|
||||||
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
|
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
|
||||||
[SessionExpireFilter]
|
[SessionExpireFilter]
|
||||||
public class ECNController : PdfViewController {
|
public class ECNController : Controller {
|
||||||
|
|
||||||
private const string ECN_PREFIX = "ECN_";
|
private const string ECN_PREFIX = "ECN_";
|
||||||
private const string TECN_PREFIX = "TECN_";
|
private const string TECN_PREFIX = "TECN_";
|
||||||
@ -669,9 +670,6 @@ public class ECNController : PdfViewController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Get a list of Approvers and the status
|
|
||||||
/// </summary>
|
|
||||||
public ActionResult GetApproversList([DataSourceRequest] DataSourceRequest request, int issueID, byte step, bool isTECN, bool isEmergrncyTECN) {
|
public ActionResult GetApproversList([DataSourceRequest] DataSourceRequest request, int issueID, byte step, bool isTECN, bool isEmergrncyTECN) {
|
||||||
int isITARCompliant = 0;
|
int isITARCompliant = 0;
|
||||||
ECN ecn = new ECN();
|
ECN ecn = new ECN();
|
||||||
@ -893,10 +891,12 @@ public class ECNController : PdfViewController {
|
|||||||
if (!di.Exists)
|
if (!di.Exists)
|
||||||
di.Create();
|
di.Create();
|
||||||
|
|
||||||
// To render a PDF instead of an HTML, all we need to do is call ViewPdf instead of View. This
|
string htmlText;
|
||||||
// requires the controller to be inherited from MyController instead of MVC's Controller.
|
string pageTitle = string.Empty;
|
||||||
SavePdf(ecnFolderPath + "\\ECNForm_" + outputFileName, "ECNPdf", ecn);
|
htmlText = RenderViewToString("ECNPdf", ecn);
|
||||||
SavePdf(ecnFolderPath + "\\ECNApprovalLog_" + outputFileName, "ECNApprovalPdf", ecn);
|
StandardPdfRenderer.WritePortableDocumentFormatToFile(pageTitle, htmlText, $"{ecnFolderPath}\\ECNForm_{outputFileName}");
|
||||||
|
htmlText = RenderViewToString("ECNApprovalPdf", ecn);
|
||||||
|
StandardPdfRenderer.WritePortableDocumentFormatToFile(pageTitle, htmlText, $"{ecnFolderPath}\\ECNApprovalLog_{outputFileName}");
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Generate PDF", Comments = ex.Message });
|
EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Generate PDF", Comments = ex.Message });
|
||||||
ecn = null;
|
ecn = null;
|
||||||
@ -906,6 +906,24 @@ public class ECNController : PdfViewController {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private string RenderViewToString(string viewName, ECNPdf ecnPdf) {
|
||||||
|
string result;
|
||||||
|
ViewData.Model = ecnPdf;
|
||||||
|
using (StringWriter writer = new()) {
|
||||||
|
try {
|
||||||
|
ViewEngineResult viewResult = ViewEngines.Engines.FindView(ControllerContext, viewName, string.Empty);
|
||||||
|
if (viewResult is null)
|
||||||
|
return $"A view with the name '{viewName}' could not be found";
|
||||||
|
ViewContext viewContext = new(ControllerContext, viewResult.View, ViewData, TempData, writer);
|
||||||
|
viewResult.View.Render(viewContext, writer);
|
||||||
|
result = writer.GetStringBuilder().ToString();
|
||||||
|
} catch (Exception ex) {
|
||||||
|
result = $"Failed - {ex.Message}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
public bool GenerateECNPdfDifferentLocation(int ecnNumber, int folderName) {
|
public bool GenerateECNPdfDifferentLocation(int ecnNumber, int folderName) {
|
||||||
ECNPdf ecn = new ECNPdf();
|
ECNPdf ecn = new ECNPdf();
|
||||||
try {
|
try {
|
||||||
@ -923,9 +941,9 @@ public class ECNController : PdfViewController {
|
|||||||
if (!di.Exists)
|
if (!di.Exists)
|
||||||
di.Create();
|
di.Create();
|
||||||
|
|
||||||
// To render a PDF instead of an HTML, all we need to do is call ViewPdf instead of View. This
|
string pageTitle = string.Empty;
|
||||||
// requires the controller to be inherited from MyController instead of MVC's Controller.
|
string htmlText = RenderViewToString("ECNPdf", ecn);
|
||||||
SavePdf(ecnFolderPath + "\\ECNForm_" + outputFileName, "ECNPdf", ecn);
|
StandardPdfRenderer.WritePortableDocumentFormatToFile(pageTitle, htmlText, $"{ecnFolderPath}\\ECNForm_{outputFileName}");
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Generate PDF", Comments = ex.Message });
|
EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Generate PDF", Comments = ex.Message });
|
||||||
ecn = null;
|
ecn = null;
|
||||||
@ -941,9 +959,14 @@ public class ECNController : PdfViewController {
|
|||||||
ecn = ecnDMO.GetECNPdf(ecnNumber);
|
ecn = ecnDMO.GetECNPdf(ecnNumber);
|
||||||
ViewBag.Category = ecnDMO.GetCategoryID(ecn);
|
ViewBag.Category = ecnDMO.GetCategoryID(ecn);
|
||||||
ViewBag.TrainingNotificationTo = ecnDMO.GetTrainingNotificationTo(ecn, trainingDMO);
|
ViewBag.TrainingNotificationTo = ecnDMO.GetTrainingNotificationTo(ecn, trainingDMO);
|
||||||
// To render a PDF instead of an HTML, all we need to do is call ViewPdf instead of View. This
|
string pageTitle = string.Empty;
|
||||||
// requires the controller to be inherited from MyController instead of MVC's Controller.
|
string htmlText = RenderViewToString("ECNPdf", ecn);
|
||||||
return this.ViewPdf("", "ECNPdf", ecn);
|
if (System.Diagnostics.Debugger.IsAttached) {
|
||||||
|
return Content(htmlText, "text/html");
|
||||||
|
} else {
|
||||||
|
byte[] buffer = StandardPdfRenderer.GetPortableDocumentFormatBytes(pageTitle, htmlText);
|
||||||
|
return new BinaryContentResult(buffer, "application/pdf");
|
||||||
|
}
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Print PDF", Comments = ex.Message });
|
EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Print PDF", Comments = ex.Message });
|
||||||
ecn = null;
|
ecn = null;
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Configuration;
|
using System.Configuration;
|
||||||
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Web;
|
using System.Web;
|
||||||
@ -20,7 +21,7 @@ namespace Fab2ApprovalSystem.Controllers;
|
|||||||
[Authorize]
|
[Authorize]
|
||||||
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
|
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
|
||||||
[SessionExpireFilter]
|
[SessionExpireFilter]
|
||||||
public class LotTravelerController : PdfViewController {
|
public class LotTravelerController : Controller {
|
||||||
|
|
||||||
LotTravelerDMO LotTravDMO = new LotTravelerDMO();
|
LotTravelerDMO LotTravDMO = new LotTravelerDMO();
|
||||||
string docTypeString = "LotTraveler";
|
string docTypeString = "LotTraveler";
|
||||||
@ -199,9 +200,14 @@ public class LotTravelerController : PdfViewController {
|
|||||||
try {
|
try {
|
||||||
workRequest = LotTravDMO.GetLTWorkRequestItemPDF(workRequestID);
|
workRequest = LotTravDMO.GetLTWorkRequestItemPDF(workRequestID);
|
||||||
|
|
||||||
// To render a PDF instead of an HTML, all we need to do is call ViewPdf instead of View. This
|
string pageTitle = string.Empty;
|
||||||
// requires the controller to be inherited from MyController instead of MVC's Controller.
|
string htmlText = RenderViewToString("WorkRequestPDF", workRequest);
|
||||||
return this.ViewPdf("", "WorkRequestPDF", workRequest);
|
if (System.Diagnostics.Debugger.IsAttached) {
|
||||||
|
return Content(htmlText, "text/html");
|
||||||
|
} else {
|
||||||
|
byte[] buffer = StandardPdfRenderer.GetPortableDocumentFormatBytes(pageTitle, htmlText);
|
||||||
|
return new BinaryContentResult(buffer, "application/pdf");
|
||||||
|
}
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n DisplayWorkRequestPDF - LotTraveler\r\n" + ex.InnerException.ToString(), System.Diagnostics.EventLogEntryType.Error);
|
Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n DisplayWorkRequestPDF - LotTraveler\r\n" + ex.InnerException.ToString(), System.Diagnostics.EventLogEntryType.Error);
|
||||||
EventLogDMO.Add(new WinEventLog() { IssueID = workRequest.SWRNumber, UserID = @User.Identity.Name, DocumentType = "LotTravler", OperationType = "Generate PDF", Comments = ex.Message });
|
EventLogDMO.Add(new WinEventLog() { IssueID = workRequest.SWRNumber, UserID = @User.Identity.Name, DocumentType = "LotTravler", OperationType = "Generate PDF", Comments = ex.Message });
|
||||||
@ -210,6 +216,24 @@ public class LotTravelerController : PdfViewController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private string RenderViewToString(string viewName, object model) {
|
||||||
|
string result;
|
||||||
|
ViewData.Model = model;
|
||||||
|
using (StringWriter writer = new()) {
|
||||||
|
try {
|
||||||
|
ViewEngineResult viewResult = ViewEngines.Engines.FindView(ControllerContext, viewName, string.Empty);
|
||||||
|
if (viewResult is null)
|
||||||
|
return $"A view with the name '{viewName}' could not be found";
|
||||||
|
ViewContext viewContext = new(ControllerContext, viewResult.View, ViewData, TempData, writer);
|
||||||
|
viewResult.View.Render(viewContext, writer);
|
||||||
|
result = writer.GetStringBuilder().ToString();
|
||||||
|
} catch (Exception ex) {
|
||||||
|
result = $"Failed - {ex.Message}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
public ActionResult WorkRequestRevision(int workRequestID) {
|
public ActionResult WorkRequestRevision(int workRequestID) {
|
||||||
int isITARCompliant = 1;
|
int isITARCompliant = 1;
|
||||||
LTWorkRequest workRequest = new LTWorkRequest();
|
LTWorkRequest workRequest = new LTWorkRequest();
|
||||||
@ -251,9 +275,7 @@ public class LotTravelerController : PdfViewController {
|
|||||||
|
|
||||||
return Content("Successfully Saved");
|
return Content("Successfully Saved");
|
||||||
}
|
}
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
public JsonResult GetBaseFlowLocations(string baseFlow) {
|
public JsonResult GetBaseFlowLocations(string baseFlow) {
|
||||||
List<BaseFlowLocation> loclist = LotTravDMO.GetBaseFlowLocations(baseFlow);
|
List<BaseFlowLocation> loclist = LotTravDMO.GetBaseFlowLocations(baseFlow);
|
||||||
return Json(loclist, JsonRequestBehavior.AllowGet);
|
return Json(loclist, JsonRequestBehavior.AllowGet);
|
||||||
@ -332,9 +354,6 @@ public class LotTravelerController : PdfViewController {
|
|||||||
return Content(newWorkRequestID.ToString());
|
return Content(newWorkRequestID.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// For the Revison
|
|
||||||
/// </summary>
|
|
||||||
public ActionResult UpdateMaterialDetailRevision(LTWorkRequest model) {
|
public ActionResult UpdateMaterialDetailRevision(LTWorkRequest model) {
|
||||||
var modelMaterialDetail = model.LTMaterial;
|
var modelMaterialDetail = model.LTMaterial;
|
||||||
int previousMaterialID = model.LTMaterial.ID;
|
int previousMaterialID = model.LTMaterial.ID;
|
||||||
@ -1232,15 +1251,19 @@ public class LotTravelerController : PdfViewController {
|
|||||||
LotTravDMO.DeleteLot(ltLotID);
|
LotTravDMO.DeleteLot(ltLotID);
|
||||||
}
|
}
|
||||||
|
|
||||||
///
|
|
||||||
public ActionResult DisplayLotTravlerPdf(int ltLotID, int revisionNumber) {
|
public ActionResult DisplayLotTravlerPdf(int ltLotID, int revisionNumber) {
|
||||||
LotTravelerPdf traveler = new LotTravelerPdf();
|
LotTravelerPdf traveler = new LotTravelerPdf();
|
||||||
try {
|
try {
|
||||||
traveler = LotTravDMO.GetLotTravlerPdf(ltLotID, revisionNumber);
|
traveler = LotTravDMO.GetLotTravlerPdf(ltLotID, revisionNumber);
|
||||||
|
|
||||||
// To render a PDF instead of an HTML, all we need to do is call ViewPdf instead of View. This
|
string pageTitle = string.Empty;
|
||||||
// requires the controller to be inherited from MyController instead of MVC's Controller.
|
string htmlText = RenderViewToString("LotTravelerPDF", traveler);
|
||||||
return this.ViewPdf("", "LotTravelerPDF", traveler);
|
if (System.Diagnostics.Debugger.IsAttached) {
|
||||||
|
return Content(htmlText, "text/html");
|
||||||
|
} else {
|
||||||
|
byte[] buffer = StandardPdfRenderer.GetPortableDocumentFormatBytes(pageTitle, htmlText);
|
||||||
|
return new BinaryContentResult(buffer, "application/pdf");
|
||||||
|
}
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
EventLogDMO.Add(new WinEventLog() { IssueID = traveler.SWRNumber, UserID = @User.Identity.Name, DocumentType = "LotTraveler", OperationType = "Generate PDF", Comments = ex.Message });
|
EventLogDMO.Add(new WinEventLog() { IssueID = traveler.SWRNumber, UserID = @User.Identity.Name, DocumentType = "LotTraveler", OperationType = "Generate PDF", Comments = ex.Message });
|
||||||
traveler = null;
|
traveler = null;
|
||||||
|
@ -325,9 +325,6 @@
|
|||||||
<Compile Include="Models\WinEventLogModel.cs" />
|
<Compile Include="Models\WinEventLogModel.cs" />
|
||||||
<Compile Include="Models\WorkFlowModels.cs" />
|
<Compile Include="Models\WorkFlowModels.cs" />
|
||||||
<Compile Include="PdfGenerator\BinaryContentResult.cs" />
|
<Compile Include="PdfGenerator\BinaryContentResult.cs" />
|
||||||
<Compile Include="PdfGenerator\FakeView.cs" />
|
|
||||||
<Compile Include="PdfGenerator\HtmlViewRenderer.cs" />
|
|
||||||
<Compile Include="PdfGenerator\PdfViewController.cs" />
|
|
||||||
<Compile Include="PdfGenerator\PrintHeaderFooter.cs" />
|
<Compile Include="PdfGenerator\PrintHeaderFooter.cs" />
|
||||||
<Compile Include="PdfGenerator\StandardPdfRenderer.cs" />
|
<Compile Include="PdfGenerator\StandardPdfRenderer.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
@ -1,28 +0,0 @@
|
|||||||
#if !NET8
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------------------------------------------
|
|
||||||
// <copyright file="FakeView.cs" company="SemanticArchitecture">
|
|
||||||
// http://www.SemanticArchitecture.net pkalkie@gmail.com
|
|
||||||
// </copyright>
|
|
||||||
// <summary>
|
|
||||||
// Defines the FakeView type.
|
|
||||||
// </summary>
|
|
||||||
// --------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
namespace Fab2ApprovalSystem.PdfGenerator {
|
|
||||||
using System;
|
|
||||||
using System.IO;
|
|
||||||
using System.Web.Mvc;
|
|
||||||
|
|
||||||
public class FakeView : IView {
|
|
||||||
#region IView Members
|
|
||||||
|
|
||||||
public void Render(ViewContext viewContext, TextWriter writer) {
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,49 +0,0 @@
|
|||||||
#if !NET8
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------------------------------------------
|
|
||||||
// <copyright file="HtmlViewRenderer.cs" company="SemanticArchitecture">
|
|
||||||
// http://www.SemanticArchitecture.net pkalkie@gmail.com
|
|
||||||
// </copyright>
|
|
||||||
// <summary>
|
|
||||||
// This class is responsible for rendering a HTML view to a string.
|
|
||||||
// </summary>
|
|
||||||
// --------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
namespace Fab2ApprovalSystem.PdfGenerator {
|
|
||||||
using System.IO;
|
|
||||||
using System.Text;
|
|
||||||
using System.Web;
|
|
||||||
using System.Web.Mvc;
|
|
||||||
using System.Web.Mvc.Html;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// This class is responsible for rendering a HTML view into a string.
|
|
||||||
/// </summary>
|
|
||||||
public class HtmlViewRenderer {
|
|
||||||
public string RenderViewToString(Controller controller, string viewName, object viewData) {
|
|
||||||
var renderedView = new StringBuilder();
|
|
||||||
using (var responseWriter = new StringWriter(renderedView)) {
|
|
||||||
var fakeResponse = new HttpResponse(responseWriter);
|
|
||||||
var fakeContext = new HttpContext(HttpContext.Current.Request, fakeResponse);
|
|
||||||
var fakeControllerContext = new ControllerContext(new HttpContextWrapper(fakeContext), controller.ControllerContext.RouteData, controller.ControllerContext.Controller);
|
|
||||||
|
|
||||||
var oldContext = HttpContext.Current;
|
|
||||||
HttpContext.Current = fakeContext;
|
|
||||||
|
|
||||||
using (var viewPage = new ViewPage()) {
|
|
||||||
var html = new HtmlHelper(CreateViewContext(responseWriter, fakeControllerContext), viewPage);
|
|
||||||
html.RenderPartial(viewName, viewData);
|
|
||||||
HttpContext.Current = oldContext;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return renderedView.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static ViewContext CreateViewContext(TextWriter responseWriter, ControllerContext fakeControllerContext) {
|
|
||||||
return new ViewContext(fakeControllerContext, new FakeView(), new ViewDataDictionary(), new TempDataDictionary(), responseWriter);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,54 +0,0 @@
|
|||||||
#if !NET8
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------------------------------------------
|
|
||||||
// <copyright file="PdfViewController.cs" company="SemanticArchitecture">
|
|
||||||
// http://www.SemanticArchitecture.net pkalkie@gmail.com
|
|
||||||
// </copyright>
|
|
||||||
// <summary>
|
|
||||||
// Extends the controller with functionality for rendering PDF views
|
|
||||||
// </summary>
|
|
||||||
// --------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
namespace Fab2ApprovalSystem.PdfGenerator {
|
|
||||||
using System.Web.Mvc;
|
|
||||||
using System.IO;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Extends the controller with functionality for rendering PDF views
|
|
||||||
/// </summary>
|
|
||||||
public class PdfViewController : Controller {
|
|
||||||
private readonly HtmlViewRenderer htmlViewRenderer;
|
|
||||||
private readonly StandardPdfRenderer standardPdfRenderer;
|
|
||||||
|
|
||||||
public PdfViewController() {
|
|
||||||
this.htmlViewRenderer = new HtmlViewRenderer();
|
|
||||||
this.standardPdfRenderer = new StandardPdfRenderer();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected ActionResult ViewPdf(string pageTitle, string viewName, object model) {
|
|
||||||
// Render the view html to a string.
|
|
||||||
string htmlText = this.htmlViewRenderer.RenderViewToString(this, viewName, model);
|
|
||||||
|
|
||||||
// Let the html be rendered into a PDF document through iTextSharp.
|
|
||||||
byte[] buffer = standardPdfRenderer.Render(htmlText, pageTitle);
|
|
||||||
|
|
||||||
// Return the PDF as a binary stream to the client.
|
|
||||||
return new BinaryContentResult(buffer, "application/pdf");
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void SavePdf(string fileName, string viewName, object model) {
|
|
||||||
// Render the view html to a string.
|
|
||||||
string htmlText = this.htmlViewRenderer.RenderViewToString(this, viewName, model);
|
|
||||||
|
|
||||||
// Let the html be rendered into a PDF document through iTextSharp.
|
|
||||||
byte[] buffer = standardPdfRenderer.Render(htmlText, "");
|
|
||||||
|
|
||||||
using (FileStream fs = new FileStream(fileName, FileMode.Create)) {
|
|
||||||
fs.Write(buffer, 0, buffer.Length);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,27 +1,38 @@
|
|||||||
#if !NET8
|
|
||||||
using iTextSharp.text;
|
using iTextSharp.text;
|
||||||
using iTextSharp.text.html.simpleparser;
|
using iTextSharp.text.html.simpleparser;
|
||||||
using iTextSharp.text.pdf;
|
using iTextSharp.text.pdf;
|
||||||
#endif
|
|
||||||
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
|
||||||
namespace Fab2ApprovalSystem.PdfGenerator;
|
namespace Fab2ApprovalSystem.PdfGenerator;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// This class is responsible for rendering a html text string to a PDF document using the html renderer of iTextSharp.
|
|
||||||
/// </summary>
|
|
||||||
public class StandardPdfRenderer {
|
public class StandardPdfRenderer {
|
||||||
|
|
||||||
private const int HorizontalMargin = 40;
|
private const int HorizontalMargin = 40;
|
||||||
private const int VerticalMargin = 40;
|
private const int VerticalMargin = 40;
|
||||||
|
|
||||||
public byte[] Render(string htmlText, string pageTitle) {
|
public static byte[] GetPortableDocumentFormatBytes(string pageTitle, string htmlText) {
|
||||||
byte[] renderedBuffer;
|
byte[] results;
|
||||||
|
using (MemoryStream memoryStream = GetPortableDocumentFormat(pageTitle, htmlText)) {
|
||||||
|
results = new byte[memoryStream.Position];
|
||||||
|
memoryStream.Position = 0;
|
||||||
|
memoryStream.Read(results, 0, results.Length);
|
||||||
|
}
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
using (MemoryStream outputMemoryStream = new()) {
|
public static void WritePortableDocumentFormatToFile(string pageTitle, string htmlText, string path) {
|
||||||
#if !NET8
|
using (MemoryStream memoryStream = GetPortableDocumentFormat(pageTitle, htmlText)) {
|
||||||
using (Document pdfDocument = new Document(PageSize.A4, HorizontalMargin, HorizontalMargin, VerticalMargin, VerticalMargin)) {
|
using (FileStream fileStream = new(path, FileMode.Create)) {
|
||||||
PdfWriter pdfWriter = PdfWriter.GetInstance(pdfDocument, outputMemoryStream);
|
memoryStream.CopyTo(fileStream);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static MemoryStream GetPortableDocumentFormat(string pageTitle, string htmlText) {
|
||||||
|
MemoryStream result = new();
|
||||||
|
using (Document pdfDocument = new Document(PageSize.A4, HorizontalMargin, HorizontalMargin, VerticalMargin, VerticalMargin)) {
|
||||||
|
using (PdfWriter pdfWriter = PdfWriter.GetInstance(pdfDocument, result)) {
|
||||||
pdfWriter.CloseStream = false;
|
pdfWriter.CloseStream = false;
|
||||||
pdfWriter.PageEvent = new PrintHeaderFooter { Title = pageTitle };
|
pdfWriter.PageEvent = new PrintHeaderFooter { Title = pageTitle };
|
||||||
pdfDocument.Open();
|
pdfDocument.Open();
|
||||||
@ -30,15 +41,9 @@ public class StandardPdfRenderer {
|
|||||||
htmlWorker.Parse(htmlViewReader);
|
htmlWorker.Parse(htmlViewReader);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
renderedBuffer = new byte[outputMemoryStream.Position];
|
|
||||||
outputMemoryStream.Position = 0;
|
|
||||||
outputMemoryStream.Read(renderedBuffer, 0, renderedBuffer.Length);
|
|
||||||
}
|
}
|
||||||
|
return result;
|
||||||
return renderedBuffer;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user