From f7e805a745de7150a75c1e0714818de4f7da0737 Mon Sep 17 00:00:00 2001 From: Rich Date: Wed, 8 Oct 2014 20:14:27 +0000 Subject: [PATCH] Added Page Count to Status Fixed Hanging Indent logic for vlnParagraphs --- PROMS/Volian.Print.Library/PromsPrinter.cs | 8 +++-- .../Volian.Print.Library/VlnSvgPageHelper.cs | 3 +- PROMS/Volian.Print.Library/vlnPrintObject.cs | 32 +++++++++++++------ 3 files changed, 30 insertions(+), 13 deletions(-) diff --git a/PROMS/Volian.Print.Library/PromsPrinter.cs b/PROMS/Volian.Print.Library/PromsPrinter.cs index 35cd6019..e7ad59cd 100644 --- a/PROMS/Volian.Print.Library/PromsPrinter.cs +++ b/PROMS/Volian.Print.Library/PromsPrinter.cs @@ -96,6 +96,10 @@ namespace Volian.Print.Library { OnStatusChanged(this, new PromsPrintStatusArgs(myStatus, type)); } + public void OnStatusChanged(string msg) + { + OnStatusChanged(this, new PromsPrintStatusArgs(msg, PromsPrinterStatusType.General)); + } private void OnStatusChanged(string myStatus, PromsPrinterStatusType type, int progress) { OnStatusChanged(this, new PromsPrintStatusArgs(myStatus, type, progress)); @@ -513,7 +517,7 @@ namespace Volian.Print.Library } if (!mySection.IsStepSection) _MyHelper.PageBookmarks.Add((ItemInfo)mySection, ((mySection.DisplayNumber ?? "") == "" ? "" : mySection.DisplayNumber + " - ") + mySection.DisplayText, null); _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. @@ -873,7 +877,7 @@ namespace Volian.Print.Library rtfText = GetRtfToC(mySection.MyContent.Text, tOfC, ovrFont); } else - rtfText = GetRtfToC(mySection.MyContent.Text, tOfC); + rtfText = GetRtfToC(mySection.MyContent.Text, tOfC); Paragraph myparagrapht = vlnPrintObject.RtfToParagraph(rtfText); width = secPagePos - adjSecTitlePos - 6; float savTitleWid = width; diff --git a/PROMS/Volian.Print.Library/VlnSvgPageHelper.cs b/PROMS/Volian.Print.Library/VlnSvgPageHelper.cs index 50e7f501..f8d597a7 100644 --- a/PROMS/Volian.Print.Library/VlnSvgPageHelper.cs +++ b/PROMS/Volian.Print.Library/VlnSvgPageHelper.cs @@ -182,6 +182,7 @@ namespace Volian.Print.Library //} public override void OnEndPage(PdfWriter writer, iTextSharp.text.Document document) { + MyPromsPrinter.OnStatusChanged(string.Format("Page {0}", CurrentPageNumber+1)); bool onBlankPage = OnBlankPage; if (OnBlankPage) { @@ -210,7 +211,7 @@ namespace Volian.Print.Library if (!CreatingFoldoutPage) DrawRuler(writer.DirectContent); } - 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++; if (MySection.ActiveFormat.PlantFormat.FormatData.SectData.PrintPhoneList) { diff --git a/PROMS/Volian.Print.Library/vlnPrintObject.cs b/PROMS/Volian.Print.Library/vlnPrintObject.cs index 4bce563c..cd1e0e29 100644 --- a/PROMS/Volian.Print.Library/vlnPrintObject.cs +++ b/PROMS/Volian.Print.Library/vlnPrintObject.cs @@ -349,21 +349,33 @@ namespace Volian.Print.Library // Notes: // A hard return will reset the chkW (indent width) back to zero. // We jump out of the processing loop after the first indent token is found and ignor any other ones - IRtfDocument rtfDoc2 = RtfInterpreterTool.BuildDoc(rtf.Replace("\x05", @"\f1 \u9999? \f0 ")); - Rtf2iTextSharp rtf2IText2 = new Rtf2iTextSharp(rtfDoc2); - iTextSharp.text.Paragraph para2 = rtf2IText2.Convert(); - float chkW = 0; - foreach (Chunk chk in para2.Chunks) - { - if (chk.Content[0] == 9999) break; - if (chk.Content.Contains("\n")) chkW = 0; //hard return - reset chkW (indent start) - chkW += chk.GetWidthPoint(); - } + float chkW = CalculateHangingIndent(rtf); para.IndentationLeft = chkW; para.FirstLineIndent = -chkW; } return para; } + public static float CalculateHangingIndent(string rtf) + { + float chkW=0; + IRtfDocument rtfDoc2 = RtfInterpreterTool.BuildDoc(rtf.Replace("\x05", @"\f1 \u9999? \f0 ")); + Rtf2iTextSharp rtf2IText2 = new Rtf2iTextSharp(rtfDoc2); + iTextSharp.text.Paragraph para2 = rtf2IText2.Convert(); + foreach (Chunk chk in para2.Chunks) + { + if (chk.Content[0] == 9999) break; + if (chk.Content.Contains("\u270f")) + { + int i = chk.Content.IndexOf('\u270F'); + int n = chk.Content.Length; + chkW += chk.GetWidthPoint() * i / (n - i); + break; + } + if (chk.Content.Contains("\n")) chkW = 0; //hard return - reset chkW (indent start) + chkW += chk.GetWidthPoint(); + } + return chkW; + } public abstract float ToPdf(PdfContentByte cb, float yPageStart, ref float yTopMargin, ref float yBottomMargin); protected float CalculateYOffset(float yPageStart, float yTopMargin) {