This commit is contained in:
2010-07-14 16:17:39 +00:00
parent 2bf01da344
commit ebd566dcb2
11 changed files with 1058 additions and 468 deletions

View File

@@ -0,0 +1,160 @@
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 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()
{
foreach (PageCountTemplate pct in MyTemplates)
{
string fstr = pct.Text.Replace("{OF}", _Total.ToString());
// 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 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>
{
}
}

View File

@@ -0,0 +1,646 @@
using System;
using System.Collections.Generic;
using System.Text;
using VEPROMS.CSLA.Library;
using Volian.Svg.Library;
using iTextSharp.text.factories;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.Text.RegularExpressions;
using System.IO;
using System.Xml;
using System.Windows.Forms;
using LBWordLibrary;
using System.Drawing;
using System.Drawing.Imaging;
using Volian.Controls.Library;
namespace Volian.Print.Library
{
public delegate void PromsPrinterStatusEvent(object sender,PromsPrintStatusArgs args);
public class PromsPrintStatusArgs
{
private string _MyStatus;
public string MyStatus
{
get { return _MyStatus; }
}
private DateTime _When = DateTime.Now;
public DateTime When
{
get { return _When; }
}
private PromsPrinterStatusType _Type;
public PromsPrinterStatusType Type
{
get { return _Type; }
set { _Type = value; }
}
public PromsPrintStatusArgs(string myStatus, PromsPrinterStatusType type)
{
_MyStatus = myStatus;
_Type = type;
}
}
public enum PromsPrinterStatusType
{
Start,
General,
MSWordToPDF,
PageList,
Watermark,
Read16,
Merge16,
Open16,
ReadMSWord,
MergeMSWord,
OpenMSWord,
OpenPDF,
Merge,
Total,
CloseDocument,
NewPage,
BuildSVG,
SetSVG,
SetPageEvent,
GetSection,
Before,
BuildStep
}
public class PromsPrinter
{
public event PromsPrinterStatusEvent StatusChanged;
private void OnStatusChanged(object sender, PromsPrintStatusArgs args)
{
if (StatusChanged != null)
StatusChanged(sender, args);
}
private void OnStatusChanged(string myStatus, PromsPrinterStatusType type)
{
OnStatusChanged(this, new PromsPrintStatusArgs(myStatus, type));
}
private string _Rev;
private string _RevDate;
private ItemInfo _MyItem;
private string _Watermark;
private bool _DebugOutput;
public bool DebugOutput
{
get { return _DebugOutput; }
set { _DebugOutput = value; }
}
private string _BackgroundFolder;
public string BackgroundFolder
{
get { return _BackgroundFolder; }
set { _BackgroundFolder = value; }
}
public PromsPrinter(ItemInfo myItem, string rev, string revDate, string watermark, bool debugOutput, string backgroundFolder)
{
_MyItem = myItem;
_Rev = rev;
_RevDate = revDate;
_Watermark = watermark;
_DebugOutput = debugOutput;
_BackgroundFolder = backgroundFolder;
}
public string Print(string pdfFolder)
{
if (_MyItem is ProcedureInfo)
return Print(_MyItem as ProcedureInfo, pdfFolder);
return "";
}
private string BuildMSWordPDF(SectionInfo section)
{
DateTime tStart = DateTime.Now;
string MSWordFile = null;
if (section.MyContent.ContentEntryCount == 1)
{
MSWordFile = MSWordToPDF.ToPDFReplaceROs(section, false);
OnStatusChanged("MSWord converted to PDF " + MSWordFile, PromsPrinterStatusType.MSWordToPDF);
}
return MSWordFile;
}
private static void AddImportedPageToLayer(PdfContentByte cb, PdfLayer layer, PdfImportedPage page, float xOff, float yOff)
{
cb.BeginLayer(layer);
iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(page);
image.SetAbsolutePosition(xOff, yOff);
cb.AddImage(image);
cb.EndLayer();
}
private PdfLayer _TextLayer;
private PdfLayer _BackgroundLayer;
private PdfLayer _MSWordLayer;
private PdfLayer _PagelistLayer;
private PdfLayer _DebugLayer;
private PdfLayer _WatermarkLayer;
private void CreateLayers(PdfContentByte cb)
{
if (DebugOutput)
{
_BackgroundLayer = new PdfLayer("16-Bit", cb.PdfWriter);
_MSWordLayer = new PdfLayer("32-Bit MSWord", cb.PdfWriter);
_PagelistLayer = new PdfLayer("32-Bit Pagelist", cb.PdfWriter);
_TextLayer = new PdfLayer("32-Bit Text", cb.PdfWriter);
_DebugLayer = new PdfLayer("Debug", cb.PdfWriter);
_WatermarkLayer = new PdfLayer("Watermark", cb.PdfWriter);
_WatermarkLayer.SetPrint("Watermark", true);
}
}
private void CloseDocument(PdfContentByte cb, string fileName)
{
cb.PdfDocument.Close();
OnStatusChanged("CloseDocument", PromsPrinterStatusType.CloseDocument);
System.Diagnostics.Process.Start(fileName);
OnStatusChanged("OpenPDF", PromsPrinterStatusType.OpenPDF);
}
private PdfContentByte OpenDoc(string outputFileName)
{
iTextSharp.text.Document document = new iTextSharp.text.Document(PageSize.LETTER);
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outputFileName, FileMode.Create));
document.Open();
// Create Layers
CreateLayers(writer.DirectContent);
PrintOverride.Reset();
if (DebugOutput)
{
PrintOverride.TextColor = System.Drawing.Color.Red;
PrintOverride.SvgColor = System.Drawing.Color.LawnGreen;
PrintOverride.BoxColor = System.Drawing.Color.Red;
PrintOverride.ChangeBarColor = System.Drawing.Color.Red;
PrintOverride.DebugColor = System.Drawing.Color.CadetBlue;
}
return writer.DirectContent;
}
private string CreateFileName(string procNumber, string sectNumber, string sectTitle)
{
return FixFileName(procNumber + "_" + ((sectNumber ?? "") != "" ? sectNumber : sectTitle));
}
private string CreateFileName(string procNumber)
{
return FixFileName(procNumber);
}
private string FixFileName(string name)
{
return Regex.Replace(name, "[ .,]", "_") + ".pdf";
}
int _StepPageNumber = 0;
private VlnSvgPageHelper _MyHelper = null;
private string Print(ProcedureInfo myProcedure, string pdfFolder)
{
OnStatusChanged("Print " + myProcedure.DisplayNumber, PromsPrinterStatusType.Start);
string outputFileName = pdfFolder + "\\" + CreateFileName(myProcedure.DisplayNumber);
// Create an MSWord Pdf
// Setup a pdf Document for printing
OnStatusChanged("Before OpenDoc", PromsPrinterStatusType.Before);
PdfContentByte cb = OpenDoc(outputFileName);
OnStatusChanged("Before NewPage", PromsPrinterStatusType.Before);
cb.PdfDocument.NewPage();
OnStatusChanged("After NewPage", PromsPrinterStatusType.NewPage);
foreach (SectionInfo mySection in myProcedure.Sections)
{
// Set up Helper for the particular Section
if (_MyHelper == null)
{
cb.PdfWriter.PageEvent = _MyHelper = new VlnSvgPageHelper(mySection);
_MyHelper.MyPdfWriter = cb.PdfWriter;
_MyHelper.MyPdfContentByte = cb;
if (DebugOutput)
{
// 16-bit background
string procedureFileName = BackgroundFolder + "\\" + CreateFileName(myProcedure.DisplayNumber);
FileInfo VEPromsFile = new FileInfo(procedureFileName);
if (VEPromsFile.Exists)
{
_MyHelper.BackgroundFile = procedureFileName;
//if (Environment.UserName.ToUpper() == "KATHY")
// _MyHelper.BackgroundOffset = new PointF(12, -13.5F); // non-KBR Needs this to be -9.5 to line up!
//else
_MyHelper.BackgroundOffset = new PointF(12, -9.5F); // KBR Needs this to be -13.5 to line up!
_MyHelper.BackgroundPageOffset = 0;
}
_MyHelper.WatermarkLayer = _WatermarkLayer;
_MyHelper.PageListLayer = _PagelistLayer;
_MyHelper.TextLayer = _TextLayer;
_MyHelper.BackgroundLayer = _BackgroundLayer;
_MyHelper.DebugLayer = _DebugLayer;
}
_MyHelper.Rev = _Rev;
_MyHelper.RevDate = _RevDate;
_MyHelper.Watermark = _Watermark;
OnStatusChanged("After Set PageEvent", PromsPrinterStatusType.SetPageEvent);
}
else
{
_MyHelper.MySection = mySection;
OnStatusChanged("After Set Svg", PromsPrinterStatusType.SetSVG);
}
PdfReader readerWord = null;
string myPdfFile = null;
if (mySection.IsStepSection)
CreateStepPdf(mySection, cb);
else
{
myPdfFile = BuildMSWordPDF(mySection);
readerWord = myPdfFile != null ? new PdfReader(myPdfFile) : null;
OnStatusChanged("Get Section", PromsPrinterStatusType.GetSection);
int sectPageCount = (int)(Math.Ceiling(decimal.Parse(mySection.SectionConfig.Section_NumPages)));
for (int ii = 0; ii < sectPageCount; ii++)
{
int pageNumber = 1 + ii;
if (readerWord != null)
{
bool doimport2 = true;
PdfImportedPage fgPage = null;
try
{
fgPage = cb.PdfWriter.GetImportedPage(readerWord, ii + 1);
}
catch (Exception ex)
{
Console.WriteLine(ex);
doimport2 = false;
}
OnStatusChanged("Read MSWord", PromsPrinterStatusType.ReadMSWord);
if (doimport2) AddImportedPageToLayer(cb.PdfWriter.DirectContentUnder, _MSWordLayer, fgPage, 0, 0);
OnStatusChanged("Merge MSWord", PromsPrinterStatusType.MergeMSWord);
}
OnStatusChanged("Before NewPage", PromsPrinterStatusType.Before);
cb.PdfDocument.NewPage();
OnStatusChanged("After NewPage", PromsPrinterStatusType.NewPage);
}
}
}
if (_MyHelper.BackgroundFile != null)
{
_MyHelper.MySvg = null;
while (cb.PdfWriter.CurrentPageNumber <= _MyHelper.BackgroundPageCount)
{
if (_TextLayer != null) cb.BeginLayer(_TextLayer);
float fontSize = 30;
ColumnText ct = new ColumnText(cb);
iTextSharp.text.Font font = FontFactory.GetFont("Arial", fontSize, new iTextSharp.text.Color(PrintOverride.TextColor));
Chunk chk = new Chunk("No PROMS2010 Output", font);
float xCenter = cb.PdfDocument.PageSize.Width / 2;
float yCenter = cb.PdfDocument.PageSize.Height / 2;
float width = chk.GetWidthPoint() * 1.01F;
float height = fontSize * 1.5F;
ct.SetSimpleColumn(xCenter - width/2, yCenter - height/2, xCenter + width/2, yCenter + height/2);
Phrase ph = new Phrase(chk);
ct.AddElement(ph);
cb.SetColorFill(new iTextSharp.text.Color(PrintOverride.TextColor));
ct.Go();
if (_TextLayer != null) cb.EndLayer();
cb.PdfDocument.NewPage();
}
}
CloseDocument(cb, outputFileName);
// Return the fileName;
return outputFileName;
}
private void CreateStepPdf(SectionInfo section, PdfContentByte cb)
{
iTextSharp.text.pdf.PdfWriter writer = cb.PdfWriter;
ItemInfo myItemInfo = section as ItemInfo;
// 792: 72 * 11 inches - TopRow - Top is high value
float _TwipsPerPage = 792;
float yTopMargin = _TwipsPerPage - (float)myItemInfo.MyDocStyle.Layout.TopRow;
float yBottomMargin = yTopMargin - (float)myItemInfo.MyDocStyle.Layout.PageLength - 2 * vlnPrintObject.SixLinesPerInch;
vlnParagraph.Prefix = myItemInfo.Path;
Rtf2Pdf.PdfDebug = true;
Rtf2Pdf.Offset = new PointF(24, 2.5F);
_MyHelper.ChangeBarDefinition = DetermineChangeBarSettings(myItemInfo);
vlnParagraph myParagraph = new vlnParagraph(null, cb, myItemInfo, (float)myItemInfo.MyDocStyle.Layout.LeftMargin, 0, 0, myItemInfo.ColumnMode, myItemInfo.ActiveFormat);
myParagraph.ToPdf(cb, yTopMargin, yTopMargin, yBottomMargin);
cb.PdfDocument.NewPage();
OnStatusChanged("StepSection converted to PDF " + section.ShortPath, PromsPrinterStatusType.BuildStep);
}
// Determine if any menu selections for change bars have overridden the data
// supplied in the format file. Settings are location and text.
// We could also put up the dialog for change bars if option is 'User Specified',
// i.e. prompt before printing.
private ChangeBarDefinition DetermineChangeBarSettings(ItemInfo myItemInfo)
{
// get to procedure level:
ItemInfo ii = myItemInfo;
while (ii.MyContent.Type != 0)
{
ii = ii.MyActiveParent as ItemInfo;
}
DocVersionInfo dvi = ii.MyActiveParent as DocVersionInfo;
if (dvi == null) return null; // should never be null!
DocVersionConfig docverConfig = dvi.MyConfig as DocVersionConfig;
ChangeBarDefinition cbd = new ChangeBarDefinition();
// if there is not overridden data on the docversion, prompt user...
ChangeBarData changeBarData = myItemInfo.ActiveFormat.PlantFormat.FormatData.ProcData.ChangeBarData;
if (docverConfig == null || docverConfig.Print_ChangeBar == DocVersionConfig.PrintChangeBar.SelectBeforePrinting)
{
// use these for now, i.e. this is what user would have selected from dialog.
cbd.MyChangeBarType = DocVersionConfig.PrintChangeBar.WithDefault;
cbd.MyChangeBarLoc = DocVersionConfig.PrintChangeBarLoc.OutsideBox;
cbd.MyChangeBarText = DocVersionConfig.PrintChangeBarText.None;
}
else
{
cbd.MyChangeBarType = docverConfig.Print_ChangeBar;
cbd.MyChangeBarLoc = docverConfig.Print_ChangeBarLoc;
cbd.MyChangeBarText = docverConfig.Print_ChangeBarText;
}
if (cbd.MyChangeBarType == DocVersionConfig.PrintChangeBar.WithDefault) // get data from format
{
cbd.MyChangeBarText = changeBarData.ChangeBarMessage == "ChgID" ? DocVersionConfig.PrintChangeBarText.ChgID :
changeBarData.ChangeBarMessage == "DateAndChgID" ? DocVersionConfig.PrintChangeBarText.DateChgID :
changeBarData.ChangeBarMessage == "None" ? DocVersionConfig.PrintChangeBarText.None :
changeBarData.ChangeBarMessage == "RevNum" ? DocVersionConfig.PrintChangeBarText.RevNum : DocVersionConfig.PrintChangeBarText.UserDef;
}
if (cbd.MyChangeBarType != DocVersionConfig.PrintChangeBar.Without)
{
// if the format has the absolutefixedchangecolumn format flag, then always use the fixedchangecolumn from the
// format, otherwise, use the default column based on the selected location, stored in the base format.
cbd.MyChangeBarColumn = (changeBarData.AbsoluteFixedChangeColumn) ?
(int)changeBarData.FixedChangeColumn :
System.Convert.ToInt32(changeBarData.DefaultCBLoc.Split(" ".ToCharArray())[System.Convert.ToInt32(cbd.MyChangeBarLoc)]);
if (cbd.MyChangeBarText == DocVersionConfig.PrintChangeBarText.UserDef)
cbd.MyChangeBarMessage = docverConfig.Print_UserCBMess1 + @"\n" + docverConfig.Print_UserCBMess2;
}
return cbd;
}
private SvgPart PageItemToSvgText(PageItem pageItem, string text, float yOffset)
{
SvgText svgText = new SvgText();
svgText.Text = text;
E_Justify justify = pageItem.Justify ?? E_Justify.PSLeft;
if ((justify & E_Justify.PSLeft) == E_Justify.PSLeft)
svgText.Justify = SvgJustify.Left;
else if ((justify & E_Justify.PSRight) == E_Justify.PSRight)
svgText.Justify = SvgJustify.Right;
else
svgText.Justify = SvgJustify.Center;
svgText.Font = pageItem.Font.WindowsFont;
svgText.X = new SvgMeasurement((float)(pageItem.Col ?? 0), E_MeasurementUnits.PT);
svgText.Y = new SvgMeasurement((float)(yOffset + pageItem.Row ?? 0), E_MeasurementUnits.PT);
if (svgText.Font.Underline && svgText.Text.EndsWith(" ")) svgText.Text = svgText.Text.Substring(0, svgText.Text.Length - 1) + "\xA0";// replace last space with a hardspace
return svgText;
}
}
public static class MSWordToPDF
{
private static LBApplicationClass _MyApp = null;
public static LBApplicationClass MyApp
{
get
{
if (_MyApp == null)
_MyApp = new LBApplicationClass();
return _MyApp;
}
}
public static string ToPDFReplaceROs(SectionInfo sect, bool openPdf)
{
string fileName = GetFileName(sect);
// TODO: do we want to cache the word pdfs
//if (System.IO.File.Exists(@"C:\Temp\" + fileName + ".pdf"))
// return @"C:\Temp\" + fileName + ".pdf";
int docStyleIndex = ((int)sect.MyContent.Type) % 10000;
DocStyle myDocStyle = sect.ActiveFormat.PlantFormat.DocStyles.DocStyleList[docStyleIndex];
PageStyle myPageStyle = myDocStyle.pagestyle;
ProcedureInfo proc = sect.ActiveParent as ProcedureInfo;
DocVersionInfo dvi = proc.ActiveParent as DocVersionInfo;
ROFstInfo rofst = dvi.DocVersionAssociations[0].MyROFst;
ROFSTLookup lookup = rofst.ROFSTLookup;
string igPrefix = dvi.DocVersionConfig.RODefaults_graphicsprefix;
string spPrefix = dvi.DocVersionConfig.RODefaults_setpointprefix;
// string AccPageID = string.Format("<{0}-{1}>", accPrefix, roch.appid);
using (DSOFile myFile = new DSOFile(sect.MyContent.MyEntry.MyDocument))
{
LBDocumentClass myDoc = MyApp.Documents.Open(myFile.FullName);
float newTop = (float)myDocStyle.Layout.TopRow;
float newLeft = (float)myDocStyle.Layout.LeftMargin;
float newLength = (float)myDocStyle.Layout.PageLength;
float newWidth = (float)myDocStyle.Layout.PageWidth;
float oldTop = myDoc.PageSetup.TopMargin;
float oldLeft = myDoc.PageSetup.LeftMargin;
float oldBottom = myDoc.PageSetup.BottomMargin;
float oldRight = myDoc.PageSetup.RightMargin;
float oldHeight = myDoc.PageSetup.PageHeight;
float oldWidth = myDoc.PageSetup.PageWidth;
float newRight = oldWidth - (newWidth + newLeft);
if (newRight < 0) newRight = 0;
float newBottom = oldBottom - newTop;
//Console.WriteLine("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9}", newTop, newLeft, newLength, newWidth, oldTop, oldLeft, oldBottom, oldRight,oldHeight,oldWidth);
myDoc.PageSetup.BottomMargin = 0;// 11 * 72 - (newTop + newLength);
myDoc.PageSetup.RightMargin = newRight;
myDoc.PageSetup.LeftMargin = newLeft;
myDoc.PageSetup.TopMargin = newTop;
LBSelection sel = FindRO();
while (sel != null)
{
string val = lookup.GetROValueByAccPagID(sel.Text, spPrefix, igPrefix);
int? type = lookup.GetROTypeByAccPagID(sel.Text, spPrefix, igPrefix);
if ((int)type == 8) // Image
{
//Console.WriteLine("Image: {0} - {1}", sect.MyContent.Number, sect.MyContent.Text);
bool imageROTokenReplaced = false;
string[] vals = val.Split("\n".ToCharArray());
ROImageInfo roImage = ROImageInfo.GetByROFstID_FileName(rofst.ROFstID, vals[0]);
if (roImage != null)
{
ROImageFile roImageFile = new ROImageFile(roImage);
float width = 72 * Int32.Parse(vals[3], System.Globalization.NumberStyles.AllowHexSpecifier) / 12.0F;
int lines = Int32.Parse(vals[2], System.Globalization.NumberStyles.AllowHexSpecifier);
float height = 72 * lines / 6.0F;
//sel.MoveEnd(LBWdUnits.wdLine, lines);// The number of lines depends on the third parameter
//sel.EndKey(LBWdUnits.wdLine, true);
//sel.MoveEnd(LBWdUnits.wdCharacter, -1);
//Console.WriteLine("Lines = {0}", lines);
sel.Text = "";
// TODO: Need to create a temporary file for printing.
// TODO: Need a way to eliminate the temporary file when done printing.
// LBInlineShape shape = sel.InlineShapes.AddPicture(@"C:\Plant\HLP\VEHLP\ro\No1Seal.bmp");
float x = (float)sel.get_Information(LBWdInformation.wdHorizontalPositionRelativeToPage);
float y = (float)sel.get_Information(LBWdInformation.wdVerticalPositionRelativeToPage);
//LBInlineShape shape = sel.InlineShapes.AddPicture(pngFile);
LBRange myRange = sel.Paragraphs.First.Range;
float yTop = (float)myRange.get_Information(LBWdInformation.wdVerticalPositionRelativeToPage);
LBShape shape = myDoc.Shapes.AddPicture(roImageFile.MyFile.FullName, x, y - yTop, sel.Range);
// LBInlineShape shape = sel.InlineShapes.AddPicture(roImageFile.MyFile.FullName);
//Console.WriteLine("{0} Shape Width {1} Height {2}", val.Replace("\n", "','"), shape.Width, shape.Height);
shape.Width = width;
shape.Height = height;
//Console.WriteLine("{0} Shape Width {1} Height {2}", val.Replace("\n", "','"), shape.Width, shape.Height);
imageROTokenReplaced = true;
}
if (!imageROTokenReplaced)
sel.Text = string.Format("Bad Image Link (Missing Image File:{0})", vals[0]);
}
else if ((int)type == 4) // X-Y Plot
{
val = val.Replace("`", "\xB0");
//AddInfo("\tRO Found {0} = '{1}'", sel.Text, val);
sel.Text = "";
//float width = 72 * Int32.Parse(vals[3], System.Globalization.NumberStyles.AllowHexSpecifier) / 12.0F;
//float height = 72 * lines / 6.0F;
string pngFile = @"C:\Temp\XYPlot1.png";
RectangleF plotRect = CreatePlot(pngFile, val, 600F);
//LBShape shape = myDoc.Shapes.AddPicture(@"C:\Temp\XYPlot.png", 0, 0, sel.Range);
float x = (float)sel.get_Information(LBWdInformation.wdHorizontalPositionRelativeToPage);
float y = (float)sel.get_Information(LBWdInformation.wdVerticalPositionRelativeToPage);
//LBInlineShape shape = sel.InlineShapes.AddPicture(pngFile);
LBRange myRange = sel.Paragraphs.First.Range;
float yTop = (float)myRange.get_Information(LBWdInformation.wdVerticalPositionRelativeToPage);
float xAdjust = -29.3F; // TODO: Check this value
float yAdjust = 9.1F; // TODO: Check this value
LBShape shape = myDoc.Shapes.AddPicture(pngFile, x + xAdjust + plotRect.X, yAdjust + y - yTop + plotRect.Y, sel.Range);
//Console.WriteLine(",{0},{1},{2},{3}", x, y - yTop, xAdjust,yAdjust);
shape.LockAspectRatio = LBMsoTriState.msoTrue;
//shape.Width = .89F * shape.Width;
//shape.Width = float.Parse(tbAdjust.Text) * shape.Width;
shape.Width = plotRect.Width;
//shape.Height = .89F * shape.Height;
sel.WholeStory();
// TODO: Do we want to color code ROs
//sel.Range.Font.Color = LBWdColor.wdColorRed;
//Console.WriteLine("{0} Shape Width {1} Height {2}", val.Replace("\n", "','"), shape.Width, shape.Height);
//shape.Width = width;
//shape.Height = height;
//Console.WriteLine("{0} Shape Width {1} Height {2}", val.Replace("\n", "','"), shape.Width, shape.Height);
//imageROTokenReplaced = true;
}
else
{
val = val.Replace("`", "\xB0");
//AddInfo("\tRO Found {0} = '{1}'", sel.Text, val);
InsertROValue(sel, val, sect.ActiveFormat.PlantFormat.FormatData.ROData.UpRoIfPrevUpper);
}
sel = FindRO();
}
sel = MyApp.Selection;
sel.WholeStory();
sel.Range.Font.Color = (LBWdColor)WordColor(PrintOverride.OverrideTextColor(System.Drawing.Color.Black));
sel.ParagraphFormat.LineSpacingRule = LBWdLineSpacing.wdLineSpaceExactly;
sel.ParagraphFormat.LineSpacing = 12;
fileName = CreatePDF(fileName, openPdf);
MyApp.ActiveDocument.Close();
MyApp.Quit();
_MyApp = null;
return fileName;
}
}
private static int WordColor(System.Drawing.Color color)
{
System.Drawing.Color c1 = System.Drawing.Color.FromArgb(0, color.B, color.G, color.R);
return c1.ToArgb();
}
private static string GetFileName(SectionInfo sect)
{
string fileName = "Doc " + sect.MyContent.MyEntry.DocID.ToString(); // +" " + (sect.DisplayNumber == "" ? sect.DisplayText : sect.DisplayNumber);
return fileName;
}
private static RectangleF CreatePlot(string pngFile, string xyPlot, float resolution)
{
RectangleF retval = new RectangleF(0, 0, 0, 0);
Form frm = Application.OpenForms[0];
Graphics grfx = frm.CreateGraphics();
string emfFile = pngFile.Replace(".png", ".emf");
Metafile mf = new Metafile(emfFile, grfx.GetHdc());
grfx.Dispose();
grfx = Graphics.FromImage(mf);
float dpi = grfx.DpiX;
//grfx.ScaleTransform(resolution / grfx.DpiX, (resolution +1F) / grfx.DpiY);
grfx.ScaleTransform(resolution / grfx.DpiX, resolution / grfx.DpiY);
grfx.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
grfx.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
grfx.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
grfx.Clear(System.Drawing.Color.Transparent);
XYPlots.XYPlot.BlackColor = System.Drawing.Color.Red;
XYPlots.XYPlot myPlot = new XYPlots.XYPlot(xyPlot);
myPlot.SetMargins(0, 0, 0, 0);
myPlot.Process(new VG.VGOut_Graphics(grfx));
grfx.Dispose();
GraphicsUnit gu = new GraphicsUnit();
retval = mf.GetBounds(ref gu);
retval.Width *= dpi / resolution;
retval.Height *= dpi / resolution;
retval.X *= dpi / resolution;
retval.Y *= dpi / resolution;
//retval.X = myPlot.Width-retval.Width;
//AddInfo("{0},{1},{2},{3},{4},{5}", myPlot.Width, myPlot.Height, retval.Width, retval.Height,retval.X,retval.Y);
//Console.Write("{0},{1},{2},{3}", myPlot.Width, myPlot.Height, retval.Width, retval.Height);
mf.Save(pngFile, ImageFormat.Png);
//Console.WriteLine("'pngfile','{0}'", pngFile);
mf.Dispose();
FileInfo myFile = new System.IO.FileInfo(emfFile);
myFile.Delete();
return retval;
}
private static void InsertROValue(LBSelection sel, string roValue, bool upRoIfPrevUpper)
{
if (roValue == null)
{
sel.Text = "RO Not Found";
sel.Font.Color = LBWdColor.wdColorRed;
}
else
{
if (upRoIfPrevUpper && sel.LastWasUpper) roValue = roValue.ToUpper();
// Convert fortran formatted numbers to scientific notation.
string tmp = DisplayRO.ConvertFortranFormatToScienctificNotation(roValue);
// Look for superscript or subscript and insert the appropriate commands
//Match roMatch = Regex.Match(tmp, @"(.*?)\\(super|sub) (.*?)\\nosupersub ");
Match roMatch = Regex.Match(tmp, @"(.*?)\\(up3|dn3) (.*?)\\(up0|dn0) ");
if (roMatch.Groups.Count == 4)// Superscript or subscript found
{
sel.Font.Color = LBWdColor.wdColorRed;
while (roMatch.Groups.Count == 4)
{
sel.TypeText(roMatch.Groups[1].Value); // output the text preceeding the super or sub command
sel.Font.Position = roMatch.Groups[2].Value == "up3" ? 2 : -2; // Shift the vertical position for super or sub
//sel.Font.Position = roMatch.Groups[2].Value == "super" ? 2 : -2; // Shift the vertical position for super or sub
sel.TypeText(roMatch.Groups[3].Value); // output the superscript or subscript
sel.Font.Position = 0; // restore the vertical position
tmp = tmp.Substring(roMatch.Length); // remove the processed text
//roMatch = Regex.Match(tmp, @"(.*?)\\(super|sub) (.*?)\\nosupersub "); // check to see if the text contain another super or sub
roMatch = Regex.Match(tmp, @"(.*?)\\(up3|dn3) (.*?)\\(up0|dn0) "); // check to see if the text contain another super or sub
}
if(tmp != "")// Add any remaining text
sel.TypeText(tmp);
sel.Font.Color = LBWdColor.wdColorAutomatic;
}
else // if no superscripts or subscripts just output the text
{
sel.Text = roValue;
sel.Font.Color = LBWdColor.wdColorRed;
}
}
}
private static LBSelection FindRO()
{
LBSelection sel = MyApp.Selection;
LBFind find = sel.Find;
find.ClearFormatting();
find.Text = "[<](?@)-(?@)[>]";
//find.Wrap = LBWdFindWrap.wdFindStop;
find.Wrap = LBWdFindWrap.wdFindContinue;
find.MatchCase = false;
find.MatchWholeWord = false;
find.MatchWildcards = true;
find.MatchSoundsLike = false;
find.MatchAllWordForms = false;
if (find.Execute()) return sel;
return null;
}
private static string CreatePDF(string fileName, bool openPdf)
{
return MyApp.CreatePDF(@"C:\Temp\" + fileName + ".pdf", openPdf);
}
}
}

View File

@@ -7,7 +7,6 @@ using iTextSharp.text.factories;
using Itenso.Rtf;
using Itenso.Rtf.Parser;
using Itenso.Rtf.Interpreter;
//using Itenso.Rtf.Model;
using Itenso.Rtf.Support;
using System.IO;
@@ -57,7 +56,6 @@ namespace Volian.Print.Library
while (yTop > 0)
{
float newYTop = TextAt(cb, para, x, yTop - 12F, width, 100,"",36);
//Console.WriteLine("{0},{1},{2}", yTop, width, newYTop);
width -= 16;
yTop = newYTop;
}
@@ -100,7 +98,7 @@ namespace Volian.Print.Library
if (iParagraph.Font.BaseFont != null)
yDescent = -iParagraph.Font.BaseFont.GetDescentPoint("Almg", iParagraph.Font.Size);
if (PdfDebug)
DrawPdfDebug(cb, left, top, left + width, myColumnText.YLine, debugText,yDescent);
DrawPdfDebug(cb, left, top, left + width, myColumnText.YLine, debugText, yDescent);
return myColumnText.YLine;
}
public static float FigureAt(PdfContentByte cb, iTextSharp.text.Image image, float x, float y, float width, float height, string debugText, float yBottommargin, bool hasBorder)
@@ -132,7 +130,6 @@ namespace Volian.Print.Library
PdfLayer debugLayer = _MyPageHelper == null ? null : _MyPageHelper.DebugLayer;
if (debugLayer == null) return;
System.Drawing.Color sysColor = PrintOverride.OverrideDebugColor(System.Drawing.Color.Gray);
// yAdj is dependent on the size of the font and the spacing between lines.
cb.SaveState();
cb.BeginLayer(debugLayer);
cb.SetColorStroke(new Color(sysColor));

View File

@@ -26,12 +26,6 @@ namespace Volian.Print.Library
get { return _BottomMessage; }
set { _BottomMessage = value; }
}
//vlnParagraphs _MyParagraphs = new vlnParagraphs(null);
//public vlnParagraphs MyParagraphs
//{
// get { return _MyParagraphs; }
// set { _MyParagraphs = value; }
//}
Dictionary<int, vlnParagraph> _MyParagraphs = new Dictionary<int, vlnParagraph>();
public Dictionary<int, vlnParagraph> MyParagraphs
{
@@ -44,16 +38,32 @@ namespace Volian.Print.Library
get { return _YMultiplier; }
set { _YMultiplier = value; }
}
private PdfWriter _MyPdfWriter;
public PdfWriter MyPdfWriter
{
get { return _MyPdfWriter; }
set
{
MyPageCounts = new PageCounts();
_MyPdfWriter = value;
}
}
private PdfContentByte _MyPdfContentByte;
public PdfContentByte MyPdfContentByte
{
get { return _MyPdfContentByte; }
set { _MyPdfContentByte = value; }
}
public override void OnCloseDocument(PdfWriter writer, iTextSharp.text.Document document)
{
MyPageCounts.DrawTemplates();
}
public override void OnEndPage(PdfWriter writer, iTextSharp.text.Document document)
{
MyPageCounts.CanIncrement = true;
base.OnEndPage(writer, document);
DrawChangeBars(writer.DirectContent);
DrawMessages(writer.DirectContent);
//DrawBackground(writer.DirectContentUnder);
//DrawPageList(writer.DirectContent);
//DrawWatermark(writer.DirectContentUnder);
//DrawZoomOMatic(writer.DirectContent);
//CurrentPageNumber++;
}
private void DrawMessages(PdfContentByte cb)
{
@@ -233,7 +243,7 @@ namespace Volian.Print.Library
vcb.YChangeBarBottomExtend >= (cb.YChangeBarBottomExtend - vlnPrintObject.SixLinesPerInch)) return true;
return false;
}
public VlnSvgPageHelper(VEPROMS.CSLA.Library.SectionInfo mySection)
public VlnSvgPageHelper(VEPROMS.CSLA.Library.SectionInfo mySection) : base()
{
MySection = mySection;
}
@@ -251,15 +261,66 @@ namespace Volian.Print.Library
mySvg.TopMargin = 9.6F;
VEPROMS.CSLA.Library.PageStyle pageStyle = docStyle.pagestyle;
AddPageListItems(mySvg, pageStyle, mySection);
//DocStyle docStyle = GetDocStyle(activeFormat, (section.MyContent.Type ?? 10000));
mySvg.ProcessText += new SvgProcessTextEvent(mySvg_ProcessText);
return mySvg;
}
PageCounts MyPageCounts = null;
private static Regex regexFindToken = new Regex("{[^{}]*}");
private string mySvg_ProcessText(object sender, SvgProcessTextArgs args)
{
if (!args.MyText.Contains("{"))
return args.MyText;
/*
* Check if tokens for handling page counts ({PAGE} {OF} etc). if so, do templates.
*/
if (args.MyText.Contains("{PAGE}") || args.MyText.Contains("{OF}"))
{
/*
public enum E_NumberingSequence : uint
{
NoPageNum = 0,
WithSteps = 1, Add to original steps section page count.
WithinEachDocStyle = 2,
WithinEachSection = 3,
WithinEachDocStyle1 = 4,
GroupedByPagination = 5,
GroupedByLevel = 6,
WithStepsAndSecondaryPageNumber = 7,
WithStepsAndSecondaryPageNumberGroupedByLevel = 8,
Like6_ButDoesntNeedSubsection = 9,
Like6_ButDoesntNeedSubsection1 = 10
};
*/
// default for the key is to make it NumberingSequence. Then handle
// specific cases.
string key = ((int)MySection.MyDocStyle.NumberingSequence).ToString();
E_NumberingSequence numseq = MySection.MyDocStyle.NumberingSequence??0;
switch (numseq)
{
case E_NumberingSequence.WithSteps: // Number with 'originalstepsection'
ProcedureInfo pc = MySection.MyProcedure;
int sectid = 0;
foreach (SectionInfo si in pc.Sections)
{
SectionConfig sc = si.MyConfig as SectionConfig;
if (sc.Section_OriginalSteps == "Y")
{
sectid = si.ItemID;
break;
}
}
if (sectid != 0) key = (int)E_NumberingSequence.WithinEachSection + "." + sectid;
break;
case E_NumberingSequence.WithinEachDocStyle:
key = key + "." + MySection.ActiveFormat.FormatID + "." + MySection.MyDocStyle.Index;
break;
case E_NumberingSequence.WithinEachSection:
key = key + "." + MySection.ItemID;
break;
}
MyPdfContentByte.AddTemplate(MyPageCounts.AddToTemplateList(key, MyPdfWriter, args.MyText, args.MySvgText.Font, args.MySvgText.Align, args.MySvgText.FillColor), args.MySvgScale.X(args.MySvgText.X), args.MySvgScale.Y(MyPdfContentByte, args.MySvgText.Y));
return string.Empty;
}
return regexFindToken.Replace(args.MyText, new MatchEvaluator(ReplacePageListToken));
}
private string BuildMyText(VEPROMS.CSLA.Library.FormatInfo activeFormat)

View File

@@ -25,6 +25,10 @@ namespace Volian.Print.Library
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()
{
}
@@ -44,25 +48,33 @@ namespace Volian.Print.Library
float top = CalculateYOffset(yPageStart, yTopMargin) - (7*MyPageHelper.YMultiplier);
float bottom = top - (Height * MyPageHelper.YMultiplier);
float leftmargin = (float)MyParent.MyItemInfo.MyDocStyle.Layout.LeftMargin + 3;
float left = leftmargin + (float)(MyBox.Start ?? 0);
float right = leftmargin + (float)MyBox.End;
float left = (float)(MyBox.Start == null ? MyParent.MyItemInfo.MyDocStyle.Layout.LeftMargin : leftmargin + MyBox.Start);
float right = leftmargin + (float)(MyBox.End ?? DefEnd);
iTextSharp.text.Color boxColor = new iTextSharp.text.Color(PrintOverride.OverrideBoxColor(System.Drawing.Color.Black));
cb.SetColorStroke(boxColor);
switch (MyBox.BoxStyle)
if (DefBox != null)
{
case BoxThin:
cb.SetLineWidth(.6F);
cb.Rectangle(left, bottom, right - left, Height*MyPageHelper.YMultiplier);
break;
case BoxThick:
float lineThickness = 6;
cb.SetLineWidth(lineThickness);
cb.Rectangle(left, bottom + (lineThickness/2), right - left, (Height - lineThickness)*MyPageHelper.YMultiplier);
break;
default:
// For other than OHLP/HLP. For those not matching the HLP Boxes
throw new Exception("Missing vlnBox handler");
break;
cb.SetLineWidth(.6F);
cb.Rectangle(left, bottom, right - left, Height * MyPageHelper.YMultiplier);
}
else
{
switch (MyBox.BoxStyle)
{
case BoxThin:
cb.SetLineWidth(.6F);
cb.Rectangle(left, bottom, right - left, Height * MyPageHelper.YMultiplier);
break;
case BoxThick:
float lineThickness = 6;
cb.SetLineWidth(lineThickness);
cb.Rectangle(left+6, bottom + (lineThickness / 2), right - left - 6, (Height - lineThickness) * MyPageHelper.YMultiplier);
break;
default:
// For other than OHLP/HLP. For those not matching the HLP Boxes
throw new Exception("Missing vlnBox handler");
break;
}
}
cb.Stroke();
if (textLayer != null) cb.EndLayer();

View File

@@ -33,9 +33,20 @@ namespace Volian.Print.Library
foreach (ItemInfo childItemInfo in itemInfoList)
{
int? bxIndx = childItemInfo.FormatStepData.StepLayoutData.STBoxindex;
if (bxIndex != bxIndx)
if (bxIndex != bxIndx || childItemInfo.FormatStepData.BoxIt)
{
if (bxIndex == null) // First boxed step
if (childItemInfo.FormatStepData.BoxIt) // this is a boxed HLS
{
box = new vlnBox();
box.MyBox = new Box();
box.DefBox = vlnBox.BoxThin;
StepSectionLayoutData ssld = formatInfo.PlantFormat.FormatData.SectData.StepSectionData.StepSectionLayoutData;
int colR = int.Parse(formatInfo.PlantFormat.FormatData.SectData.StepSectionData.StepSectionLayoutData.ColRTable.Split(",".ToCharArray())[childItemInfo.ColumnMode]);
int widS = vlnPrintObject.ToInt(formatInfo.PlantFormat.FormatData.SectData.StepSectionData.StepSectionLayoutData.WidSTablePrint, maxRNO);
box.DefEnd = (float)(ssld.ColS + colR + widS + (60/4.8));
box.YOffset = yoff - .75F * vlnPrintObject.SixLinesPerInch;
}
else if (bxIndex == null) // First boxed step
{
box = new vlnBox();
box.MyBox = formatInfo.PlantFormat.FormatData.BoxList[(int)bxIndx];
@@ -61,9 +72,15 @@ namespace Volian.Print.Library
para.PartsContainer.Add(box);
}
Add(para);
// para.YBottomMost will have y for bottom of any substeps that are also enclosed in the box.
yoff = para.YBottomMost;
if (childItemInfo.FormatStepData.BoxIt)
{
box.Height = yoff - box.YOffset - (1.1F * vlnPrintObject.SixLinesPerInch);
box = null; // if doing boxed steps, only do single sibling at a time.
}
}
if (bxIndex != null) // End Box Style
if (box != null)
{
if (box != null) box.Height = yoff - box.YOffset; // new height, with children
yoff += 2 * vlnPrintObject.SixLinesPerInch;
@@ -84,13 +101,7 @@ namespace Volian.Print.Library
public float ParagraphToPdf(PdfContentByte cb, float yPageStart, float yTopMargin, float yBottomMargin)
{
if (Processed) return yPageStart;
//if (!MyPageHelper.MyParagraphs.ContainsValue(this)) return yPageStart;
Processed = true;
//MyPageHelper.MyParagraphs.Remove(this.MyItemInfo.ItemID);
//Console.WriteLine("'{0}',{1},{2},{3},{4},{5},{6},{7},{8}", MyItemInfo.Path.Substring(_Prefix.Length).Trim(),
// cb.PdfWriter.CurrentPageNumber, yStart, YTop, yStart + YTop, yStart + YTop - _LastY, YTopMost, YSize, yPageStart);
//_LastY = yStart + YTop;
// 72 points per inchs. 504 is 7 inches wide. 3 1/2 inches wide: 252, 100);
if (_PartsAbove != null && _PartsAbove.Count > 0) yPageStart = PartsAbove.ToPdf(cb, yPageStart, yTopMargin, yBottomMargin);
float yLocation = CalculateYOffset(yPageStart, yTopMargin);
if (MyItemInfo.HasChangeBar()) MyPageHelper.AddChangeBar(DoChangeBar(cb, MyItemInfo, MyPageHelper, XOffset, yLocation, MyPageHelper.MaxRNO, MyItemInfo.ActiveFormat), cbMess);
@@ -161,8 +172,6 @@ namespace Volian.Print.Library
}
public override float ToPdf(PdfContentByte cb, float yPageStart, float yTopMargin, float yBottomMargin)
{
//if (!MyPageHelper.MyParagraphs.Contains(this)) return yPageStart;
//MyPageHelper.MyParagraphs.Remove(this);
float yLocation = yPageStart - YTopMost;
int paginate = Paginate(yLocation, yTopMargin, yBottomMargin);
switch (paginate)
@@ -187,7 +196,7 @@ namespace Volian.Print.Library
Console.WriteLine("Not done yet");
break;
case E_ContBottomLoc.BottomOfPage: // place continue message at bottom of page
msg_yLocation = yBottomMargin; // +2 * _SixLinesPerInch; // 2 lines above bottom margin
msg_yLocation = yBottomMargin + 2 * SixLinesPerInch; // 2 lines above bottom margin
break;
}
//float msg_yLocation = CalculateYOffset(yPageStart, yTopMargin);
@@ -254,8 +263,6 @@ namespace Volian.Print.Library
{
float yPageSize = yTopMargin - yBottomMargin;
float yWithinMargins = CalculateYLocation(yLocation, yTopMargin) - yBottomMargin;
if (MyItemInfo.ItemID == 832)
Console.Write(",'Here'");
if (MyItemInfo.IsStepSection) return 0; // Don't Paginate on a Step Section
float mySize = YSize * MyPageHelper.YMultiplier;
if (mySize <= yWithinMargins)
@@ -766,28 +773,6 @@ namespace Volian.Print.Library
return _ChildrenLeft;
}
}
//public vlnParagraph(vlnParagraph myParent, ItemInfo myItemInfo, float xoff, float yoff, float width, string rtf, ChildLocation childRelation)
//{
// MyParent = myParent;
// MyItemInfo = myItemInfo;
// XOffset = xoff;
// YOffset = yoff;
// Width = width;
// Rtf = rtf;
// switch (childRelation)
// {
// case ChildLocation.Below:
// myParent.ChildrenBelow.Add(this);
// break;
// case ChildLocation.Above:
// myParent.ChildrenAbove.Add(this);
// break;
// case ChildLocation.Right:
// myParent.ChildrenRight.Add(this);
// break;
// }
//}
public void AdjustXOffsetForTab(ItemInfo itemInfo, int maxRNO, FormatInfo formatInfo, vlnTab myTab)
{
float tabWidth = (myTab == null) ? 0 : myTab.Width;

View File

@@ -33,7 +33,7 @@ namespace Volian.Print.Library
YOffset = yoffset;
Text = cleanText;
Rtf = GetRtf(origText, vFont);
XOffset = xoffset; // -Width;
XOffset = xoffset;
MyFont = vFont;
Width = _CharsToTwips * (Text.Length + 2);
}