additional checks for checkoffs and logic support or NSP script Cautions with bullets fixed pagelist processing issue when pagelist row has more than one token support for NSP script Cautions fixed problem where the END message was not printing for NSP (the Y location was negative – off the page)
230 lines
8.2 KiB
C#
230 lines
8.2 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 vlnTab : vlnText
|
|
{
|
|
/// <summary>
|
|
/// Used to Align Tabs for numeric tabs that can go to 2 digits
|
|
/// </summary>
|
|
private float? _TabAlign;
|
|
public float TabAlign // Offset to Last printable character
|
|
{
|
|
get
|
|
{
|
|
if (_TabAlign == null)
|
|
{
|
|
_TabAlign = 0;
|
|
if (Text != null)
|
|
{
|
|
while (_TabAlign < Text.Length && Text[(int)_TabAlign] == ' ')
|
|
_TabAlign++;
|
|
if (_TabAlign < Text.Length)
|
|
{
|
|
if ("0123456789".Contains(Text[(int)_TabAlign].ToString()))
|
|
{
|
|
while ("0123456789".Contains(Text[(int)_TabAlign].ToString()))
|
|
_TabAlign++;
|
|
_TabAlign--;
|
|
}
|
|
}
|
|
else
|
|
_TabAlign = 0;
|
|
}
|
|
}
|
|
return (float)_TabAlign * MyFont.CharsToTwips;
|
|
}
|
|
}
|
|
private float? _TabOffset;
|
|
public float TabOffset // Offset to first printable character
|
|
{
|
|
get
|
|
{
|
|
if (_TabOffset == null)
|
|
{
|
|
_TabOffset = 0;
|
|
if (Text != null)
|
|
{
|
|
while (_TabOffset<Text.Length && Text[(int)_TabOffset] == ' ')
|
|
_TabOffset++;
|
|
}
|
|
}
|
|
if (_TabOffset >= Text.Length) _TabOffset = 0;
|
|
return (float)_TabOffset * MyFont.CharsToTwips;
|
|
}
|
|
}
|
|
private vlnMacro _MyMacro;
|
|
public vlnMacro MyMacro
|
|
{
|
|
get { return _MyMacro; }
|
|
set { _MyMacro = value; }
|
|
}
|
|
|
|
private string symblsStr = "\u25CF\u0394"; // string of possible symbol character in a tab
|
|
// add symbol characters as needed
|
|
// "\u25CF" - solid bullet
|
|
// \x0394 - delta
|
|
|
|
private System.Drawing.FontStyle GetSysFontStyle(VE_Font f)
|
|
{
|
|
if (f.Style == E_Style.Italics)
|
|
return System.Drawing.FontStyle.Italic;
|
|
return FontStyle.Regular;
|
|
}
|
|
private float GetTextWidth(VE_Font vefont, string txt, string symblFontName)
|
|
{
|
|
|
|
System.Drawing.Font font = new System.Drawing.Font(vefont.Family, (float)vefont.Size, GetSysFontStyle(vefont));
|
|
System.Drawing.Font symbFont = new System.Drawing.Font(symblFontName, (float)vefont.Size);
|
|
iTextSharp.text.Font iFont = Volian.Svg.Library.VolianPdf.GetFont(font);
|
|
iTextSharp.text.Font iSymblFont = Volian.Svg.Library.VolianPdf.GetFont(symbFont);
|
|
float w = 0;
|
|
foreach (char c in txt)
|
|
{
|
|
int idx = symblsStr.IndexOf(c);
|
|
if (idx >= 0) // symbol character - use symbol font to find its width
|
|
w += iSymblFont.BaseFont.GetWidthPointKerned(symblsStr[idx].ToString(), (float)vefont.Size);
|
|
else
|
|
w += iFont.BaseFont.GetWidthPointKerned(c.ToString(), (float)vefont.Size);
|
|
}
|
|
//float w = iFont.BaseFont.GetWidthPointKerned(Text.Replace("\u25CF","@"), (float)vefont.Size);
|
|
return w;
|
|
}
|
|
bool _ScriptCaution = false;
|
|
|
|
public bool ScriptCaution
|
|
{
|
|
get { return _ScriptCaution; }
|
|
set { _ScriptCaution = value; }
|
|
}
|
|
bool _SeparateBullet = false;
|
|
|
|
public bool SeparateBullet
|
|
{
|
|
get { return _SeparateBullet; }
|
|
set { _SeparateBullet = value; }
|
|
}
|
|
public vlnTab(PdfContentByte cb, vlnParagraph myparent, string origTab, string cleanTab, float xoffset, float yoffset, VE_Font vFont, bool doSectTab, string symblFontName)
|
|
{
|
|
ScriptCaution = (origTab.Contains("Caution") && vFont.Family == "VolianScript");
|
|
MyContentByte = cb;
|
|
MyParent = myparent;
|
|
YOffset = yoffset;
|
|
Text = cleanTab;
|
|
MyFont = vFont;
|
|
float CCCs = GetTextWidth(MyFont, "CCCCCCCCCC", symblFontName);
|
|
float IIIs = GetTextWidth(MyFont, "iiiiiiiiii", symblFontName);
|
|
if (ScriptCaution)
|
|
{
|
|
Text = origTab.Replace("Caution ", "\uF043\uF061\uF069\uF06E\uF06F\uF074\uF075\uF020\uF020");
|
|
Width = 90;
|
|
}
|
|
else if ((myparent.MyItemInfo.FormatStepData.TabData.IdentWidth ?? 0) > 0)
|
|
Width = (float)myparent.MyItemInfo.FormatStepData.TabData.IdentWidth;
|
|
else if (CCCs != IIIs)
|
|
Width = Text.Length * 6; //proportial font (7 chars * 6)
|
|
else
|
|
Width = GetTextWidth(MyFont, (Text != null ? Text : origTab), symblFontName);//MyFont.CharsToTwips * (Text != null ? Text.Length : origTab.Length);
|
|
if (myparent.MyItemInfo.FormatStepData.TabData.Bullet.Separate)
|
|
if (myparent.MyItemInfo.MyPrevious != null || myparent.MyItemInfo.NextItem != null)
|
|
SeparateBullet = true;
|
|
//if (MyParent.MyItemInfo.ItemID == 108)//120)
|
|
// Console.WriteLine("here");
|
|
if (origTab.Contains(@"{!"))
|
|
{
|
|
int mindx = origTab.IndexOf(@"{!");
|
|
int meindx = origTab.IndexOf(@"}", mindx);
|
|
string macro = origTab.Substring(mindx, meindx - mindx+1);
|
|
// Width for placement of macro should be position in the string where the macro was located.
|
|
float lwidth = MyFont.CharsToTwips * (origTab.Length - meindx);
|
|
MyMacro = new vlnMacro(xoffset - lwidth, yoffset, macro.Substring(2, macro.Length - 3));
|
|
origTab = origTab.Replace(macro,"");
|
|
origTab = origTab + " ";
|
|
cleanTab = origTab;
|
|
if (CCCs != IIIs)
|
|
Width = cleanTab.Length * 6; //proportial font (7 chars * 6)
|
|
else
|
|
Width = GetTextWidth(MyFont, (cleanTab != null ? cleanTab : origTab), symblFontName);//MyFont.CharsToTwips * (cleanTab != null ? cleanTab.Length : origTab.Length);
|
|
}
|
|
Rtf = GetRtf(origTab, vFont);
|
|
Rtf = Rtf.Replace("\u0394", @"\f1\u916?\f0 "); // delta 0x0394
|
|
if (ScriptCaution)
|
|
{
|
|
Rtf = GetRtf("\u25CFCaution ", vFont);
|
|
Rtf = Rtf.Replace("\u25CF", @"\f1\fs20 \u9679?\f0\par\f0\fs64 "); // bullet 25CF // jsj- force bullet size (is different than tab text)
|
|
if (myparent.MyItemInfo.FormatStepData != null && !myparent.MyItemInfo.FormatStepData.AlwaysTab && myparent.MyItemInfo.MyPrevious != null)
|
|
Rtf = Rtf.Replace("Caution ", @"\u61472?\u61472?\u61472?\u61472?\u61472?\u61472?\u61472?\u61472?\u61472?");
|
|
else
|
|
{
|
|
if (myparent.MyItemInfo.FormatStepData != null && !myparent.MyItemInfo.FormatStepData.AlwaysTab && myparent.MyItemInfo.NextItem == null)
|
|
Rtf = Rtf.Replace(@"\u9679?", "");
|
|
Rtf = Rtf.Replace("Caution ", @"\u61507?\u61537?\u61557?\u61556?\u61545?\u61551?\u61550?\u61472?\u61472?");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (SeparateBullet)
|
|
Rtf = Rtf.Replace("\u25CF", "");
|
|
else
|
|
Rtf = Rtf.Replace("\u25CF", @"\f1\u9679?\f0 "); // bullet 25CF // jsj- add space after \f0
|
|
//Rtf = Rtf.Replace("\u25CF", @"\f1\fs18\b0\i0 \u9679?\f0 "); // bullet 25CF // jsj- add space after \f0
|
|
if (myparent.MyItemInfo.FormatStepData != null && !myparent.MyItemInfo.FormatStepData.AlwaysTab && myparent.MyItemInfo.MyPrevious != null)
|
|
{
|
|
//if (scriptCaution)
|
|
// Rtf = Rtf.Replace("CAUTION ", @"\u61472?\u61472?\u61472?\u61472?\u61472?\u61472?\u61472?\u61472?\u61472?");
|
|
Rtf = Rtf.Replace("Caution:", " ");
|
|
Rtf = Rtf.Replace("Note:", " ");
|
|
Rtf = Rtf.Replace("CAUTION:", " ");
|
|
Rtf = Rtf.Replace("NOTE:", " ");
|
|
Rtf = Rtf.Replace("Caution", " ");
|
|
Rtf = Rtf.Replace("Note", " ");
|
|
Rtf = Rtf.Replace("CAUTION", " ");
|
|
Rtf = Rtf.Replace("NOTE", " ");
|
|
}
|
|
}
|
|
if (ScriptCaution && Rtf.Contains("Caution"))
|
|
{
|
|
// NSP script caution
|
|
iTextSharp.text.Font myfont = pdf.GetFont(vFont.Family, 28, 0, iTextSharp.text.Color.BLACK);
|
|
if (!myfont.BaseFont.CharExists(0x43)) // Capital 'C' exists as text
|
|
{
|
|
//VE_Font vf = new VE_Font("VolianScript", 28, E_Style.Italics, 12);
|
|
// Capital 'C' exists as Symbol
|
|
Rtf = Rtf.Replace("Caution ", @"\u61507?\u61537?\u61557?\u61556?\u61545?\u61551?\u61550?\u61472?\u61472?");
|
|
}
|
|
|
|
}
|
|
|
|
|
|
// do positioning based on whether format has locations for section 'header'. If it's not centered, treat
|
|
// it's location more like a 'tab'.
|
|
if (doSectTab)
|
|
XOffset = xoffset;
|
|
else
|
|
{
|
|
//if (MyFont.Family == "Arial" && MyFont.Size == 14)
|
|
//{
|
|
// System.Drawing.Font font = new System.Drawing.Font("Arial", 14);
|
|
// iTextSharp.text.Font iFont = Volian.Svg.Library.VolianPdf.GetFont(font);
|
|
// float w = iFont.BaseFont.GetWidthPointKerned(Text, 14);
|
|
// Width = w;
|
|
//}
|
|
XOffset = xoffset - Width;
|
|
}
|
|
|
|
}
|
|
public override float ToPdf(PdfContentByte cb, float yPageStart, float yTopMargin, float yBottomMargin)
|
|
{
|
|
float yLocation = CalculateYOffset(yPageStart, yTopMargin);
|
|
Rtf2Pdf.TextAt(cb, IParagraph, XOffset, yLocation, Width, 100, "", yBottomMargin);
|
|
return yPageStart;
|
|
}
|
|
}
|
|
}
|