John c5dc03ee1c Added Unit Specif logic
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
2011-09-22 19:57:32 +00:00

180 lines
5.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
using iTextSharp.text;
using iTextSharp.text.pdf;
using Volian.Svg.Library;
namespace Volian.Print.Library
{
public class PageCount
{
private bool _CanIncrement = true;
public bool CanIncrement
{
get { return _CanIncrement; }
set { _CanIncrement = value; }
}
private int Increment()
{
if (CanIncrement) Total++;
CanIncrement = false;
return Total;
}
private int _Total;
public int Total
{
get { return _Total; }
set { _Total = value; }
}
private string _FinalPageMessage;
public string FinalPageMessage
{
get { return _FinalPageMessage; }
set { _FinalPageMessage = value; }
}
private PageCountTemplates _MyTemplates; // (for each page that has this key)
internal PageCountTemplates MyTemplates
{
get
{
if (_MyTemplates == null) _MyTemplates = new PageCountTemplates();
return _MyTemplates;
}
set
{
_MyTemplates = value;
}
}
public void DrawTemplates()
{
int cnt = 0;
foreach (PageCountTemplate pct in MyTemplates)
{
cnt++;
string fstr = pct.Text.Replace("{OF}", _Total.ToString());
if (fstr.Contains("{FINALPAGE}"))
{
fstr = fstr.Replace("{FINALPAGE}", (cnt == MyTemplates.Count) ? FinalPageMessage : "");
}
// use font from pct
string fontFace = pct.MyFont.Name;
int fontStyle = (pct.MyFont.Bold ? iTextSharp.text.Font.BOLD : 0) + (pct.MyFont.Italic ? iTextSharp.text.Font.ITALIC : 0);
Font itextFont = Volian.Svg.Library.Svg.GetFont(fontFace, pct.MyFont.Size, fontStyle, pct.MyColor);
ColumnText columnText = new ColumnText(pct.MyTemplate);
float textSize = itextFont.BaseFont.GetWidthPoint(fstr, pct.MyFont.Size);
float flly = itextFont.BaseFont.GetDescentPoint("g", pct.MyFont.Size);
float lead = columnText.Leading;
columnText.Alignment = pct.Alignment;
Chunk chk = new Chunk(fstr, itextFont);
float width = chk.GetWidthPoint();
// justification:
float left = 0;
float right = width * 1.01F;
switch (pct.Alignment)
{
case Element.ALIGN_CENTER:
left = -.5F * width;
right = .51F * width;
break;
case Element.ALIGN_RIGHT:
left = -1.01F * width;
right = 0;
break;
}
pct.MyTemplate.BoundingBox = new Rectangle(left, 2 * flly, right, columnText.Leading); //2*flly account for descenders
columnText.SetSimpleColumn(left, 0, right, columnText.Leading);
columnText.SetText(new Phrase(chk));
columnText.Go();
}
}
public PdfTemplate AddToTemplateList(PdfWriter pdfWriter, string text, System.Drawing.Font myFont, int alignment, System.Drawing.Color color)
{
Increment();
PageCountTemplate retTemplate = new PageCountTemplate(pdfWriter, text.Replace("{PAGE}",Total.ToString()), myFont, alignment, color);
MyTemplates.Add(retTemplate);
return retTemplate.MyTemplate;
}
}
public class PageCounts : Dictionary<string, PageCount>
{
public bool CanIncrement
{
set
{
foreach (PageCount pc in this.Values)
{
pc.CanIncrement = value;
}
}
}
public PdfTemplate AddToTemplateList(string key, PdfWriter pdfWriter, string text, System.Drawing.Font myFont, int alignment, System.Drawing.Color color)
{
if (!this.ContainsKey(key)) this.Add(key, new PageCount());
return (this[key].AddToTemplateList(pdfWriter, text, myFont, alignment,color));
}
public PdfTemplate AddToTemplateList(string key, PdfWriter pdfWriter, string text, string finalPageMessage, System.Drawing.Font myFont, int alignment, System.Drawing.Color color)
{
if (!this.ContainsKey(key)) this.Add(key, new PageCount());
this[key].FinalPageMessage = finalPageMessage;
return (this[key].AddToTemplateList(pdfWriter, text, myFont, alignment, color));
}
public void DrawTemplates()
{
foreach (PageCount pc in this.Values)
{
pc.DrawTemplates();
}
}
}
public class PageCountTemplate
{
private string _Text;
public string Text // "Page 1 of {OF}"
{
get { return _Text; }
set { _Text = value; }
}
private System.Drawing.Font _MyFont;
public System.Drawing.Font MyFont
{
get { return _MyFont; }
set { _MyFont = value; }
}
private int _Alignment; // iTextSharp Element.<XYZ>
public int Alignment
{
get { return _Alignment; }
set { _Alignment = value; }
}
private System.Drawing.Color _MyColor;
public System.Drawing.Color MyColor
{
get { return _MyColor; }
set { _MyColor = value; }
}
private PdfTemplate _MyTemplate;
public PdfTemplate MyTemplate
{
get { return _MyTemplate; }
set { _MyTemplate = value; }
}
public PageCountTemplate(PdfWriter pdfWriter, string text, System.Drawing.Font myFont, int alignment, System.Drawing.Color color)
{
// Create Template can be called with a small, i.e. 1, width/height because when
// it is actually drawn, the bounding box overrides the CreateTemplate values.
_MyTemplate = pdfWriter.DirectContent.CreateTemplate(1, 1);
_Text = text;
_MyFont = myFont;
_MyColor = color;
_Alignment = alignment;
}
}
public class PageCountTemplates : List<PageCountTemplate>
{
}
}