diff --git a/PROMS/VG/IVGOutput.cs b/PROMS/VG/IVGOutput.cs index 247f871b..6e5183b3 100644 --- a/PROMS/VG/IVGOutput.cs +++ b/PROMS/VG/IVGOutput.cs @@ -3,6 +3,9 @@ using System.Collections.Generic; using System.Text; using System.Drawing; using C1.C1Pdf; +using iTextSharp.text.pdf; +using iTextSharp.text.factories; +using Microsoft.Win32; namespace VG { @@ -82,4 +85,120 @@ namespace VG public float FontSizeAdjust { get { return .71f * 96f / _VGOutput.DpiX; } } // Changed to adjust for Screen DPI Setting } + public partial class VGOut_ITextSharp : IVGOutput + { + private PdfContentByte _VGOutput; + //public Graphics VGOutput + //{ get { return _VGOutput; } } + public VGOut_ITextSharp(PdfContentByte vgOutput) + { _VGOutput = vgOutput; } + public float Scale + { get { return 1; } } + public void DrawLine(Pen pn, float startx, float starty, float endx, float endy) + { + _VGOutput.SaveState(); + SetStrokeData(pn); + _VGOutput.MoveTo(startx, ScaleY(starty)); + _VGOutput.LineTo(endx, ScaleY(endy)); + _VGOutput.Stroke(); + _VGOutput.RestoreState(); + } + private void SetStrokeData(Pen pn) + { + _VGOutput.SetLineWidth(pn.Width); + _VGOutput.SetColorStroke(new iTextSharp.text.Color(pn.Color.R, pn.Color.G, pn.Color.B, pn.Color.A)); + } + public void DrawRectangle(Pen pn, RectangleF rectf) + { + _VGOutput.SaveState(); + SetStrokeData(pn); + _VGOutput.Rectangle(rectf.X, ScaleY(rectf.Y), rectf.Width, -rectf.Height); + _VGOutput.Stroke(); + _VGOutput.RestoreState(); + } + public void DrawEllipse(Pen pn, float cx, float cy, float dx, float dy) + { + _VGOutput.SaveState(); + SetStrokeData(pn); + _VGOutput.Ellipse(cx, ScaleY(cy), dx, -dy); + _VGOutput.Stroke(); + _VGOutput.RestoreState(); + } + public void DrawImage(Bitmap bm, RectangleF rectf) + { + _VGOutput.SaveState(); + // TODO: Determine how I can create an iTextSharp.text.Image + //_VGOutput.AddImage(new iTextSharp.text.Image( + _VGOutput.RestoreState(); + } + public void DrawString(string text, Font myFont, Brush brush, RectangleF rectf) + { + _VGOutput.SaveState(); + _VGOutput.BeginText(); + iTextSharp.text.Font itFont = GetFont(myFont.Name); + iTextSharp.text.pdf.BaseFont baseFont = itFont.BaseFont; + // _VGOutput.DrawString(text, myFont, brush, rectf, StringFormat.GenericTypographic); + _VGOutput.MoveText(rectf.X, ScaleY(rectf.Y) - myFont.SizeInPoints); + _VGOutput.SetFontAndSize(baseFont, myFont.SizeInPoints); + _VGOutput.SetTextRenderingMode(PdfContentByte.TEXT_RENDER_MODE_FILL); + _VGOutput.ShowTextKerned(text); + _VGOutput.EndText(); + _VGOutput.RestoreState(); + } + public void DrawArc(Pen pn, RectangleF rectf, float startAngle, float sweepAngle) + { + _VGOutput.SaveState(); + SetStrokeData(pn); + _VGOutput.Arc(rectf.X, ScaleY(rectf.Y), rectf.X + rectf.Width, ScaleY(rectf.Y + rectf.Height), -startAngle, -sweepAngle); + _VGOutput.Stroke(); + _VGOutput.RestoreState(); + } + public SizeF MeasureString(string text, Font myFont) + { + iTextSharp.text.Font itFont = GetFont(myFont.Name); + iTextSharp.text.pdf.BaseFont baseFont = itFont.BaseFont; + return new SizeF(baseFont.GetWidthPoint(text,myFont.SizeInPoints) + , baseFont.GetAscentPoint(text, myFont.SizeInPoints) + baseFont.GetDescentPoint(text, myFont.SizeInPoints)); + } + public void Save(string fileName) + { ;/* Don't do anything*/ } + public float FontSizeAdjust + { get { return 1; } } // Changed to adjust for Screen DPI Setting + public static iTextSharp.text.Font GetFont(string fontName) + { + RegisterFont(fontName); + return iTextSharp.text.FontFactory.GetFont(fontName); + } + //private void RegisterFonts() + // { + // //if (!FontFactory.IsRegistered("Arial")) + // //{ + // // RegisterFont("Prestige Elite Tall"); + // //} + //} + public static void RegisterFont(string fontName) + { + if (!iTextSharp.text.FontFactory.IsRegistered(fontName)) + { + foreach (string name in FontKey.GetValueNames()) + { + if (name.StartsWith(fontName)) + { + string fontFile = (string)FontKey.GetValue(name); + iTextSharp.text.FontFactory.Register(fontFile.Contains("\\") ? fontFile : FontFolder + "\\" + fontFile); + } + } + } + } + private static RegistryKey _FontKey = Registry.LocalMachine.OpenSubKey("Software").OpenSubKey("Microsoft").OpenSubKey("Windows NT").OpenSubKey("CurrentVersion").OpenSubKey("Fonts"); + public static RegistryKey FontKey + { get { return _FontKey; } } + private static string _FontFolder = (String)Registry.CurrentUser.OpenSubKey("Software").OpenSubKey("Microsoft").OpenSubKey("Windows").OpenSubKey("CurrentVersion").OpenSubKey("Explorer").OpenSubKey("Shell Folders").GetValue("Fonts"); + public static string FontFolder + { get { return _FontFolder; } } + private float ScaleY(float y) + { + return _VGOutput.PdfWriter.PageSize.Height - y; + } + } } diff --git a/PROMS/VG/VG.cs b/PROMS/VG/VG.cs index 299d815a..2c3ad9b6 100644 --- a/PROMS/VG/VG.cs +++ b/PROMS/VG/VG.cs @@ -133,20 +133,22 @@ namespace VG public static Pen CreatePen(Color color, float wid, float scale) { Pen pn; - if ((wid * scale) < .5F) + float scaleWid = wid * scale; + float colorFraction = (float)Math.Sqrt(scaleWid); + if (scaleWid < .5F) { //Console.WriteLine("Width = {0}", wid); - int R1 = (int)(wid * color.R); - int R2 = (int)((1 - wid) * Color.White.R); - int G1 = (int)(wid * color.G); - int G2 = (int)((1 - wid) * Color.White.G); - int B1 = (int)(wid * color.B); - int B2 = (int)((1 - wid) * Color.White.B); - pn = new Pen(Color.FromArgb(R1 + R2, G1 + G2, B1 + B2), wid); + int R1 = (int)(colorFraction * color.R); + int R2 = (int)((1 - colorFraction) * Color.White.R); + int G1 = (int)(colorFraction * color.G); + int G2 = (int)((1 - colorFraction) * Color.White.G); + int B1 = (int)(colorFraction * color.B); + int B2 = (int)((1 - colorFraction) * Color.White.B); + pn = new Pen(Color.FromArgb(R1 + R2, G1 + G2, B1 + B2), scaleWid); //pn = new Pen(color, wid*wid); } else - pn = new Pen(color, wid); + pn = new Pen(color, scaleWid); return pn; } } @@ -380,6 +382,7 @@ namespace VG //#if DEBUG // Pen pn = new Pen(myColors[iColor % myColors.Length], ToPoints(lnwid)); //iColor++; + //if (iColor >= myColors.Length) iColor = 0; //#else Pen pn = new Pen(VG.BlackBrush, ToPoints(lnwid)); //#endif diff --git a/PROMS/Volian.Controls.Library/DisplayText.cs b/PROMS/Volian.Controls.Library/DisplayText.cs index 5e5bbc1f..d5022a6f 100644 --- a/PROMS/Volian.Controls.Library/DisplayText.cs +++ b/PROMS/Volian.Controls.Library/DisplayText.cs @@ -883,7 +883,13 @@ namespace Volian.Controls.Library if (link.IndexOf("") != -1) return text; int transitionID = Convert.ToInt32(link.Split(" ".ToCharArray())[1]); // Find the transition - if (_MyItemInfo.MyContent.ContentTransitionCount <= 0) return "*Resolved Transition Text*"; + if (_MyItemInfo.MyContent.ContentTransitionCount <= 0) + { + // TODO: RHM 20100310 + _MyItemInfo.MyContent.RefreshContentTransitions(); + if (_MyItemInfo.MyContent.ContentTransitionCount <= 0) + return "*Resolved Transition Text*"; + } foreach (TransitionInfo ti in _MyItemInfo.MyContent.ContentTransitions) { if (ti.TransitionID == transitionID) @@ -918,8 +924,6 @@ namespace Volian.Controls.Library if (endLinkIndxV == -1) endLinkIndxV = text.IndexOf(@"\v0", linkIndx); // at end of string int endLinkIndxE = text.IndexOf(@"[END>", linkIndx); int endLinkIndx = (endLinkIndxV < endLinkIndxE) ? endLinkIndxV : endLinkIndxE; - if (endLinkIndx == -1) - Console.WriteLine("{0},{1},{2},'{3}'", endLinkIndx, linkIndx, text.Length,text.Substring(linkIndx)); vte.Link = text.Substring(linkIndx + 6, endLinkIndx - linkIndx - 6); // 6 for #Link: string tmptxt = null; @@ -945,7 +949,7 @@ namespace Volian.Controls.Library { if (vte.TextAndLink.Contains("(Resolved Transition Text)")) vte.TextAndLink = vte.TextAndLink.Replace("(Resolved Transition Text)", tmptxt); - else + else if (vte.Text != tmptxt) vte.Text = tmptxt; } diff --git a/PROMS/Volian.Controls.Library/StepItem.cs b/PROMS/Volian.Controls.Library/StepItem.cs index fe69931c..f47646b0 100644 --- a/PROMS/Volian.Controls.Library/StepItem.cs +++ b/PROMS/Volian.Controls.Library/StepItem.cs @@ -1869,27 +1869,6 @@ namespace Volian.Controls.Library //Console.WriteLine("TableWidth = {0}, lineMax = '{1}', myFont = {2}", max, lineMax, myFont); return max; } - // OLD - RHM 3-24-2010 public float TableWidth(Font myFont, string txt, bool addBorder) - //{ - // string[] lines = txt.Split("\n".ToCharArray()); - // float max = 0; - // string lineMax = ""; - // Graphics g = this.CreateGraphics(); - // PointF pnt = new PointF(0, 0); - // foreach (string line in lines) - // { - // string line2 = (addBorder ? "--" : "") + Regex.Replace(line, @"\\.*? ", ""); // Remove RTF Commands - // SizeF siz = g.MeasureString(line2, myFont, pnt, StringFormat.GenericTypographic); - // if (siz.Width + _MyStepPanel.MyStepPanelSettings.TableWidthAdjust > max) - // { - // max = siz.Width + _MyStepPanel.MyStepPanelSettings.TableWidthAdjust; - // lineMax = line2; - // } - // } - // //vlnStackTrace.ShowStackLocal("TableWidth", 1, 10); - // Console.WriteLine("TableWidth = {0}, lineMax = '{1}', myFont = {2}", max, lineMax, myFont); - // return max; - //} /// /// Calculates the table location /// diff --git a/PROMS/Volian.Controls.Library/StepRTB.cs b/PROMS/Volian.Controls.Library/StepRTB.cs index ddc692f4..e0f3017e 100644 --- a/PROMS/Volian.Controls.Library/StepRTB.cs +++ b/PROMS/Volian.Controls.Library/StepRTB.cs @@ -2292,11 +2292,6 @@ namespace Volian.Controls.Library } public void OutlineTable(bool withBorder) { - //if (_MyItemInfo.ItemID == 64671) - //{ - // Console.WriteLine("TABLE"); - // Console.WriteLine("WIDTH {0}", this.Width); - //} if (_MyStepItem != null) // Set the width based upon the contents { int newwidth = (int)_MyStepItem.TableWidth(Font, Text, true); @@ -2371,7 +2366,6 @@ namespace Volian.Controls.Library } return w; } - //private string RemoveLinkComments(string line) internal static string RemoveLinkComments(string line) { StringBuilder sb = new StringBuilder();