diff --git a/PROMS/Volian.Controls.Library/DisplayText.cs b/PROMS/Volian.Controls.Library/DisplayText.cs index 5f0ba8f5..6c3e75b1 100644 --- a/PROMS/Volian.Controls.Library/DisplayText.cs +++ b/PROMS/Volian.Controls.Library/DisplayText.cs @@ -199,7 +199,14 @@ namespace Volian.Controls.Library } catch (Exception ex) { - _MyLog.Error("DisplayText.CreateRTF Error doing DoROAdjustments", ex); + if (_MyItemInfo != null) + { + _MyLog.ErrorFormat("<<< ERROR >>> Error doing DoROAdjustments\r\n==>'RO Adjustments Error',{0},'{1}','{2}','{3}'" + , _MyItemInfo.ItemID, _MyItemInfo.MyDocVersion.MyFolder.Name, _MyItemInfo.ShortPath, ex.Message); + } + else + _MyLog.Error("DisplayText.CreateRTF Error doing DoROAdjustments", ex); + } } // if in print mode, view mode, or non-active richtextbox do replace words. Only if in diff --git a/PROMS/Volian.Print.Library/Pagination.cs b/PROMS/Volian.Print.Library/Pagination.cs index 1f10e8e8..1ee7a8ab 100644 --- a/PROMS/Volian.Print.Library/Pagination.cs +++ b/PROMS/Volian.Print.Library/Pagination.cs @@ -71,7 +71,9 @@ namespace Volian.Print.Library vlnParagraph firstChild = ChildrenBelow.Count > 0 ? ChildrenBelow[0] : null; // Steps that have the smart template (the WCNCKL format for example), always include two children. if (MyItemInfo.IsHigh && MyItemInfo.FormatStepData.UseSmartTemplate && ChildrenBelow.Count > 1) - firstChild = ChildrenBelow[1]; + firstChild = ChildrenBelow[1]; + if (firstChild != null && !firstChild.MyItemInfo.IsNumbered) // If not numbered get the last child + firstChild = firstChild.MyParent.ChildrenBelow[firstChild.MyParent.ChildrenBelow.Count - 1]; float ySizeIncludingFirst = firstChild == null ? YSize : firstChild.YSize + (firstChild.YTopMost - YTopMost); bool KeepStepsOnPage = MyItemInfo.ActiveFormat.MyStepSectionLayoutData.KeepStepsOnPage; if (MyItemInfo.IsStepSection) @@ -108,7 +110,18 @@ namespace Volian.Print.Library //if (ySizeIncludingFirst > (yLocation - yBottomMargin) && ySizeIncludingFirst < yPageSize) vlnParagraph firstStepChild = firstChild; //while (firstStepChild.MyItemInfo.IsSection && firstStepChild.ChildrenBelow.Count > 0) firstStepChild = firstStepChild.ChildrenBelow[0]; - while (firstStepChild.ChildrenBelow.Count > 0 && (firstStepChild.MyItemInfo.IsSection || firstStepChild.MyItemInfo.IsHigh)) firstStepChild = firstStepChild.ChildrenBelow[0]; + if(firstStepChild.MyItemInfo.IsNumbered) + while (firstStepChild.ChildrenBelow.Count > 0 && (firstStepChild.MyItemInfo.IsSection || firstStepChild.MyItemInfo.IsHigh)) + { + firstStepChild = firstStepChild.ChildrenBelow[0]; + if (!firstStepChild.MyItemInfo.IsNumbered) + { + firstStepChild = firstStepChild.MyParent.ChildrenBelow[firstStepChild.MyParent.ChildrenBelow.Count-1]; + break; + } + } + else + firstStepChild = firstStepChild.MyParent.ChildrenBelow[firstStepChild.MyParent.ChildrenBelow.Count-1]; float ySizeIncludingFirstStep = firstStepChild.YSize + (firstStepChild.YTopMost - YTopMost); bool firstSubstepExceedsSpaceAvailable = ySizeIncludingFirstStep > yWithinMargins; if (KeepStepsOnPage && firstSubstepExceedsSpaceAvailable && !isFirstChild) @@ -192,15 +205,19 @@ namespace Volian.Print.Library // yPageSize is space on next page. This may be different if the format flag 'UseOnAllButFirst' is // set. // yWithinMargins is space available on current page. - if(firstStep == "Yes") - ShowPageBreak(8, "First HLS has to split on current page", firstStep, YSize, yPageSizeNextPage, yWithinMargins, ManualPageBreak); - else - ShowPageBreak(6, "HLS will have to split on current page", "Special", YSize, yPageSizeNextPage, yWithinMargins, ManualPageBreak); // if the HLS is part of a Smart Template (i.e. WCNCKL table), don't add in an extra line because // that makes pagination work incorrectly because the Smart Template has a 'table' line after the // text. + float ySpaceOnFirstPage = yWithinMargins + (MyItemInfo.FormatStepData.UseSmartTemplate ? 0 : SixLinesPerInch); + if (firstStep == "Yes") + { + ySpaceOnFirstPage = yWithinMargins; // Accounts for Section Title Line + ShowPageBreak(8, "First HLS has to split on current page", firstStep, YSize, yPageSizeNextPage, yWithinMargins, ManualPageBreak); + } + else + ShowPageBreak(6, "HLS will have to split on current page", "Special", YSize, yPageSizeNextPage, yWithinMargins, ManualPageBreak); //BuildPageBreakList(yWithinMargins + SixLinesPerInch, yPageSizeNextPage + yExtra2, KeepStepsOnPage); // Case 5 - Determine items where page break(s) occur - BuildPageBreakList(yWithinMargins + (MyItemInfo.FormatStepData.UseSmartTemplate?0:SixLinesPerInch), yPageSize + yExtra2, KeepStepsOnPage); // Case 5 - Determine items where page break(s) occur + BuildPageBreakList(ySpaceOnFirstPage, yPageSize + yExtra2, KeepStepsOnPage); // Case 5 - Determine items where page break(s) occur return 0; // Stay on this page } @@ -253,7 +270,10 @@ namespace Volian.Print.Library yPageStart = yTopMargin + YVeryTop; yLocation = yPageStart - YOffset; //MyItemInfo.ItemID, YSize, yPageSize, yLocation - DebugPagination.WriteLine("-1,'Yes','Forced Pagination',{0},{1},,{3},{4}", MyItemInfo.ItemID, YSize, 0, yLocation, MyItemInfo.DBSequence); + //_MyLog.ErrorFormat("<<< ERROR >>> Forced Pagination - ItemID = {0}\r\nLocation = '{1}'", MyItemInfo.ItemID, MyItemInfo.ShortPath); + _MyLog.ErrorFormat("<<< ERROR >>> Forced Pagination\r\n==>'Forced Pagination',{0},'{1}','{2}'" + , MyItemInfo.ItemID, MyItemInfo.MyDocVersion.MyFolder.Name, MyItemInfo.ShortPath); + DebugPagination.WriteLine("------,'Yes','Forced Pagination',{0},{1},,{3},{4}", MyItemInfo.ItemID, YSize, 0, yLocation, MyItemInfo.DBSequence); retval = Rtf2Pdf.TextAt(cb, IParagraph, XOffset, yLocation, Width, 100, DebugInfo, yBottomMargin); } private void ShowPageBreak(int instance, string message, string breakOrNot, float YSize, float yPageSize, float yWithinMargins, bool manualPageBreak) @@ -261,7 +281,7 @@ namespace Volian.Print.Library if (breakOrNot != "No") { // DebugPagination.WriteLine("{0}", MyItemInfo.DBSequence); //,instance); - DebugPagination.WriteLine("{0},'{1}',{2},'{3}','{4}',{5},{6},{7},{8},{9}", + DebugPagination.WriteLine("{0:D6},'{1}',{2},'{3}','{4}',{5},{6},{7},{8},{9}", MyPageHelper.MyPdfContentByte.PdfWriter.CurrentPageNumber - (breakOrNot == "Yes" ? 0 : 1), MyItemInfo.ShortPath, instance, (manualPageBreak ? "Manual " : "") + message, breakOrNot, @@ -297,7 +317,7 @@ namespace Volian.Print.Library vlnParagraph paraBreak = FindPageBreak(yStart, ySpaceOnCurPage, yLowerLimit, myList); if (paraBreak == null) break; // yTopNew is y Location of this page break. YTopMost is top of HLS, including any Cautions/Notes/Boxes/etc - float yTopNew = paraBreak.YVeryTop - YTopMost; + float yTopNew = paraBreak.YTopMost - YTopMost; RemoveProcessedParagraphs(myList, yTopNew - yTop); yTop = yTopNew; MyPageHelper.ParaBreaks.Add(paraBreak); diff --git a/PROMS/Volian.Print.Library/PromsPrinter.cs b/PROMS/Volian.Print.Library/PromsPrinter.cs index 1087284a..b8d2c64f 100644 --- a/PROMS/Volian.Print.Library/PromsPrinter.cs +++ b/PROMS/Volian.Print.Library/PromsPrinter.cs @@ -330,7 +330,7 @@ namespace Volian.Print.Library { SectionInfo mySection = myProcedure.Sections[i] as SectionInfo; if (!mySection.DisplayText.ToUpper().Contains("FOLDOUT")) - { + { if (mySection.MyDocStyle.Final != null && mySection.MyDocStyle.Final.Message != null && mySection.MyDocStyle.Final.Message.Length > 0) return mySection.ItemID; else @@ -453,7 +453,7 @@ namespace Volian.Print.Library { PrintTextMessage(cb, "No Proms Output", _TextLayer); cb.PdfDocument.NewPage(); // only have 16bit pages left (for DebugMode) - DebugPagination.WriteLine("{0},'{1}'", + DebugPagination.WriteLine("{0:D6},'{1}'", _MyHelper.MyPdfContentByte.PdfWriter.CurrentPageNumber, "No PROMS Output"); } } @@ -528,7 +528,7 @@ namespace Volian.Print.Library float yoff = 0; if (_MyHelper.DidFirstPageDocStyle) yoff = origYoff - (float)mySection.MyDocStyle.Layout.TopMargin; AddImportedPageToLayer(cb.PdfWriter.DirectContent, _MSWordLayer, fgPage, (float)(mySection.MyDocStyle.Layout.MSWordXAdj??0), (float)(mySection.MyDocStyle.Layout.MSWordYAdj??0)+yoff); - DebugPagination.WriteLine("{0},'{1}',{2}", + DebugPagination.WriteLine("{0:D6},'{1}',{2}", _MyHelper.MyPdfContentByte.PdfWriter.CurrentPageNumber, mySection.ShortPath,pageNumber); } @@ -832,7 +832,7 @@ namespace Volian.Print.Library if (doimport2) { AddImportedPageToLayer(cb.PdfWriter.DirectContent, textLayer, fgPage, 0, 0); - DebugPagination.WriteLine("{0},'{1}',{2}", + DebugPagination.WriteLine("{0:D6},'{1}',{2}", myPageHelper.MyPdfContentByte.PdfWriter.CurrentPageNumber, "Foldout", 1); } } diff --git a/PROMS/Volian.Print.Library/vlnParagraph.cs b/PROMS/Volian.Print.Library/vlnParagraph.cs index 9b5bda79..949f454e 100644 --- a/PROMS/Volian.Print.Library/vlnParagraph.cs +++ b/PROMS/Volian.Print.Library/vlnParagraph.cs @@ -78,15 +78,15 @@ namespace Volian.Print.Library { if (bxIndx != null) { - if (box != null) box.Height = yoff - box.YOffset; // new height, with children - box = new vlnBox(); - box.MyBox = formatInfo.PlantFormat.FormatData.BoxList[(int)bxIndx]; - int ln = 1; // a format flag determines whether there is a space before the note/caution. - if (childItemInfo.FormatStepData.OneLineBeforeTab) ln++; - if (childItemInfo.MixCautionNotesDiffType()) ln += 2; - box.YOffset = yoff + ((ln - 1) * vlnPrintObject.SixLinesPerInch); - yoff += ln * vlnPrintObject.SixLinesPerInch; - } + if (box != null) box.Height = yoff - box.YOffset; // new height, with children + box = new vlnBox(); + box.MyBox = formatInfo.PlantFormat.FormatData.BoxList[(int)bxIndx]; + int ln = 1; // a format flag determines whether there is a space before the note/caution. + if (childItemInfo.FormatStepData.OneLineBeforeTab) ln++; + if (childItemInfo.MixCautionNotesDiffType()) ln += 2; + box.YOffset = yoff + ((ln - 1) * vlnPrintObject.SixLinesPerInch); + yoff += ln * vlnPrintObject.SixLinesPerInch; + } } bxIndex = bxIndx; } @@ -454,7 +454,10 @@ namespace Volian.Print.Library DebugText.WriteLine("{0},'{1}','{2}','<>',{3}", MyItemInfo.ItemID, MyItemInfo.ShortPath,MyItemInfo.MyContent.Text,XOffset); float retval = Rtf2Pdf.GridAt(cb, MyGrid, XOffset, yLocation, Width, 100, DebugInfo, yBottomMargin, !MyItemInfo.FormatStepData.Type.Contains("Borderless")); if (MyGrid.Height > (yTopMargin - yBottomMargin)) - _MyLog.InfoFormat("\r\nTable is too big to fit on page, expect pagination problems. Table is in High Level Step {0}\r\n", MyItemInfo.MyHLS); + { + _MyLog.ErrorFormat("<<< ERROR >>> Table is too big to fit on page, expect pagination problems\r\n==>'Table Too Big',{0},'{1}','{2}',{3},{4}" + , MyItemInfo.ItemID, MyItemInfo.MyDocVersion.MyFolder.Name, MyItemInfo.ShortPath, MyGrid.Height,(yTopMargin - yBottomMargin)); + } return retval; } @@ -2379,7 +2382,8 @@ namespace Volian.Print.Library int level = paraLoc.StepLevel; if (KeepStepsOnPage && paraLoc.MyParagraph.MyItemInfo.MyContent.Type == 20001) { - if (paraLoc.MyParagraph.MyItemInfo.MyPrevious == null) + if (DontBreakHere(paraLoc)) + //if (paraLoc.MyParagraph.MyItemInfo.MyPrevious == null) // First substep level = 0; else level = 1; @@ -2388,6 +2392,19 @@ namespace Volian.Print.Library } return myList; } + private bool DontBreakHere(ParagraphLocation paraLoc) + { + if (paraLoc.MyParagraph.MyItemInfo.MyPrevious == null) // First substep + return true; + vlnParagraph myPara = paraLoc.MyParagraph; + while (!myPara.MyItemInfo.IsHigh) + { + if (myPara.MyItemInfo.IsCaution) return true; + if (myPara.MyItemInfo.IsNote) return true; + myPara = myPara.MyParent; + } + return false; + } } public class ParagraphLocation {