First version of the report generating engine finished, Both front and back pages are merged into one PDF. Seems the user's screen resolution and/or size affect the size of the PDF document, I feel this is a sort of bug that must be fixed at some point.

This commit is contained in:
2017-05-08 19:51:45 -05:00
parent 15abab5f50
commit 718562222d
10 changed files with 170 additions and 143 deletions
+32 -38
View File
@@ -1,7 +1,7 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Drawing.Printing;
using System.IO;
using System.Linq;
using System.Web.UI;
using Pechkin;
@@ -10,34 +10,28 @@ namespace AdvertsingProfitControl
{
internal class BackPageGenerator
{
FrmLogConsole _console = FrmLogConsole.GetStaticInstance;
public byte[] RenderHtmlCodeToImage(string path, string targetPath)
/// <summary>
/// Generates the back page of the report, Weekly Inventory Control, as a single PDF file.
/// </summary>
/// <param name="date"></param>
public void GenerateBackPage(DateTime date)
{
var htmlCode = File.ReadAllLines(path);
var code = htmlCode.Aggregate("", (current, line) => current + "\r\n" + line);
try
var stringWriter = new StringWriter();
var writer = new HtmlTextWriter(stringWriter);
BuildReportBackPage(date, ref writer);
var backPage = new SimplePechkin(new GlobalConfig().SetPaperOrientation(false).SetPaperSize(PaperKind.A4)).Convert(stringWriter.ToString());
//
using (var fs = new FileStream(GlobalClasses.LogFilePath + "Back.pdf", FileMode.Create, FileAccess.Write))
{
var config = new GlobalConfig().SetPaperSize(PaperKind.A4).SetPaperOrientation(true);
var pdfBuf = new SimplePechkin(config).Convert(code);
using (var fs = new FileStream(targetPath, FileMode.Create, FileAccess.ReadWrite))
{
fs.Write(pdfBuf, 0, pdfBuf.Length);
}
return pdfBuf;
fs.Write(backPage, 0, backPage.Length);
}
catch (Exception e)
{
_console.WriteToLog(FrmLogConsole.Level.Critical,
"Failed to generate an updated image for the back page of Advertising Profit Control.");
_console.WriteToLog(FrmLogConsole.Level.Debug, e.Message);
_console.WriteToLog(FrmLogConsole.Level.Info, "This is most likely a screw you from the GDI+ subsystem of Windows.");
}
return new byte[1];
}
public void BuildReportBackPage(DateTime date, ref HtmlTextWriter writer)
/// <summary>
/// Generates the HTML code for the back page, Weekly Inventory Control.
/// </summary>
/// <param name="date"></param>
/// <param name="writer"></param>
private void BuildReportBackPage(DateTime date, ref HtmlTextWriter writer)
{
var db = new AdvertisingProfitControlModel();
var dateRecord = db.WeekEndingDates.SingleOrDefault(x => x.EndingDate == date);
@@ -46,18 +40,18 @@ namespace AdvertsingProfitControl
var taxable = db.Taxables.SingleOrDefault(x => x.FkDateId == dateRecord.Id);
var costAnylsis = db.CostAnalysis.SingleOrDefault(x => x.FkDateId == dateRecord.Id);
//writer.Write("<!DOCTYPE html>\n");
//writer.RenderBeginTag(HtmlTextWriterTag.Html);
//writer.RenderBeginTag(HtmlTextWriterTag.Head);
//writer.AddAttribute(HtmlTextWriterAttribute.Type, "text/css");
//writer.RenderBeginTag(HtmlTextWriterTag.Style);
//writer.Write("td{margins:0px; padding:2px; border:1px solid black; text-align:left; vertical-align:bottom}");
//writer.RenderEndTag();//style
//writer.RenderEndTag();//Head
//writer.RenderBeginTag(HtmlTextWriterTag.Body);
writer.AddAttribute(HtmlTextWriterAttribute.Style, "page-break-inside: avoid; page-break-before:always");
writer.RenderBeginTag(HtmlTextWriterTag.Div);//div
writer.AddAttribute(HtmlTextWriterAttribute.Style, "border-collapse: collapse; width:50%; -webkit-transform: rotate(270deg)");
writer.Write("<!DOCTYPE html>\n");
writer.RenderBeginTag(HtmlTextWriterTag.Html);
writer.RenderBeginTag(HtmlTextWriterTag.Head);
writer.AddAttribute(HtmlTextWriterAttribute.Type, "text/css");
writer.RenderBeginTag(HtmlTextWriterTag.Style);
writer.Write("td{margins:0px; padding:2px; border:1px solid black; text-align:left; vertical-align:bottom; font-size:20px}");
writer.RenderEndTag();//style
writer.RenderEndTag();//Head
writer.RenderBeginTag(HtmlTextWriterTag.Body);
//writer.AddAttribute(HtmlTextWriterAttribute.Style, "page-break-inside: avoid; page-break-before:always");
//writer.RenderBeginTag(HtmlTextWriterTag.Div);//div
writer.AddAttribute(HtmlTextWriterAttribute.Style, "border-collapse: collapse; width:100%; height:100%");
writer.RenderBeginTag(HtmlTextWriterTag.Table);
//Create the header as the first row.
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
@@ -372,7 +366,7 @@ namespace AdvertsingProfitControl
writer.RenderEndTag();//tr
}
writer.RenderEndTag();//table
writer.RenderEndTag();//div
//writer.RenderEndTag();//div
writer.RenderEndTag();//body
writer.RenderEndTag();//html
}