diff --git a/PROMS/Volian.Controls.Library/DisplaySearch.cs b/PROMS/Volian.Controls.Library/DisplaySearch.cs index 38bd9478..eb83fb5e 100644 --- a/PROMS/Volian.Controls.Library/DisplaySearch.cs +++ b/PROMS/Volian.Controls.Library/DisplaySearch.cs @@ -1006,6 +1006,9 @@ namespace Volian.Controls.Library //TypesSelected = "Step Types Searched: " + ((typstr != null) ? typstr : "all step types"); //TypesSelected = "Searched Step Types: " + ((typstr != null) ? typstr : "all step types"); //TypesSelected = (typstr != null) ? "Searched Step Types: " + typstr : "Searched All Step Types"; + string unitPrefix = Mydocversion.DocVersionConfig.Unit_ProcedureNumber; + if (unitPrefix.EndsWith("#")) + unitPrefix = unitPrefix.Replace("#", ""); if (tabSearchTypes.SelectedTab == tabSearchTypes.Tabs[0]) // Text Search { @@ -1026,7 +1029,7 @@ namespace Volian.Controls.Library ReportTitle = "Step Element Report"; //"Proms - Search by Type: " + typstr; TypesSelected = "Filtered By: " + typstr; SearchString = null; - SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, "", cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, ItemSearchIncludeLinks.Value, includeRTFformat, includeSpecialChars); + SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, "", cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, ItemSearchIncludeLinks.Value, includeRTFformat, includeSpecialChars, unitPrefix); cmbResultsStyleIndex = 1; //display step locations in results } } @@ -1044,7 +1047,7 @@ namespace Volian.Controls.Library SearchString = TextSearchString; //TypesSelected = (typstr != null) ? "Searched Step Types: " + typstr : "Searched All Step Types"; //TypesSelected = "Searched Step Types: " + ((typstr != null) ? typstr : "All Step Types"); - SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, TextSearchString, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxIncROTextSrch.Checked ? ItemSearchIncludeLinks.Value : ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars); + SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, TextSearchString, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, cbxIncROTextSrch.Checked ? ItemSearchIncludeLinks.Value : ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars, unitPrefix); cmbResultsStyleIndex = 3; // display step text in results //} } @@ -1066,7 +1069,8 @@ namespace Volian.Controls.Library //TypesSelected = "Searched Step Types: " + ((typstr != null) ? typstr : "All Step Types"); //SearchResults = ItemInfoList.GetListFromAnnotationSearch(dviSearchList, typeSearchList, textSearchString, srchStr, cbxCaseSensitiveAnnoText.Checked); - SearchResults = ItemInfoList.GetListFromAnnotationSearch(DVISearchList, TypeSearchList, AnnotationSearchType, cbxTextSearchAnnotation.Text, cbxCaseSensitiveAnnoText.Checked); + + SearchResults = ItemInfoList.GetListFromAnnotationSearch(DVISearchList, TypeSearchList, AnnotationSearchType, cbxTextSearchAnnotation.Text, cbxCaseSensitiveAnnoText.Checked,unitPrefix); //UpdateAnnotationSearchResults(); cmbResultsStyleIndex = 2; // display annotation text in results } @@ -1078,12 +1082,12 @@ namespace Volian.Controls.Library //TypesSelected = "Searched Step Types: " + ((typstr != null) ? typstr : "All Step Types"); if (cbxFndUnLnkROVals.Enabled && cbxFndUnLnkROVals.Checked) { - SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, ROSearchList, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars); + SearchResults = ItemInfoList.GetListFromTextSearch(DVISearchList, TypeSearchList, ROSearchList, cbxBooleanTxtSrch.Checked ? 2 : cbxCaseSensitive.Checked ? 1 : 0, ItemSearchIncludeLinks.Nothing, includeRTFformat, includeSpecialChars, unitPrefix); cmbResultsStyleIndex = 3; // display step text in results } else { - SearchResults = ItemInfoList.GetListFromROSearch(DVISearchList, TypeSearchList, ROSearchList); + SearchResults = ItemInfoList.GetListFromROSearch(DVISearchList, TypeSearchList, ROSearchList, unitPrefix); cmbResultsStyleIndex = 3; // display step text in results } } diff --git a/PROMS/Volian.Print.Library/PageCount.cs b/PROMS/Volian.Print.Library/PageCount.cs index fb32f529..36cc9737 100644 --- a/PROMS/Volian.Print.Library/PageCount.cs +++ b/PROMS/Volian.Print.Library/PageCount.cs @@ -27,6 +27,13 @@ namespace Volian.Print.Library 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 { @@ -42,10 +49,16 @@ namespace Volian.Print.Library } 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); @@ -102,6 +115,12 @@ namespace Volian.Print.Library 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) diff --git a/PROMS/Volian.Print.Library/PromsPrinter.cs b/PROMS/Volian.Print.Library/PromsPrinter.cs index 4fa59b7c..1c2f91a4 100644 --- a/PROMS/Volian.Print.Library/PromsPrinter.cs +++ b/PROMS/Volian.Print.Library/PromsPrinter.cs @@ -282,7 +282,21 @@ namespace Volian.Print.Library } return PrintProcedureOrFoldout(myProcedure, false, outputFileName); } - + // Find the last section that has a Final Message defined in its format + // Return that section's itemID or a -1 if the Final Message is not defined + private int GetFinalMessageSectionID(ProcedureInfo myProcedure, bool doingFoldout) + { + int sectionID = -1; + if (!doingFoldout) + { + foreach (SectionInfo mySection in myProcedure.Sections) + { + if (mySection.MyDocStyle.Final.Message != null && mySection.MyDocStyle.Final.Message.Length > 0) + sectionID = mySection.ItemID; + } + } + return sectionID; + } private string PrintProcedureOrFoldout(ProcedureInfo myProcedure, bool doingFoldout, string outputFileName) { // Create an MSWord Pdf @@ -295,6 +309,7 @@ namespace Volian.Print.Library OnStatusChanged("After NewPage", PromsPrinterStatusType.NewPage); OnStatusChanged(myProcedure.DisplayNumber, PromsPrinterStatusType.ProgressSetup, myProcedure.Sections.Count); int progress = 0; + int finalMessageSectionID = GetFinalMessageSectionID(myProcedure, doingFoldout); foreach (SectionInfo mySection in myProcedure.Sections) { @@ -313,7 +328,7 @@ namespace Volian.Print.Library if (DebugOutput) { // 16-bit background - string procedureFileName = BackgroundFolder + "\\" + CreateFileName(myProcedure.DisplayNumber); + string procedureFileName = BackgroundFolder + "\\" + PDFFile;//CreateFileName(myProcedure.DisplayNumber); FileInfo VEPromsFile = new FileInfo(procedureFileName); if (VEPromsFile.Exists && !doingFoldout) { @@ -344,7 +359,7 @@ namespace Volian.Print.Library } PdfReader readerWord = null; string myPdfFile = null; - + _MyHelper.FinalMessageSectionID = finalMessageSectionID; // set VlnSvgPageHelper with the finalMessageSectionID if (mySection.IsStepSection) { if ((mySection.MyDocStyle.StructureStyle.Style ?? 0 & E_DocStructStyle.UseSectionFoldout) != 0) diff --git a/PROMS/Volian.Print.Library/VlnSvgPageHelper.cs b/PROMS/Volian.Print.Library/VlnSvgPageHelper.cs index 3e537f1a..b16405fe 100644 --- a/PROMS/Volian.Print.Library/VlnSvgPageHelper.cs +++ b/PROMS/Volian.Print.Library/VlnSvgPageHelper.cs @@ -73,7 +73,13 @@ namespace Volian.Print.Library get { return _MyPdfContentByte; } set { _MyPdfContentByte = value; } } - + private int _FinalMessageSectionID; + + public int FinalMessageSectionID + { + get { return _FinalMessageSectionID; } + set { _FinalMessageSectionID = value; } + } public override void OnCloseDocument(PdfWriter writer, iTextSharp.text.Document document) { AddBookmarks(writer); @@ -456,6 +462,12 @@ namespace Volian.Print.Library 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; } + if (args.MyText.Contains("{FINALPAGE}") && MySection.ItemID == FinalMessageSectionID) + { + string key = "FinalPage"; + MyPdfContentByte.AddTemplate(MyPageCounts.AddToTemplateList(key, MyPdfWriter, args.MyText,MySection.MyDocStyle.Final.Message, 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) @@ -497,8 +509,25 @@ namespace Volian.Print.Library private void AddPageListItems(Volian.Svg.Library.Svg mySvg, VEPROMS.CSLA.Library.PageStyle pageStyle, VEPROMS.CSLA.Library.SectionInfo section) { SvgGroup svgGroup = new SvgGroup(); + //int defPtPerRow = 72 / 6; + //int curLPI = 6; // default + //int prevLPI = 6; + //float PrevRow = 0; + //float rowAdj = 0; // = 18; foreach (VEPROMS.CSLA.Library.PageItem pageItem in pageStyle.PageItems) { + //if (PrevRow > 0) + //{ + // //float pgRow = (float)(pageItem.Row + rowAdj); + // if (curLPI != prevLPI) + // { + // int prow = (int)(PrevRow / defPtPerRow); + // int nrows = ((int)(pageItem.Row / defPtPerRow)) - prow; + // rowAdj += (float)Math.Abs(((nrows * (72 / curLPI)) - ((nrows * defPtPerRow) + rowAdj))); + // //rowAdj += (float)(((pgRow - PrevRow) / (72 * prevLPI)) * (72 / curLPI)); + // prevLPI = curLPI; + // } + //} MatchCollection matches = regexFindToken.Matches(pageItem.Token); if (matches.Count>0) { @@ -544,12 +573,25 @@ namespace Volian.Print.Library case "{PROCTITLE}": case "{PROCTITLE1}": case "{PROCTITLE2}": + case "{COVERPROCTITLE}": float linelen = (int)section.ActiveFormat.PlantFormat.FormatData.ProcData.TitleLength * (float)pageItem.Font.CPI / 12; - SplitTitle(svgGroup, pageItem, section.MyProcedure.MyContent.Text, (int)linelen, token); + SplitTitle(svgGroup, pageItem, section.MyProcedure.MyContent.Text, (int)linelen, token); //,rowAdj); + //SplitTitle(svgGroup, pageItem, section.MyProcedure.MyContent.Text, (int)section.ActiveFormat.PlantFormat.FormatData.ProcData.TitleLength, token); + break; + case "{COVERTITLE1}": + case "{COVERTITLE2}": + int ctlen = section.ActiveFormat.PlantFormat.FormatData.ProcData.CoverTitleLength??0; + float coverlinelen = ((ctlen == 0) ? (int)section.ActiveFormat.PlantFormat.FormatData.ProcData.TitleLength : ctlen) * (float)pageItem.Font.CPI / 12; + SplitCoverTitle(svgGroup, pageItem, section.MyProcedure.MyContent.Text, (int)coverlinelen, token);//, rowAdj); //SplitTitle(svgGroup, pageItem, section.MyProcedure.MyContent.Text, (int)section.ActiveFormat.PlantFormat.FormatData.ProcData.TitleLength, token); break; case "{EOPNUM}": - svgGroup.Add(PageItemToSvgText(pageItem, pageItem.Token.Replace(token, section.MyProcedure.MyContent.Number))); + string eopnum = section.MyProcedure.MyContent.Number; + string unitnum = MySection.MyDocVersion.DocVersionConfig.Unit_ProcedureNumber; + if (unitnum.Length > 0) + eopnum = unitnum.Replace("#", eopnum); + svgGroup.Add(PageItemToSvgText(pageItem, pageItem.Token.Replace(token, eopnum))); + //svgGroup.Add(PageItemToSvgText(pageItem, pageItem.Token.Replace(token, section.MyProcedure.MyContent.Number))); break; case "{SECTIONLEVELTITLE}": SplitTitle(svgGroup, pageItem, section.DisplayText, section.ActiveFormat.PlantFormat.FormatData.SectData.SectionTitleLength, token); @@ -558,6 +600,9 @@ namespace Volian.Print.Library case "{SECTIONLEVELNUMBER}": svgGroup.Add(PageItemToSvgText(pageItem, pageItem.Token.Replace(token,section.DisplayNumber))); break; + case "{UNITTEXT}": + svgGroup.Add(PageItemToSvgText(pageItem, pageItem.Token.Replace(token,MySection.MyDocVersion.DocVersionConfig.Unit_Text))); + break; default: // see if it's a PSI token: if (token.Contains(@"PS-")) @@ -590,6 +635,15 @@ namespace Volian.Print.Library if (val != null && val != "")svgGroup.Add(PageItemToSvgText(pageItem, val)); } } + //else if (token.Contains(@"{DRV:Lpi ")) + //{ + // int indx = token.IndexOf("{DRV:Lpi ") + 9; + // int endindx = token.IndexOf("}", indx); + // string str = token.Substring(indx, endindx - indx); + // curLPI = Convert.ToInt32(str) / 2; + // //PrevRow = (float)(pageItem.Row + rowAdj); + // PrevRow = (float)pageItem.Row; + //} else svgGroup.Add(PageItemToSvgText(pageItem, pageItem.Token)); //_MyLog.InfoFormat("Token not processed {0}", token); @@ -626,6 +680,36 @@ namespace Volian.Print.Library yOffset += 12; } } + private void SplitCoverTitle(SvgGroup svgGroup, VEPROMS.CSLA.Library.PageItem pageItem, string title, int? len, string match) + { + if (len == null || ItemInfo.StripRtfFormatting(title).Length < len) + { + if (match == "{COVERTITLE2}") return; // this would have been done in COVERTITLE1 + svgGroup.Add(PageItemToSvgText(pageItem, title)); + return; + } + // Otherwise determine how many line to split the text into + List titleLines = SplitText(title, (int)len); + + if (match == "{COVERTITLE1}") + { + svgGroup.Add(PageItemToSvgText(pageItem, titleLines[0])); + return; + } + // if the token was proctitle, dont' adjust. If the token was PROCTITLE1/2 then + // move down 6. +// int adj = pageItem.Token.Contains("1") || pageItem.Token.Contains("2") ? 0 : -6; + int adj = (titleLines.Count > 2) ? -6 : 0; + float yOffset = adj * (titleLines.Count - 2); + int lnCnt = 0; + foreach (string line in titleLines) + { + lnCnt++; + if (lnCnt == 1) continue; + svgGroup.Add(PageItemToSvgText(pageItem, line, yOffset)); + yOffset += 12; + } + } private List SplitText(string text, int len) { List results = new List(); diff --git a/PROMS/Volian.Print.Library/vlnBox.cs b/PROMS/Volian.Print.Library/vlnBox.cs index 4b7fbf9d..d44abeef 100644 --- a/PROMS/Volian.Print.Library/vlnBox.cs +++ b/PROMS/Volian.Print.Library/vlnBox.cs @@ -11,6 +11,7 @@ namespace Volian.Print.Library { public partial class vlnBox : vlnPrintObject { + private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); private int _LineType; /* how to represent?? */ private System.Drawing.Color _Color; public System.Drawing.Color Color @@ -38,6 +39,8 @@ namespace Volian.Print.Library public const string BoxThin = "\x2510.\x2500.\x250c.\x2502. . .\x2518.\x2514. .\x2500. . "; const string BoxThick = "\x2584.\x2584.\x2584.\x2588. . .\x2580.\x2580. .\x2580. . "; const string BoxDouble = "\x2557.\x2550.\x2554.\x2551. . .\x255D.\x255A. .\x2550. . "; + const string BoxFPLNote = "\x2557.\x2550\xad.\x2554\xad.\x2551. . .\x255d.\x255a\xad. .\x2550\xad. . "; + const string BoxFPLCaution = "\x2588.\x2580.\x2588.\x2588. . .\x2588.\x2588. .\x2584. . "; public override float ToPdf(PdfContentByte cb, float yPageStart, float yTopMargin, float yBottomMargin) { cb.SaveState(); @@ -81,9 +84,22 @@ namespace Volian.Print.Library // inner rectangle cb.Rectangle(left + llxOffset + lineThickness, bottom + lineThickness * 1.5F, right - left - lineThickness * 2, (Height - lineThickness * 3) * MyPageHelper.YMultiplier); break; + case BoxFPLNote: + lineThickness = 2; + cb.SetLineWidth(lineThickness); + float[] linePattern = { 6, 1.75F, 2.5F, 1.75F }; + cb.SetLineDash(linePattern,3); + cb.Rectangle(left + llxOffset, bottom + (lineThickness / 2) -1, right - left, (2 + Height - lineThickness) * MyPageHelper.YMultiplier); + break; + case BoxFPLCaution: + lineThickness = 3; + cb.SetLineWidth(lineThickness); + cb.Rectangle(left + llxOffset, bottom + (lineThickness / 2), right - left, (Height - lineThickness) * MyPageHelper.YMultiplier); + break; default: // For other than thick, thin and double. - Console.WriteLine("NO BOXES"); + //Console.WriteLine("NO BOXES"); + _MyLog.WarnFormat("INVALID BOX SYTLE {0} \"{1}\"", MyParent.MyItemInfo.FormatStepData.Type, CharToAsc(MyBox.BoxStyle)); break; //throw new Exception("Missing vlnBox handler"); } diff --git a/PROMS/Volian.Print.Library/vlnParagraph.cs b/PROMS/Volian.Print.Library/vlnParagraph.cs index 502ba109..c62949c5 100644 --- a/PROMS/Volian.Print.Library/vlnParagraph.cs +++ b/PROMS/Volian.Print.Library/vlnParagraph.cs @@ -878,7 +878,14 @@ namespace Volian.Print.Library { doSectTab = true; if (itemInfo.IsStepSection && formatInfo.PlantFormat.FormatData.SectData.SectionNumber.Just == "PSLeft") - localXOffset = (float)formatInfo.PlantFormat.FormatData.SectData.SectionNumber.Pos + (float)itemInfo.MyDocStyle.Layout.LeftMargin; + { + float offset = (float)itemInfo.MyDocStyle.Layout.LeftMargin; + if (formatInfo.PlantFormat.FormatData.SectData.SectionNumber.Pos != null) + offset += (float)formatInfo.PlantFormat.FormatData.SectData.SectionNumber.Pos; + localXOffset = offset; + // jsj - 12Aug2011 + //localXOffset = (float)formatInfo.PlantFormat.FormatData.SectData.SectionNumber.Pos + (float)itemInfo.MyDocStyle.Layout.LeftMargin; + } } if (!itemInfo.IsSection || doSectTab) { @@ -1055,6 +1062,9 @@ namespace Volian.Print.Library else // AER or RNO XOffset = MyParent.XOffset + MyParent.Width / 2 - Width / 2; + // Set any position adjustment (defined in the format on a per type basis) + XOffset += (float)(MyItemInfo.FormatStepData.StepPrintData.PosAdjust ?? 0); + // if the XOffset < High Level Step Text's XOffset, then align with the High Level Step Text if (XOffset < xLowerLimit) XOffset = xLowerLimit; diff --git a/PROMS/Volian.Print.Library/vlnTab.cs b/PROMS/Volian.Print.Library/vlnTab.cs index 5ca810e3..94ae8cae 100644 --- a/PROMS/Volian.Print.Library/vlnTab.cs +++ b/PROMS/Volian.Print.Library/vlnTab.cs @@ -57,7 +57,14 @@ namespace Volian.Print.Library get { return _MyMacro; } set { _MyMacro = value; } } - + + private float GetTextWidth(VE_Font vefont, string txt) + { + System.Drawing.Font font = new System.Drawing.Font(vefont.Family, (float)vefont.Size); + iTextSharp.text.Font iFont = Volian.Svg.Library.VolianPdf.GetFont(font); + float w = iFont.BaseFont.GetWidthPointKerned(Text.Replace("\u25CF","@"), (float)vefont.Size); + return w; + } public vlnTab(PdfContentByte cb, vlnParagraph myparent, string origTab, string cleanTab, float xoffset, float yoffset, VE_Font vFont, bool doSectTab) { MyContentByte = cb; @@ -65,7 +72,7 @@ namespace Volian.Print.Library YOffset = yoffset; Text = cleanTab; MyFont = vFont; - Width = MyFont.CharsToTwips * (Text != null ? Text.Length : origTab.Length); + Width = GetTextWidth(MyFont, (Text != null ? Text : origTab));//MyFont.CharsToTwips * (Text != null ? Text.Length : origTab.Length); if (origTab.Contains(@"{!")) { int mindx = origTab.IndexOf(@"{!"); @@ -77,10 +84,10 @@ namespace Volian.Print.Library origTab = origTab.Replace(macro,""); origTab = origTab + " "; cleanTab = origTab; - Width = MyFont.CharsToTwips * (cleanTab != null ? cleanTab.Length : origTab.Length); + Width = GetTextWidth(MyFont, (cleanTab != null ? cleanTab : origTab));//MyFont.CharsToTwips * (cleanTab != null ? cleanTab.Length : origTab.Length); } Rtf = GetRtf(origTab, vFont); - Rtf = Rtf.Replace("\u25CF", @"\f1\u9679?\f0"); // bullet 25CF + Rtf = Rtf.Replace("\u25CF", @"\f1\u9679?\f0"); // bullet 25CF // jsj- add space after \f0 if (myparent.MyItemInfo.FormatStepData != null && !myparent.MyItemInfo.FormatStepData.AlwaysTab && myparent.MyItemInfo.MyPrevious != null) { Rtf = Rtf.Replace("Caution:", " "); @@ -99,7 +106,16 @@ namespace Volian.Print.Library 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)