diff --git a/Fab2ApprovalSystem/Content/Site.css b/Fab2ApprovalSystem/Content/Site.css
index 7d1ad82..ab58787 100644
--- a/Fab2ApprovalSystem/Content/Site.css
+++ b/Fab2ApprovalSystem/Content/Site.css
@@ -112,7 +112,11 @@ input[type="checkbox"].input-validation-error {
}
.affix {
- position: fixed;
- top: 55px;
- left: 25px;
+ position: fixed;
+ top: 55px;
+ left: 25px;
+}
+
+.navbar-header-hidden {
+ display: none;
}
\ No newline at end of file
diff --git a/Fab2ApprovalSystem/Controllers/ECNController.cs b/Fab2ApprovalSystem/Controllers/ECNController.cs
index b0541e4..5d942be 100644
--- a/Fab2ApprovalSystem/Controllers/ECNController.cs
+++ b/Fab2ApprovalSystem/Controllers/ECNController.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Configuration;
+using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;
@@ -21,7 +22,7 @@ namespace Fab2ApprovalSystem.Controllers;
[Authorize]
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
[SessionExpireFilter]
-public class ECNController : PdfViewController {
+public class ECNController : Controller {
private const string ECN_PREFIX = "ECN_";
private const string TECN_PREFIX = "TECN_";
@@ -669,9 +670,6 @@ public class ECNController : PdfViewController {
}
}
- ///
- /// Get a list of Approvers and the status
- ///
public ActionResult GetApproversList([DataSourceRequest] DataSourceRequest request, int issueID, byte step, bool isTECN, bool isEmergrncyTECN) {
int isITARCompliant = 0;
ECN ecn = new ECN();
@@ -893,10 +891,12 @@ public class ECNController : PdfViewController {
if (!di.Exists)
di.Create();
- // To render a PDF instead of an HTML, all we need to do is call ViewPdf instead of View. This
- // requires the controller to be inherited from MyController instead of MVC's Controller.
- SavePdf(ecnFolderPath + "\\ECNForm_" + outputFileName, "ECNPdf", ecn);
- SavePdf(ecnFolderPath + "\\ECNApprovalLog_" + outputFileName, "ECNApprovalPdf", ecn);
+ string htmlText;
+ string pageTitle = string.Empty;
+ htmlText = RenderViewToString("ECNPdf", ecn);
+ StandardPdfRenderer.WritePortableDocumentFormatToFile(pageTitle, htmlText, $"{ecnFolderPath}\\ECNForm_{outputFileName}");
+ htmlText = RenderViewToString("ECNApprovalPdf", ecn);
+ StandardPdfRenderer.WritePortableDocumentFormatToFile(pageTitle, htmlText, $"{ecnFolderPath}\\ECNApprovalLog_{outputFileName}");
} catch (Exception ex) {
EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Generate PDF", Comments = ex.Message });
ecn = null;
@@ -906,6 +906,25 @@ public class ECNController : PdfViewController {
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);
+ string htmlText = writer.GetStringBuilder().ToString();
+ result = htmlText.Replace("navbar-header", "navbar-header-hidden");
+ } catch (Exception ex) {
+ result = $"Failed - {ex.Message}";
+ }
+ }
+ return result;
+ }
+
public bool GenerateECNPdfDifferentLocation(int ecnNumber, int folderName) {
ECNPdf ecn = new ECNPdf();
try {
@@ -923,9 +942,9 @@ public class ECNController : PdfViewController {
if (!di.Exists)
di.Create();
- // To render a PDF instead of an HTML, all we need to do is call ViewPdf instead of View. This
- // requires the controller to be inherited from MyController instead of MVC's Controller.
- SavePdf(ecnFolderPath + "\\ECNForm_" + outputFileName, "ECNPdf", ecn);
+ string pageTitle = string.Empty;
+ string htmlText = RenderViewToString("ECNPdf", ecn);
+ StandardPdfRenderer.WritePortableDocumentFormatToFile(pageTitle, htmlText, $"{ecnFolderPath}\\ECNForm_{outputFileName}");
} catch (Exception ex) {
EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Generate PDF", Comments = ex.Message });
ecn = null;
@@ -941,9 +960,14 @@ public class ECNController : PdfViewController {
ecn = ecnDMO.GetECNPdf(ecnNumber);
ViewBag.Category = ecnDMO.GetCategoryID(ecn);
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
- // requires the controller to be inherited from MyController instead of MVC's Controller.
- return this.ViewPdf("", "ECNPdf", ecn);
+ string pageTitle = string.Empty;
+ string htmlText = RenderViewToString("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) {
EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Print PDF", Comments = ex.Message });
ecn = null;
diff --git a/Fab2ApprovalSystem/Controllers/LotTravelerController.cs b/Fab2ApprovalSystem/Controllers/LotTravelerController.cs
index b1503d7..adb9cf0 100644
--- a/Fab2ApprovalSystem/Controllers/LotTravelerController.cs
+++ b/Fab2ApprovalSystem/Controllers/LotTravelerController.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Configuration;
+using System.IO;
using System.Linq;
using System.Threading;
using System.Web;
@@ -20,7 +21,7 @@ namespace Fab2ApprovalSystem.Controllers;
[Authorize]
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
[SessionExpireFilter]
-public class LotTravelerController : PdfViewController {
+public class LotTravelerController : Controller {
LotTravelerDMO LotTravDMO = new LotTravelerDMO();
string docTypeString = "LotTraveler";
@@ -199,9 +200,14 @@ public class LotTravelerController : PdfViewController {
try {
workRequest = LotTravDMO.GetLTWorkRequestItemPDF(workRequestID);
- // To render a PDF instead of an HTML, all we need to do is call ViewPdf instead of View. This
- // requires the controller to be inherited from MyController instead of MVC's Controller.
- return this.ViewPdf("", "WorkRequestPDF", workRequest);
+ string pageTitle = string.Empty;
+ string htmlText = RenderViewToString("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) {
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 });
@@ -210,6 +216,25 @@ 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);
+ string htmlText = writer.GetStringBuilder().ToString();
+ result = htmlText.Replace("navbar-header", "navbar-header-hidden");
+ } catch (Exception ex) {
+ result = $"Failed - {ex.Message}";
+ }
+ }
+ return result;
+ }
+
public ActionResult WorkRequestRevision(int workRequestID) {
int isITARCompliant = 1;
LTWorkRequest workRequest = new LTWorkRequest();
@@ -251,9 +276,7 @@ public class LotTravelerController : PdfViewController {
return Content("Successfully Saved");
}
- ///
- ///
- ///
+
public JsonResult GetBaseFlowLocations(string baseFlow) {
List loclist = LotTravDMO.GetBaseFlowLocations(baseFlow);
return Json(loclist, JsonRequestBehavior.AllowGet);
@@ -332,9 +355,6 @@ public class LotTravelerController : PdfViewController {
return Content(newWorkRequestID.ToString());
}
- ///
- /// For the Revison
- ///
public ActionResult UpdateMaterialDetailRevision(LTWorkRequest model) {
var modelMaterialDetail = model.LTMaterial;
int previousMaterialID = model.LTMaterial.ID;
@@ -1232,15 +1252,19 @@ public class LotTravelerController : PdfViewController {
LotTravDMO.DeleteLot(ltLotID);
}
- ///
public ActionResult DisplayLotTravlerPdf(int ltLotID, int revisionNumber) {
LotTravelerPdf traveler = new LotTravelerPdf();
try {
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
- // requires the controller to be inherited from MyController instead of MVC's Controller.
- return this.ViewPdf("", "LotTravelerPDF", traveler);
+ string pageTitle = string.Empty;
+ string htmlText = RenderViewToString("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) {
EventLogDMO.Add(new WinEventLog() { IssueID = traveler.SWRNumber, UserID = @User.Identity.Name, DocumentType = "LotTraveler", OperationType = "Generate PDF", Comments = ex.Message });
traveler = null;
diff --git a/Fab2ApprovalSystem/PdfGenerator/BinaryContentResult.cs b/Fab2ApprovalSystem/PdfGenerator/BinaryContentResult.cs
index ba08fc7..461925d 100644
--- a/Fab2ApprovalSystem/PdfGenerator/BinaryContentResult.cs
+++ b/Fab2ApprovalSystem/PdfGenerator/BinaryContentResult.cs
@@ -1,43 +1,47 @@
#if !NET8
+using System.Web;
+using System.Web.Mvc;
+using System.Web.Security;
+#endif
-// --------------------------------------------------------------------------------------------------------------------
-//
-// http://www.SemanticArchitecture.net pkalkie@gmail.com
-//
-//
-// An ActionResult used to send binary data to the browser.
-//
-// --------------------------------------------------------------------------------------------------------------------
+#if NET8
+using Microsoft.AspNetCore.Mvc;
+#endif
-namespace Fab2ApprovalSystem.PdfGenerator {
- using System.IO;
- using System.Web;
- using System.Web.Mvc;
+#if !NET8
+using System;
+using System.Collections.Generic;
+using System.Net;
+using System.Net.Http;
+using System.Security.Claims;
+using System.Threading.Tasks;
+using System.IO;
+#endif
- ///
- /// An ActionResult used to send binary data to the browser.
- ///
- public class BinaryContentResult : ActionResult {
- private readonly string contentType;
- private readonly byte[] contentBytes;
+namespace Fab2ApprovalSystem.PdfGenerator;
- public BinaryContentResult(byte[] contentBytes, string contentType) {
- this.contentBytes = contentBytes;
- this.contentType = contentType;
- }
+public class BinaryContentResult : ActionResult {
+ private readonly string contentType;
+ private readonly byte[] contentBytes;
- public override void ExecuteResult(ControllerContext context) {
- var response = context.HttpContext.Response;
- response.Clear();
- response.Cache.SetCacheability(HttpCacheability.Public);
- response.ContentType = this.contentType;
+ public BinaryContentResult(byte[] contentBytes, string contentType) {
+ this.contentBytes = contentBytes;
+ this.contentType = contentType;
+ }
- using (var stream = new MemoryStream(this.contentBytes)) {
- stream.WriteTo(response.OutputStream);
- stream.Flush();
- }
+#if !NET8
+ public override void ExecuteResult(ControllerContext context) {
+ var response = context.HttpContext.Response;
+ response.Clear();
+ response.Cache.SetCacheability(HttpCacheability.Public);
+ response.ContentType = contentType;
+
+ using (var stream = new MemoryStream(contentBytes)) {
+ stream.WriteTo(response.OutputStream);
+ stream.Flush();
}
}
-}
-#endif
\ No newline at end of file
+#endif
+
+}
\ No newline at end of file
diff --git a/Fab2ApprovalSystem/PdfGenerator/FakeView.cs b/Fab2ApprovalSystem/PdfGenerator/FakeView.cs
index 1aff427..e69de29 100644
--- a/Fab2ApprovalSystem/PdfGenerator/FakeView.cs
+++ b/Fab2ApprovalSystem/PdfGenerator/FakeView.cs
@@ -1,28 +0,0 @@
-#if !NET8
-
-// --------------------------------------------------------------------------------------------------------------------
-//
-// http://www.SemanticArchitecture.net pkalkie@gmail.com
-//
-//
-// Defines the FakeView type.
-//
-// --------------------------------------------------------------------------------------------------------------------
-
-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
\ No newline at end of file
diff --git a/Fab2ApprovalSystem/PdfGenerator/HtmlViewRenderer.cs b/Fab2ApprovalSystem/PdfGenerator/HtmlViewRenderer.cs
index d3ba69d..e69de29 100644
--- a/Fab2ApprovalSystem/PdfGenerator/HtmlViewRenderer.cs
+++ b/Fab2ApprovalSystem/PdfGenerator/HtmlViewRenderer.cs
@@ -1,49 +0,0 @@
-#if !NET8
-
-// --------------------------------------------------------------------------------------------------------------------
-//
-// http://www.SemanticArchitecture.net pkalkie@gmail.com
-//
-//
-// This class is responsible for rendering a HTML view to a string.
-//
-// --------------------------------------------------------------------------------------------------------------------
-
-namespace Fab2ApprovalSystem.PdfGenerator {
- using System.IO;
- using System.Text;
- using System.Web;
- using System.Web.Mvc;
- using System.Web.Mvc.Html;
-
- ///
- /// This class is responsible for rendering a HTML view into a string.
- ///
- 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
\ No newline at end of file
diff --git a/Fab2ApprovalSystem/PdfGenerator/PdfViewController.cs b/Fab2ApprovalSystem/PdfGenerator/PdfViewController.cs
index f55bdef..5f28270 100644
--- a/Fab2ApprovalSystem/PdfGenerator/PdfViewController.cs
+++ b/Fab2ApprovalSystem/PdfGenerator/PdfViewController.cs
@@ -1,54 +1 @@
-#if !NET8
-
-// --------------------------------------------------------------------------------------------------------------------
-//
-// http://www.SemanticArchitecture.net pkalkie@gmail.com
-//
-//
-// Extends the controller with functionality for rendering PDF views
-//
-// --------------------------------------------------------------------------------------------------------------------
-
-namespace Fab2ApprovalSystem.PdfGenerator {
- using System.Web.Mvc;
- using System.IO;
-
- ///
- /// Extends the controller with functionality for rendering PDF views
- ///
- 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
\ No newline at end of file
+
\ No newline at end of file
diff --git a/Fab2ApprovalSystem/PdfGenerator/PrintHeaderFooter.cs b/Fab2ApprovalSystem/PdfGenerator/PrintHeaderFooter.cs
index 00322fc..23af4ef 100644
--- a/Fab2ApprovalSystem/PdfGenerator/PrintHeaderFooter.cs
+++ b/Fab2ApprovalSystem/PdfGenerator/PrintHeaderFooter.cs
@@ -1,79 +1,102 @@
+#if !NET8
+using System.Web;
+using System.Web.Mvc;
+using System.Web.Security;
+#endif
#if !NET8
-namespace Fab2ApprovalSystem.PdfGenerator {
- using iTextSharp.text;
- using iTextSharp.text.pdf;
+using iTextSharp.text;
+using iTextSharp.text.pdf;
+#endif
- using System;
+#if !NET8
+using System;
+using System.Collections.Generic;
+using System.Net;
+using System.Net.Http;
+using System.Security.Claims;
+using System.Threading.Tasks;
+#endif
- ///
- /// This class represents the standard header and footer for a PDF print.
- /// application.
- ///
- public class PrintHeaderFooter : PdfPageEventHelper {
- private PdfContentByte pdfContent;
- private PdfTemplate pageNumberTemplate;
- private BaseFont baseFont;
- private DateTime printTime;
+namespace Fab2ApprovalSystem.PdfGenerator;
- public string Title { get; set; }
+#if !NET8
- public override void OnOpenDocument(PdfWriter writer, Document document) {
- printTime = DateTime.Now;
- baseFont = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
- pdfContent = writer.DirectContent;
- pageNumberTemplate = pdfContent.CreateTemplate(50, 50);
- }
+public class PrintHeaderFooter : PdfPageEventHelper {
- public override void OnStartPage(PdfWriter writer, Document document) {
- base.OnStartPage(writer, document);
+ private PdfContentByte pdfContent;
+ private PdfTemplate pageNumberTemplate;
+ private BaseFont baseFont;
+ private DateTime printTime;
+#endif
- Rectangle pageSize = document.PageSize;
+#if NET8
- if (Title != string.Empty) {
- pdfContent.BeginText();
- pdfContent.SetFontAndSize(baseFont, 11);
- pdfContent.SetRGBColorFill(0, 0, 0);
- pdfContent.SetTextMatrix(pageSize.GetLeft(40), pageSize.GetTop(40));
- pdfContent.ShowText(Title);
- pdfContent.EndText();
- }
- }
+public class PrintHeaderFooter {
- public override void OnEndPage(PdfWriter writer, Document document) {
- base.OnEndPage(writer, document);
+#endif
- int pageN = writer.PageNumber;
- string text = pageN + " - ";
- float len = baseFont.GetWidthPoint(text, 8);
+ public string Title { get; set; }
- Rectangle pageSize = document.PageSize;
- pdfContent = writer.DirectContent;
- pdfContent.SetRGBColorFill(100, 100, 100);
+#if !NET8
+ public override void OnOpenDocument(PdfWriter writer, Document document) {
+ printTime = DateTime.Now;
+ baseFont = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
+ pdfContent = writer.DirectContent;
+ pageNumberTemplate = pdfContent.CreateTemplate(50, 50);
+ }
+
+ public override void OnStartPage(PdfWriter writer, Document document) {
+ base.OnStartPage(writer, document);
+
+ Rectangle pageSize = document.PageSize;
+
+ if (Title != string.Empty) {
pdfContent.BeginText();
- pdfContent.SetFontAndSize(baseFont, 8);
- pdfContent.SetTextMatrix(pageSize.Width / 2, pageSize.GetBottom(30));
- pdfContent.ShowText(text);
+ pdfContent.SetFontAndSize(baseFont, 11);
+ pdfContent.SetRGBColorFill(0, 0, 0);
+ pdfContent.SetTextMatrix(pageSize.GetLeft(40), pageSize.GetTop(40));
+ pdfContent.ShowText(Title);
pdfContent.EndText();
-
- pdfContent.AddTemplate(pageNumberTemplate, (pageSize.Width / 2) + len, pageSize.GetBottom(30));
-
- pdfContent.BeginText();
- pdfContent.SetFontAndSize(baseFont, 8);
- pdfContent.ShowTextAligned(PdfContentByte.ALIGN_RIGHT, printTime.ToString(), pageSize.GetRight(40), pageSize.GetBottom(30), 0);
- pdfContent.EndText();
- }
-
- public override void OnCloseDocument(PdfWriter writer, Document document) {
- base.OnCloseDocument(writer, document);
-
- pageNumberTemplate.BeginText();
- pageNumberTemplate.SetFontAndSize(baseFont, 8);
- pageNumberTemplate.SetTextMatrix(0, 0);
- pageNumberTemplate.ShowText(string.Empty + (writer.PageNumber - 1));
- pageNumberTemplate.EndText();
}
}
-}
-#endif
\ No newline at end of file
+
+ public override void OnEndPage(PdfWriter writer, Document document) {
+ base.OnEndPage(writer, document);
+
+ int pageN = writer.PageNumber;
+ string text = pageN + " - ";
+ float len = baseFont.GetWidthPoint(text, 8);
+
+ Rectangle pageSize = document.PageSize;
+ pdfContent = writer.DirectContent;
+ pdfContent.SetRGBColorFill(100, 100, 100);
+
+ pdfContent.BeginText();
+ pdfContent.SetFontAndSize(baseFont, 8);
+ pdfContent.SetTextMatrix(pageSize.Width / 2, pageSize.GetBottom(30));
+ pdfContent.ShowText(text);
+ pdfContent.EndText();
+
+ pdfContent.AddTemplate(pageNumberTemplate, (pageSize.Width / 2) + len, pageSize.GetBottom(30));
+
+ pdfContent.BeginText();
+ pdfContent.SetFontAndSize(baseFont, 8);
+ pdfContent.ShowTextAligned(PdfContentByte.ALIGN_RIGHT, printTime.ToString(), pageSize.GetRight(40), pageSize.GetBottom(30), 0);
+ pdfContent.EndText();
+ }
+
+ public override void OnCloseDocument(PdfWriter writer, Document document) {
+ base.OnCloseDocument(writer, document);
+
+ pageNumberTemplate.BeginText();
+ pageNumberTemplate.SetFontAndSize(baseFont, 8);
+ pageNumberTemplate.SetTextMatrix(0, 0);
+ pageNumberTemplate.ShowText(string.Empty + (writer.PageNumber - 1));
+ pageNumberTemplate.EndText();
+ }
+
+#endif
+
+}
\ No newline at end of file
diff --git a/Fab2ApprovalSystem/PdfGenerator/StandardPdfRenderer.cs b/Fab2ApprovalSystem/PdfGenerator/StandardPdfRenderer.cs
index 27b0946..241a033 100644
--- a/Fab2ApprovalSystem/PdfGenerator/StandardPdfRenderer.cs
+++ b/Fab2ApprovalSystem/PdfGenerator/StandardPdfRenderer.cs
@@ -8,37 +8,44 @@ using System.IO;
namespace Fab2ApprovalSystem.PdfGenerator;
-///
-/// This class is responsible for rendering a html text string to a PDF document using the html renderer of iTextSharp.
-///
public class StandardPdfRenderer {
+
private const int HorizontalMargin = 40;
private const int VerticalMargin = 40;
- public byte[] Render(string htmlText, string pageTitle) {
- byte[] renderedBuffer;
-
- using (MemoryStream outputMemoryStream = new()) {
-#if !NET8
- using (Document pdfDocument = new Document(PageSize.A4, HorizontalMargin, HorizontalMargin, VerticalMargin, VerticalMargin)) {
- PdfWriter pdfWriter = PdfWriter.GetInstance(pdfDocument, outputMemoryStream);
- pdfWriter.CloseStream = false;
- pdfWriter.PageEvent = new PrintHeaderFooter { Title = pageTitle };
- pdfDocument.Open();
- using (StringReader htmlViewReader = new StringReader(htmlText)) {
- using (HTMLWorker htmlWorker = new HTMLWorker(pdfDocument)) {
- htmlWorker.Parse(htmlViewReader);
- }
- }
-
- }
-#endif
-
- renderedBuffer = new byte[outputMemoryStream.Position];
- outputMemoryStream.Position = 0;
- outputMemoryStream.Read(renderedBuffer, 0, renderedBuffer.Length);
- }
-
- return renderedBuffer;
+ public static byte[] GetPortableDocumentFormatBytes(string pageTitle, string htmlText) {
+ byte[] results;
+ MemoryStream memoryStream = GetPortableDocumentFormat(pageTitle, htmlText);
+ results = new byte[memoryStream.Position];
+ memoryStream.Position = 0;
+ memoryStream.Read(results, 0, results.Length);
+ return results;
}
+
+ public static void WritePortableDocumentFormatToFile(string pageTitle, string htmlText, string path) {
+ using (MemoryStream memoryStream = GetPortableDocumentFormat(pageTitle, htmlText)) {
+ using (FileStream fileStream = new FileStream(path, FileMode.Create)) {
+ memoryStream.CopyTo(fileStream);
+ }
+ }
+ }
+
+ public static MemoryStream GetPortableDocumentFormat(string pageTitle, string htmlText) {
+ MemoryStream result = new();
+#if !NET8
+ using (Document pdfDocument = new Document(PageSize.A4, HorizontalMargin, HorizontalMargin, VerticalMargin, VerticalMargin)) {
+ PdfWriter pdfWriter = PdfWriter.GetInstance(pdfDocument, result);
+ pdfWriter.CloseStream = false;
+ pdfWriter.PageEvent = new PrintHeaderFooter { Title = pageTitle };
+ pdfDocument.Open();
+ using (StringReader htmlViewReader = new StringReader(htmlText)) {
+ using (HTMLWorker htmlWorker = new HTMLWorker(pdfDocument)) {
+ htmlWorker.Parse(htmlViewReader);
+ }
+ }
+ }
+#endif
+ return result;
+ }
+
}
\ No newline at end of file