Added “Final Page” logic Added “Final Page” logic, fixed PDF compare where it wasn’t finding the file in the Compare folder Added Caution and Note boxes for Turkey Point Null check and logic for PosAdjust format variable Added “Final Page” message logic Fix to get proper with of tabs containing a solid bullet
125 lines
4.7 KiB
C#
125 lines
4.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.Drawing;
|
|
using iTextSharp.text.pdf;
|
|
using iTextSharp.text;
|
|
using VEPROMS.CSLA.Library;
|
|
|
|
|
|
namespace Volian.Print.Library
|
|
{
|
|
public partial class vlnBox : vlnPrintObject
|
|
{
|
|
private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
|
private int _LineType; /* how to represent?? */
|
|
private System.Drawing.Color _Color;
|
|
public System.Drawing.Color Color
|
|
{
|
|
get { return _Color; }
|
|
set { _Color = value; }
|
|
}
|
|
private Box _MyBox;
|
|
|
|
public Box MyBox
|
|
{
|
|
get { return _MyBox; }
|
|
set { _MyBox = value; }
|
|
}
|
|
// the following two fields are used if 'boxed' step, thus
|
|
// no 'Box' was defined in format file.
|
|
public string DefBox = null;
|
|
public float DefEnd = 0;
|
|
public vlnBox()
|
|
{
|
|
}
|
|
public vlnBox(vlnParagraph paragraph)
|
|
{
|
|
}
|
|
public const string BoxThin = "\x2510.\x2500.\x250c.\x2502. . .\x2518.\x2514. .\x2500. . ";
|
|
const string BoxThick = "\x2584.\x2584.\x2584.\x2588. . .\x2580.\x2580. .\x2580. . ";
|
|
const string BoxDouble = "\x2557.\x2550.\x2554.\x2551. . .\x255D.\x255A. .\x2550. . ";
|
|
const string BoxFPLNote = "\x2557.\x2550\xad.\x2554\xad.\x2551. . .\x255d.\x255a\xad. .\x2550\xad. . ";
|
|
const string BoxFPLCaution = "\x2588.\x2580.\x2588.\x2588. . .\x2588.\x2588. .\x2584. . ";
|
|
public override float ToPdf(PdfContentByte cb, float yPageStart, float yTopMargin, float yBottomMargin)
|
|
{
|
|
cb.SaveState();
|
|
VlnSvgPageHelper _MyPageHelper = cb.PdfWriter.PageEvent as VlnSvgPageHelper;
|
|
PdfLayer textLayer = _MyPageHelper == null ? null : _MyPageHelper.TextLayer;
|
|
if (textLayer != null) cb.BeginLayer(textLayer);
|
|
MyContentByte = cb;
|
|
//Console.WriteLine("'{0}','{1}'", CharToAsc(MyBox.BoxStyle), MyParent.MyItemInfo.ShortPath);
|
|
float top = CalculateYOffset(yPageStart, yTopMargin) - (7*MyPageHelper.YMultiplier);
|
|
float bottom = top - (Height * MyPageHelper.YMultiplier);
|
|
float left = (float)((MyBox.Start ?? 0) + MyParent.MyItemInfo.MyDocStyle.Layout.LeftMargin);
|
|
float right = (float)MyParent.MyItemInfo.MyDocStyle.Layout.LeftMargin + (float)(MyBox.End ?? DefEnd);
|
|
iTextSharp.text.Color boxColor = new iTextSharp.text.Color(PrintOverride.OverrideBoxColor(System.Drawing.Color.Black));
|
|
cb.SetColorStroke(boxColor);
|
|
if (DefBox != null)
|
|
{
|
|
cb.SetLineWidth(.6F);
|
|
cb.Rectangle(left, bottom, right - left, Height * MyPageHelper.YMultiplier);
|
|
}
|
|
else
|
|
{
|
|
const float llxOffset = 3;
|
|
float lineThickness = 0;
|
|
switch (MyBox.BoxStyle)
|
|
{
|
|
case BoxThin:
|
|
lineThickness = .6F;
|
|
cb.SetLineWidth(lineThickness);
|
|
cb.Rectangle(left + llxOffset, bottom + (lineThickness / 2), right - left, (Height - lineThickness) * MyPageHelper.YMultiplier);
|
|
break;
|
|
case BoxThick:
|
|
lineThickness = 6;
|
|
cb.SetLineWidth(lineThickness);
|
|
cb.Rectangle(left + llxOffset, bottom + (lineThickness / 2), right - left, (Height - lineThickness) * MyPageHelper.YMultiplier);
|
|
break;
|
|
case BoxDouble:
|
|
lineThickness = .6F;
|
|
cb.SetLineWidth(lineThickness);
|
|
// outer rectangle (rectangle's are defined as x,y,w,h)
|
|
cb.Rectangle(left + llxOffset - lineThickness * 1.5F, bottom - lineThickness, right - left + lineThickness * 3, (Height + lineThickness * 2) * MyPageHelper.YMultiplier);
|
|
// inner rectangle
|
|
cb.Rectangle(left + llxOffset + lineThickness, bottom + lineThickness * 1.5F, right - left - lineThickness * 2, (Height - lineThickness * 3) * MyPageHelper.YMultiplier);
|
|
break;
|
|
case BoxFPLNote:
|
|
lineThickness = 2;
|
|
cb.SetLineWidth(lineThickness);
|
|
float[] linePattern = { 6, 1.75F, 2.5F, 1.75F };
|
|
cb.SetLineDash(linePattern,3);
|
|
cb.Rectangle(left + llxOffset, bottom + (lineThickness / 2) -1, right - left, (2 + Height - lineThickness) * MyPageHelper.YMultiplier);
|
|
break;
|
|
case BoxFPLCaution:
|
|
lineThickness = 3;
|
|
cb.SetLineWidth(lineThickness);
|
|
cb.Rectangle(left + llxOffset, bottom + (lineThickness / 2), right - left, (Height - lineThickness) * MyPageHelper.YMultiplier);
|
|
break;
|
|
default:
|
|
// For other than thick, thin and double.
|
|
//Console.WriteLine("NO BOXES");
|
|
_MyLog.WarnFormat("INVALID BOX SYTLE {0} \"{1}\"", MyParent.MyItemInfo.FormatStepData.Type, CharToAsc(MyBox.BoxStyle));
|
|
break;
|
|
//throw new Exception("Missing vlnBox handler");
|
|
}
|
|
}
|
|
cb.Stroke();
|
|
if (textLayer != null) cb.EndLayer();
|
|
cb.RestoreState();
|
|
return yPageStart;
|
|
}
|
|
|
|
private string CharToAsc(string p)
|
|
{
|
|
StringBuilder sb = new StringBuilder();
|
|
foreach (char c in p)
|
|
{
|
|
if (c >= ' ' && c < 127) sb.Append(c);
|
|
else sb.Append(string.Format("\\x{0:x}", (int)c));
|
|
}
|
|
return sb.ToString();
|
|
}
|
|
}
|
|
}
|