BGE – phone list edit support

For BGE
BGE – phone list support
BGE – account for phone list size when paginating
BGE – phone list support & fixes for auto Table of Contents
This commit is contained in:
Kathy Ruffing 2014-05-12 15:46:00 +00:00
parent b4a055327a
commit c29bec4903
9 changed files with 1076 additions and 715 deletions

View File

@ -0,0 +1,95 @@
namespace VEPROMS
{
partial class dlgPhoneList
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.tbPhoneList = new DevComponents.DotNetBar.Controls.TextBoxX();
this.btnOk = new DevComponents.DotNetBar.ButtonX();
this.btnCancel = new DevComponents.DotNetBar.ButtonX();
this.SuspendLayout();
//
// tbPhoneList
//
//
//
//
this.tbPhoneList.Border.Class = "TextBoxBorder";
this.tbPhoneList.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square;
this.tbPhoneList.Font = new System.Drawing.Font("Courier New", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.tbPhoneList.Location = new System.Drawing.Point(13, 11);
this.tbPhoneList.Multiline = true;
this.tbPhoneList.Name = "tbPhoneList";
this.tbPhoneList.Size = new System.Drawing.Size(843, 216);
this.tbPhoneList.TabIndex = 0;
//
// btnOk
//
this.btnOk.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton;
this.btnOk.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground;
this.btnOk.DialogResult = System.Windows.Forms.DialogResult.OK;
this.btnOk.Location = new System.Drawing.Point(654, 235);
this.btnOk.Name = "btnOk";
this.btnOk.Size = new System.Drawing.Size(75, 23);
this.btnOk.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
this.btnOk.TabIndex = 1;
this.btnOk.Text = "Ok";
this.btnOk.Click += new System.EventHandler(this.btnOk_Click);
//
// btnCancel
//
this.btnCancel.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton;
this.btnCancel.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground;
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnCancel.Location = new System.Drawing.Point(757, 235);
this.btnCancel.Name = "btnCancel";
this.btnCancel.Size = new System.Drawing.Size(75, 23);
this.btnCancel.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
this.btnCancel.TabIndex = 2;
this.btnCancel.Text = "Cancel";
//
// dlgPhoneList
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(866, 268);
this.Controls.Add(this.btnCancel);
this.Controls.Add(this.btnOk);
this.Controls.Add(this.tbPhoneList);
this.Name = "dlgPhoneList";
this.Text = "Phone List";
this.ResumeLayout(false);
}
#endregion
private DevComponents.DotNetBar.Controls.TextBoxX tbPhoneList;
private DevComponents.DotNetBar.ButtonX btnOk;
private DevComponents.DotNetBar.ButtonX btnCancel;
}
}

View File

@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using VEPROMS.CSLA.Library;
namespace VEPROMS
{
public partial class dlgPhoneList : Form
{
private DocVersionConfig _docVersionConfig;
private string _origPhoneList;
public dlgPhoneList(DocVersionConfig dvc)
{
_docVersionConfig = dvc;
InitializeComponent();
_origPhoneList = _docVersionConfig.Print_PhoneList;
tbPhoneList.Text = _origPhoneList;
}
private void btnOk_Click(object sender, EventArgs e)
{
if (_origPhoneList != tbPhoneList.Text)
_docVersionConfig.Print_PhoneList = tbPhoneList.Text;
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

File diff suppressed because it is too large Load Diff

View File

@ -360,6 +360,9 @@ namespace VEPROMS
//end add new applicability stuff //end add new applicability stuff
lblProcSetRev.Visible = ppRTxtProcSetRev.Visible = _DocVersionConfig.MyDocVersion.MyDocVersionInfo.ActiveFormat.MyStepSectionPrintData.UseXtraRevNumber; lblProcSetRev.Visible = ppRTxtProcSetRev.Visible = _DocVersionConfig.MyDocVersion.MyDocVersionInfo.ActiveFormat.MyStepSectionPrintData.UseXtraRevNumber;
_Initializing = false; _Initializing = false;
// the phone list button is only visible if the format has the print/phonelist format flag.
btnPhoneList.Visible = _DocVersionConfig.MyDocVersion.MyDocVersionInfo.ActiveFormat.PlantFormat.FormatData.SectData.PrintPhoneList;
} }
// The following code was added to fix Bug B2013-117 // The following code was added to fix Bug B2013-117
void ppTxtBxPDFLoc_TextChanged(object sender, EventArgs e) void ppTxtBxPDFLoc_TextChanged(object sender, EventArgs e)
@ -1064,6 +1067,12 @@ namespace VEPROMS
bsApples.DataSource = _Apples; bsApples.DataSource = _Apples;
} }
} }
private void btnPhoneList_Click(object sender, EventArgs e)
{
dlgPhoneList dlgPL = new dlgPhoneList(_DocVersionConfig);
dlgPL.ShowDialog();
}
} }
[XmlRoot("Slave")] [XmlRoot("Slave")]

View File

@ -864,6 +864,25 @@ namespace VEPROMS.CSLA.Library
} }
} }
} }
[Category("Print Settings")]
[DisplayName("PhoneList")]
[RefreshProperties(RefreshProperties.All)]
[Description("Phone List")]
public string Print_PhoneList
{
get
{
return _Xp["PrintSettings", "PhoneList"];
}
set
{
if (_SaveChangesToDocVersionConfig)
{
_Xp["PrintSettings", "PhoneList"] = value; // save selected value
OnPropertyChanged("Print_PhoneList");
}
}
}
#endregion #endregion
#region Unit // From PROC.INI #region Unit // From PROC.INI
//MultiUnitCount //MultiUnitCount

View File

@ -56,6 +56,11 @@ namespace Volian.Print.Library
// procedure in questions was VEWCNEMG\EMGAPP.PRC, ES-01, Step 8. // procedure in questions was VEWCNEMG\EMGAPP.PRC, ES-01, Step 8.
float yEndMsg = !_skipEndMessage && !MyItemInfo.IsSection && MyItemInfo.MyHLS != null && MyItemInfo.MyHLS.NextItem == null && (MyItemInfo.MyDocStyle.End.Message ?? "") != "" ? 2 * SixLinesPerInch : 0; float yEndMsg = !_skipEndMessage && !MyItemInfo.IsSection && MyItemInfo.MyHLS != null && MyItemInfo.MyHLS.NextItem == null && (MyItemInfo.MyDocStyle.End.Message ?? "") != "" ? 2 * SixLinesPerInch : 0;
// also consider if there is a phone list at the bottom of the page, add the amount of space the phone
// list requires onto yEndMsg to make it easier to figure out pagination.
if (MyItemInfo.ActiveFormat.PlantFormat.FormatData.SectData.PrintPhoneList)
yEndMsg += MyPageHelper.PhoneListHeight;
// The following code is to fix a pagination issue in SHE. It was decided to not put it into development // The following code is to fix a pagination issue in SHE. It was decided to not put it into development
// because some of the pagination logic may be redesigned. Without this fix, some pages had a page break // because some of the pagination logic may be redesigned. Without this fix, some pages had a page break
// before they should. I did not want to lose this code, in case at some point we want to revisit this. // before they should. I did not want to lose this code, in case at some point we want to revisit this.

View File

@ -499,6 +499,32 @@ namespace Volian.Print.Library
_MyHelper.MySection = mySection; _MyHelper.MySection = mySection;
OnStatusChanged("After Set Svg", PromsPrinterStatusType.SetSVG); OnStatusChanged("After Set Svg", PromsPrinterStatusType.SetSVG);
} }
// if this format uses phonelists, see if this section has one. We need to know the number
//of lines to adjust the pagelength for pagination and printing.
_MyHelper.PhoneListHeight = 0;
if (mySection.ActiveFormat.PlantFormat.FormatData.SectData.PrintPhoneList)
{
DocVersionConfig dvc = mySection.MyDocVersion.MyConfig as DocVersionConfig;
if (dvc != null)
{
string phlist = dvc.Print_PhoneList;
if (phlist != null && phlist != "")
{
// count lines:
int cl = 1;
int indx = phlist.IndexOf("\n");
while (indx > 0)
{
cl++;
if (indx + 1 > phlist.Length)
indx = -1;
else
indx = phlist.IndexOf("\n", indx + 1);
}
_MyHelper.PhoneListHeight = cl * vlnPrintObject.SixLinesPerInch;
}
}
}
PdfReader readerWord = null; PdfReader readerWord = null;
string myPdfFile = null; string myPdfFile = null;
_MyHelper.FinalMessageSectionID = finalMessageSectionID; // set VlnSvgPageHelper with the finalMessageSectionID _MyHelper.FinalMessageSectionID = finalMessageSectionID; // set VlnSvgPageHelper with the finalMessageSectionID
@ -793,32 +819,36 @@ namespace Volian.Print.Library
float adjSecTitlePos = secTitlePos + indentOffset + (level * 6); float adjSecTitlePos = secTitlePos + indentOffset + (level * 6);
if (secNumPos + numwidth + indentOffset > secTitlePos + indentOffset) if (secNumPos + numwidth + indentOffset > secTitlePos + indentOffset)
adjSecTitlePos = secNumPos + numwidth + 18 - xAdjTitleIndent + indentOffset; adjSecTitlePos = secNumPos + numwidth + 18 - xAdjTitleIndent + indentOffset;
// Do the title first since it may wrap to 2nd line and this is an issue for
// doing a pagebreak, i.e. may cause a page break when the number on a single line
// would not.
rtfText = GetRtfToC(mySection.MyContent.Text, tOfC); rtfText = GetRtfToC(mySection.MyContent.Text, tOfC);
Paragraph myparagrapht = vlnPrintObject.RtfToParagraph(rtfText); Paragraph myparagrapht = vlnPrintObject.RtfToParagraph(rtfText);
width = secPagePos - adjSecTitlePos - 6; width = secPagePos - adjSecTitlePos - 6;
float retval = Rtf2Pdf.TextAt(cb, myparagrapht, leftMargin + adjSecTitlePos, yPageStart - yLocation, width, height, "", yBottomMargin); float retval = Rtf2Pdf.TextAt(cb, myparagrapht, leftMargin + adjSecTitlePos, yPageStart - yLocation, width, height, "", yBottomMargin);
float ttlRetval = retval; if (retval == 0) // couldn't fit, flags need for a page break.
if (retval == 0)
{ {
cb.PdfDocument.NewPage(); cb.PdfDocument.NewPage();
_MyHelper.ResetSvg(); // needed to reset so that PSNotFirst pagelist justify flag gets used for BGE _MyHelper.ResetSvg(); // needed to reset so that PSNotFirst pagelist justify flag gets used for BGE
//_MyLog.InfoFormat("NewPage 5 {0}", cb.PdfWriter.CurrentPageNumber);
yLocation = lastyLocation = 0; yLocation = lastyLocation = 0;
retval = Rtf2Pdf.TextAt(cb, myparagrapht, leftMargin + adjSecTitlePos, yPageStart - yLocation, width, height, "", yBottomMargin); retval = Rtf2Pdf.TextAt(cb, myparagrapht, leftMargin + adjSecTitlePos, yPageStart - yLocation, width, height, "", yBottomMargin);
ttlRetval = retval;
} }
float ttlRetval = retval;
// Now do the section number. Retval is the ylocation on page after the text
// is put out.
retval = Rtf2Pdf.TextAt(cb, myparagraphn, leftMargin + secNumPos + indentOffset, yPageStart - yLocation, width * 1.3F, height, "", yBottomMargin); retval = Rtf2Pdf.TextAt(cb, myparagraphn, leftMargin + secNumPos + indentOffset, yPageStart - yLocation, width * 1.3F, height, "", yBottomMargin);
if (retval == 0) // do a newpage, it couldn't fit on current page.
{
cb.PdfDocument.NewPage();
//_MyLog.InfoFormat("NewPage 5 {0}", cb.PdfWriter.CurrentPageNumber);
yLocation = lastyLocation = 0;
retval = Rtf2Pdf.TextAt(cb, myparagraphn, leftMargin + secNumPos + indentOffset, yPageStart - yLocation, width * 1.3F, height, "", yBottomMargin);
}
retval = Math.Min(retval, ttlRetval);
float lSpace = (tOfC.TofCLineSpacing == 2) ? 2 * vlnPrintObject.SixLinesPerInch : vlnPrintObject.SixLinesPerInch; float lSpace = (tOfC.TofCLineSpacing == 2) ? 2 * vlnPrintObject.SixLinesPerInch : vlnPrintObject.SixLinesPerInch;
if (lastyLocation != 0 && ((lastyLocation - retval) > lSpace))
yLocation += (lastyLocation - retval - lSpace); // adjust ylocation for pagenumber - the ylocation will get reset if the
// section title split on 2 lines and the page number needs to be on the 2nd line.
if (retval != ttlRetval) yLocation += (retval - ttlRetval);
// retval = the minimum (further down the page) between section number and
// title - this accounts for multi line title.
retval = Math.Min(retval, ttlRetval);
lastyLocation = retval; lastyLocation = retval;
// check that the page number should be in the TOC (some BGE sections do not have the page number) // check that the page number should be in the TOC (some BGE sections do not have the page number)
@ -832,8 +862,10 @@ namespace Volian.Print.Library
width = 0; width = 0;
foreach (Chunk chkt in myparagrapht.Chunks) foreach (Chunk chkt in myparagrapht.Chunks)
width += chkt.GetWidthPoint(); width += chkt.GetWidthPoint();
float startSpace = leftMargin + adjSecTitlePos + width; // the '6' in the next 2 lines & in the 'while' loop below allows the placement of the dots (or other space character)
float endSpace = leftMargin + secPagePos; // to be not too close to section title & page number.
float startSpace = leftMargin + adjSecTitlePos + width + 6;
float endSpace = leftMargin + secPagePos - 6;
float numSpace = endSpace - startSpace; float numSpace = endSpace - startSpace;
string spaceStr = ""; string spaceStr = "";
rtfText = GetRtfToC(tOfC.TofCSpaceChar, tOfC); rtfText = GetRtfToC(tOfC.TofCSpaceChar, tOfC);
@ -841,7 +873,7 @@ namespace Volian.Print.Library
float spacchrwid = 0; float spacchrwid = 0;
foreach (Chunk chkt in tmpmyparagraph.Chunks) foreach (Chunk chkt in tmpmyparagraph.Chunks)
spacchrwid += chkt.GetWidthPoint(); spacchrwid += chkt.GetWidthPoint();
while (numSpace > 0) while (numSpace > 6)
{ {
spaceStr = spaceStr + tOfC.TofCSpaceChar; spaceStr = spaceStr + tOfC.TofCSpaceChar;
numSpace -= spacchrwid; numSpace -= spacchrwid;

View File

@ -73,6 +73,12 @@ namespace Volian.Print.Library
get { return _YMultiplier; } get { return _YMultiplier; }
set { _YMultiplier = value; } set { _YMultiplier = value; }
} }
float _PhoneListHeight = 0;
public float PhoneListHeight
{
get { return _PhoneListHeight; }
set { _PhoneListHeight = value; }
}
private PdfWriter _MyPdfWriter; private PdfWriter _MyPdfWriter;
public PdfWriter MyPdfWriter public PdfWriter MyPdfWriter
{ {
@ -175,6 +181,19 @@ namespace Volian.Print.Library
} }
if (MySection.MyDocStyle.StructureStyle.Style==null || (MySection.MyDocStyle.StructureStyle.Style & E_DocStructStyle.DontCountInTabOfCont) == 0) if (MySection.MyDocStyle.StructureStyle.Style==null || (MySection.MyDocStyle.StructureStyle.Style & E_DocStructStyle.DontCountInTabOfCont) == 0)
CurrentTOCPageNumber++; CurrentTOCPageNumber++;
if (MySection.ActiveFormat.PlantFormat.FormatData.SectData.PrintPhoneList)
{
SectionConfig sc = MySection.MyConfig as SectionConfig;
if (sc.Section_PhoneList != null && sc.Section_PhoneList == "Y")
{
// yoffset the footer length + the size of the phone list:
float yoff = (float)MySection.MyDocStyle.Layout.FooterLength + PhoneListHeight + 12; // 12 is an extra line for the horizontal.
DocVersionConfig dvc = MySection.MyDocVersion.MyConfig as DocVersionConfig;
if (dvc != null)
DrawPhoneList(writer.DirectContent, (float)MySection.MyDocStyle.Layout.LeftMargin, (float)MySection.MyDocStyle.Layout.PageWidth, yoff, dvc.Print_PhoneList);
}
}
if (MySection.MyDocStyle.CenterLineX != null) if (MySection.MyDocStyle.CenterLineX != null)
{ {
if ((MySection.MyDocStyle.StructureStyle.Style & E_DocStructStyle.DoubleBoxHLS) == E_DocStructStyle.DoubleBoxHLS) if ((MySection.MyDocStyle.StructureStyle.Style & E_DocStructStyle.DoubleBoxHLS) == E_DocStructStyle.DoubleBoxHLS)
@ -187,6 +206,57 @@ namespace Volian.Print.Library
YMultiplier = 1; YMultiplier = 1;
PrintedAPage = true; PrintedAPage = true;
} }
private void DrawPhoneList(PdfContentByte pdfContentByte, float leftMargin, float pageWidth, float yOff, string plist)
{
// draw the line above the phone list:
yOff = yOff + 4; // move up 1/2 line:
DrawHorizontal(pdfContentByte, leftMargin, pageWidth, yOff);
pdfContentByte.SaveState();
if (PageListLayer != null) pdfContentByte.BeginLayer(PageListLayer);
pdfContentByte.SetColorStroke(new Color(PrintOverride.SvgColor));
// for each line, break it into phone items for printing. Note that 16bit code also supported
// a tabbing line - BGE wasn't using this in data at time of development. The following code may
// need expanded to support the tabbing/column definitions if this is found in data.
float lyoff = yOff - 4;
plist = plist.Replace("\r", "");
string[] lines = plist.Split("\n".ToCharArray());
DocStyle docstyle = MySection.MyDocStyle;
foreach (string cline in lines)
{
if (cline != "")
{
// xoff handles the columns. The separator between phone items is a double space. A phone
// item may have a single space within it (this comes from 16bit implementation)
float xoff = (float)docstyle.Layout.LeftMargin;
int stLineindx = 0;
int endLineindx = cline.IndexOf(" ");
bool endOfLine = false;
while (!endOfLine)
{
string phone = cline.Substring(stLineindx, endLineindx - stLineindx);
float tmp = 0;
vlnText vt = new vlnText(pdfContentByte, null, phone, phone, xoff, lyoff, MySection.ActiveFormat.PlantFormat.FormatData.Font);
vt.ToPdf(pdfContentByte, 0, ref tmp, ref tmp);
xoff += 132; // columns in 16bit were a little more than 1 3/4 inches.
stLineindx = endLineindx;
if (stLineindx >= cline.Length) break;
while (cline[stLineindx] == ' ' && stLineindx < cline.Length) stLineindx++;
if (stLineindx >= cline.Length - 1) endOfLine = true;
else
{
endLineindx = cline.IndexOf(" ", stLineindx);
if (endLineindx == -1) endLineindx = cline.Length;
}
}
lyoff = lyoff - vlnPrintObject.SixLinesPerInch;
}
}
if (PageListLayer != null) pdfContentByte.EndLayer();
pdfContentByte.RestoreState();
}
private void DrawHorizontal(PdfContentByte cb, float left, float right, float yoff) private void DrawHorizontal(PdfContentByte cb, float left, float right, float yoff)
{ {
// if there are gaps, check to be sure top isn't a double line box. If it's a box, don't draw the top line. // if there are gaps, check to be sure top isn't a double line box. If it's a box, don't draw the top line.