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:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user