Added TotalPages count to DebugPagination
Added logic to close output file on Dispose Output TotalPages count when closed Added Manual Page Break output to DebugPagination.txt Added preliminary pagination logic for KeepStepsOnPages Fixed Pagination Logic for HLP EOPs and WCN EMGs Update TotalPages on completing print of procedure Added YTop to Debug Output on Paragraphs Added preliminary logic for KeepStepsOnPage Correct logic for word-wrap issue
This commit is contained in:
@@ -39,10 +39,12 @@ namespace Volian.Print.Library
|
||||
// The 3 was changed to 2 for the end line & the line below. The blank line below the step gives the blank
|
||||
// line above the end message, thus 2 not 3. This change was made on July 20, 2011 by RHM & KBR. The
|
||||
// procedure in questions was VEWCNEMG\EMGAPP.PRC, ES-01, Step 8.
|
||||
bool ManualPageBreak = false;
|
||||
float yEndMsg = !MyItemInfo.IsSection && MyItemInfo.MyHLS.NextItem == null && (MyItemInfo.MyDocStyle.End.Message ?? "") != "" ? 2 * SixLinesPerInch : 0;
|
||||
float yWithinMargins = CalculateYLocation(yLocation, yTopMargin) - yBottomMargin; // -SixLinesPerInch;
|
||||
// if step is breaking over a number of pages, determine if the current step is the
|
||||
// location of a pagebreak.
|
||||
if (MyItemInfo.ItemID == 54 || MyItemInfo.ItemID == 54) Console.WriteLine("here");
|
||||
if (MyPageHelper.ParaBreaks.Count > 0)
|
||||
{
|
||||
if (this == MyPageHelper.ParaBreaks[0] || this.YTopMost > MyPageHelper.ParaBreaks[0].YTopMost)
|
||||
@@ -50,13 +52,15 @@ namespace Volian.Print.Library
|
||||
MyPageHelper.ParaBreaks.RemoveAt(0);
|
||||
//Console.WriteLine("'PageBreak',6,'Yes','Page Break within Step',{0},{1},{2},{3}, {4},'{5}'", MyItemInfo.ItemID, YSize, 0, 0, 0, MyItemInfo.ShortPath);
|
||||
//Console.WriteLine("Prev = {0}", MyItemInfo.MyPrevious==null ? "''" : MyItemInfo.DBSequence);
|
||||
ShowPageBreak(1, "Page Break within Step", "Yes", YSize, yPageSize, yWithinMargins);
|
||||
ShowPageBreak(1, "Page Break within Step", "Yes", YSize, yPageSize, yWithinMargins, ManualPageBreak);
|
||||
return 2; // break on this item within a step
|
||||
}
|
||||
return 0; // this is not an item with a break
|
||||
}
|
||||
float mySize = YSize * MyPageHelper.YMultiplier;
|
||||
bool ManualPageBreak = false;
|
||||
vlnParagraph firstChild = ChildrenBelow.Count > 0 ? ChildrenBelow[0] : null;
|
||||
float ySizeIncludingFirst = firstChild == null ? YSize : firstChild.YSize + (firstChild.YTopMost - YTopMost);
|
||||
bool KeepStepsOnPage = MyItemInfo.ActiveFormat.MyStepSectionLayoutData.KeepStepsOnPage;
|
||||
if (MyItemInfo.IsStepSection)
|
||||
{
|
||||
if (yLocation < yTopMargin) // continuous section
|
||||
@@ -71,7 +75,6 @@ namespace Volian.Print.Library
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
vlnParagraph firstChild = ChildrenBelow[0];
|
||||
|
||||
// This is a continuous section. There may be cases where the user put a manual page
|
||||
// break on the first step (child) in the section. if so, break on the section. The
|
||||
@@ -83,18 +86,25 @@ namespace Volian.Print.Library
|
||||
if (ManualPageBreak)
|
||||
{
|
||||
SectionPageBreak = true;
|
||||
ShowPageBreak(2, "Manual Page Break", "Yes", YSize, yPageSize, yWithinMargins);
|
||||
ShowPageBreak(2, "Section Page Break", "Yes", YSize, yPageSize, yWithinMargins, ManualPageBreak);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// can the title and the first step fit?
|
||||
// add the first child's size + (the section title's size)
|
||||
float ySizeIncludingFirst = firstChild.YSize + (firstChild.YTop - YTop);
|
||||
//if (ySizeIncludingFirst > (yLocation - yBottomMargin - SixLinesPerInch)) return 1;
|
||||
//if (ySizeIncludingFirst > (yLocation - yBottomMargin) && ySizeIncludingFirst < yPageSize)
|
||||
if (ySizeIncludingFirst > (yLocation - yBottomMargin))
|
||||
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];
|
||||
float ySizeIncludingFirstStep = firstStepChild.YSize + (firstStepChild.YTopMost - YTopMost);
|
||||
bool isFirstSection = MyItemInfo.MyPrevious == null;
|
||||
bool nearTheTop = yWithinMargins > (yPageSize - 5 * SixLinesPerInch);
|
||||
bool firstSubstepExceedsSpaceAvailable = ySizeIncludingFirstStep > yWithinMargins;
|
||||
if (KeepStepsOnPage && firstSubstepExceedsSpaceAvailable && !isFirstSection)
|
||||
KeepStepsOnPage = false;
|
||||
if (!KeepStepsOnPage && ySizeIncludingFirst > (yLocation - yBottomMargin))
|
||||
{
|
||||
ShowPageBreak(4, "Page Break Before Continuous Step Section", "Yes", YSize, yPageSize, yWithinMargins);
|
||||
ShowPageBreak(4, "Page Break Before Continuous Step Section", "Yes", YSize, yPageSize, yWithinMargins, ManualPageBreak);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -117,33 +127,40 @@ namespace Volian.Print.Library
|
||||
float ySize7LPI = YSize; // +SixLinesPerInch;
|
||||
if (_Match16BitPagination) ySize7LPI += SixLinesPerInch;
|
||||
string firstStep = "No";
|
||||
|
||||
if (MyItemInfo.IsHigh && MyItemInfo.MyPrevious == null)
|
||||
firstStep = "Yes";
|
||||
if (!ManualPageBreak && mySize + yEndMsg <= yWithinMargins) // Don't Paginate if there is enough room, will fit on page
|
||||
//if (!ManualPageBreak && mySize + yEndMsg <= yWithinMargins) // Don't Paginate if there is enough room, will fit on page
|
||||
// Pagination Fix - Break1LineShort1
|
||||
float yExtra = (yWithinMargins == yPageSize ? 0 : SixLinesPerInch - MyItemInfo.MyDocStyle.Layout.FooterLength) ?? 0;
|
||||
float yExtra2 = (SixLinesPerInch - MyItemInfo.MyDocStyle.Layout.FooterLength) ?? 0;
|
||||
if (KeepStepsOnPage && ySizeIncludingFirst > yWithinMargins)
|
||||
KeepStepsOnPage = false;
|
||||
if (!ManualPageBreak && mySize + yEndMsg <= yWithinMargins + yExtra) // Don't Paginate if there is enough room, will fit on page
|
||||
//if (!ManualPageBreak && mySize + yEndMsg <= yWithinMargins + SixLinesPerInch) // Don't Paginate if there is enough room, will fit on page
|
||||
{
|
||||
//Console.WriteLine("'PageBreak',1,'No','HLS will fit on page',{0},{1},{2}, {3}, {4},'{5}'", MyItemInfo.ItemID, YSize, yPageSize, yWithinMargins, (int)(100 * yWithinMargins / yPageSize), MyItemInfo.ShortPath);
|
||||
ShowPageBreak(-1, "HLS will fit on page", firstStep, YSize, yPageSize, yWithinMargins);
|
||||
ShowPageBreak(-1, "HLS will fit on page", firstStep, YSize, yPageSize, yWithinMargins,ManualPageBreak);
|
||||
return 0;
|
||||
}
|
||||
// !MyItemInfo.IsHigh - if (MyItemInfo.IsRNOPart && MyParent.XOffset < XOffset) return 0; // Don't paginate on an RNO to the right
|
||||
|
||||
// YSize includes a blank line after the step which we don't want to include in the page break test, thus the
|
||||
// YSize - SixLinesPerInch:
|
||||
if (YSize - SixLinesPerInch + yEndMsg <= yPageSize) // if the entire step can fit on one page, do a page break
|
||||
if (!KeepStepsOnPage && YSize - SixLinesPerInch + yEndMsg <= yPageSize) // if the entire step can fit on one page, do a page break
|
||||
{
|
||||
// Don't want extra line before step
|
||||
//Console.WriteLine("'PageBreak',2,'Yes','HLS will fit on 1 Page',{0},{1},{2}, {3}, {4},'{5}'", MyItemInfo.ItemID, YSize, yPageSize, yWithinMargins, (int)(100 * yWithinMargins / yPageSize), MyItemInfo.ShortPath);
|
||||
ShowPageBreak(5, "HLS will fit on 1 Page at 6 LPI", "Yes", YSize, yPageSize, yWithinMargins);
|
||||
ShowPageBreak(5, "HLS will fit on 1 Page at 6 LPI", "Yes", YSize, yPageSize, yWithinMargins, ManualPageBreak);
|
||||
return 1;
|
||||
}
|
||||
// TODO - yEndMsg - compressed size?
|
||||
|
||||
// ySize7LPI includes a blank line after the step which we don't want to include in the page break test.
|
||||
else if (MyItemInfo.ActiveFormat.MyStepSectionLayoutData.CompressSteps && (ySize7LPI - SixLinesPerInch) < (yPageSize * SixLinesPerInch / _SevenLinesPerInch))
|
||||
else if (!KeepStepsOnPage && MyItemInfo.ActiveFormat.MyStepSectionLayoutData.CompressSteps && (ySize7LPI - SixLinesPerInch) < (yPageSize * SixLinesPerInch / _SevenLinesPerInch))
|
||||
{
|
||||
//Console.WriteLine("'PageBreak',3,'Yes','HLS will fit on 1 Page at 7 LPI',{0},{1},{2}, {3}, {4},'{5}'", MyItemInfo.ItemID, YSize, yPageSize, yWithinMargins, (int)(100 * yWithinMargins / yPageSize), MyItemInfo.ShortPath);
|
||||
ShowPageBreak(7, "HLS will fit on 1 Page at 7 LPI", "Yes", YSize, yPageSize, yWithinMargins);
|
||||
ShowPageBreak(7, "HLS will fit on 1 Page at 7 LPI", "Yes", YSize, yPageSize, yWithinMargins, ManualPageBreak);
|
||||
//Console.WriteLine("'7LPI',{0},{1}", MyItemInfo.DBSequence, YSize);
|
||||
return 3; // High Level Step can fit at SevenLinesPerInch
|
||||
}
|
||||
@@ -154,22 +171,34 @@ namespace Volian.Print.Library
|
||||
if (_Match16BitPagination) myFirstPieceSize += 2 * SixLinesPerInch;
|
||||
// TODO: Put this line back to case 0, i.e. previous line. This fixes a 16-bit vs 32-bit pagination diff in EO30 Step 20.
|
||||
//float myFirstPieceSize = GetFirstPieceSize() + 2 * SixLinesPerInch; //Case 10 - this is to match 16bit
|
||||
if (!ManualPageBreak && MyItemInfo.ActiveFormat.MyStepSectionLayoutData.SpecialPageBreakFlag && yWithinMargins > yPageSize / 2 &&
|
||||
myFirstPieceSize < yWithinMargins)
|
||||
if (!ManualPageBreak && ((MyItemInfo.ActiveFormat.MyStepSectionLayoutData.SpecialPageBreakFlag && yWithinMargins > yPageSize / 2 &&
|
||||
myFirstPieceSize < yWithinMargins) || KeepStepsOnPage))
|
||||
{
|
||||
//Console.WriteLine("'PageBreak',4,'No','HLS will have to split anyway',{0},{1},{2}, {3}, {4},'{5}'", MyItemInfo.ItemID, YSize, yPageSize, yWithinMargins, (int)(100 * yWithinMargins / yPageSize), MyItemInfo.ShortPath);
|
||||
ShowPageBreak(-4, "HLS will have to split anyway", firstStep, YSize, yPageSize, yWithinMargins);
|
||||
if(firstStep == "Yes")
|
||||
ShowPageBreak(8, "First HLS has to split on current page", firstStep, YSize, yPageSize, yWithinMargins, ManualPageBreak);
|
||||
else
|
||||
ShowPageBreak(6, "HLS will have to split on current page", "Special", YSize, yPageSize, yWithinMargins, ManualPageBreak);
|
||||
//BuildPageBreakList(yWithinMargins+SixLinesPerInch,yPageSize-2*SixLinesPerInch); // Determine items where page break(s) occur
|
||||
BuildPageBreakList(yWithinMargins + SixLinesPerInch, yPageSize); // Case 5 - Determine items where page break(s) occur
|
||||
//BuildPageBreakList(yWithinMargins + SixLinesPerInch, yPageSize); // Case 5 - Determine items where page break(s) occur
|
||||
// Pagination Fix Break1LineShort3a
|
||||
BuildPageBreakList(yWithinMargins + SixLinesPerInch, yPageSize + yExtra2,KeepStepsOnPage); // Case 5 - Determine items where page break(s) occur
|
||||
return 0; // Stay on this page
|
||||
}
|
||||
|
||||
// Less than half a page left, start printing on a new page.
|
||||
//Console.WriteLine("'PageBreak',5,'Yes','HLS will have to split',{0},{1},{2}, {3}, {4},'{5}'", MyItemInfo.ItemID, YSize, yPageSize, yWithinMargins, (int)(100 * yWithinMargins / yPageSize), MyItemInfo.ShortPath);
|
||||
ShowPageBreak(3, "HLS will have to split", "Yes", YSize, yPageSize, yWithinMargins);
|
||||
if (firstStep == "Yes")
|
||||
ShowPageBreak(9, "First HLS will have to split on new page", "Yes", YSize, yPageSize, yWithinMargins, ManualPageBreak);
|
||||
else
|
||||
ShowPageBreak(3, "HLS will have to split on new page", "Yes", YSize, yPageSize, yWithinMargins, ManualPageBreak);
|
||||
// Determine items where page break(s) occur
|
||||
//BuildPageBreakList(yPageSize, yPageSize - 2 * SixLinesPerInch); // Case Base
|
||||
BuildPageBreakList(yPageSize, yPageSize); // Case 1 :Works for ES05 Step 15 SubStep 7
|
||||
//BuildPageBreakList(yPageSize, yPageSize - 2 * SixLinesPerInch); // Case Base
|
||||
//BuildPageBreakList(yPageSize, yPageSize); // Case 1 :Works for ES05 Step 15 SubStep 7
|
||||
// Pagination Fix Break1LineShort2
|
||||
//BuildPageBreakList(yPageSize + yExtra, yPageSize); // Case 1 :Works for ES05 Step 15 SubStep 7
|
||||
// Pagination Fix Break1LineShort4
|
||||
BuildPageBreakList(yPageSize + yExtra, yPageSize + yExtra2,KeepStepsOnPage); // Case 1 :Works for ES05 Step 15 SubStep 7
|
||||
return 1; // Paginate on High Level Steps
|
||||
}
|
||||
//if (yWithinMargins > yPageSize / 2)
|
||||
@@ -193,21 +222,24 @@ namespace Volian.Print.Library
|
||||
DebugPagination.WriteLine("-1,'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)
|
||||
private void ShowPageBreak(int instance, string message, string breakOrNot, float YSize, float yPageSize, float yWithinMargins, bool manualPageBreak)
|
||||
{
|
||||
if (breakOrNot == "Yes")
|
||||
if (breakOrNot != "No")
|
||||
{
|
||||
// DebugPagination.WriteLine("{0}", MyItemInfo.DBSequence); //,instance);
|
||||
DebugPagination.WriteLine("{0},'{1}',{2},'{3}','{4}',{5},{6},{7},{8},{9}", MyPageHelper.MyPdfContentByte.PdfWriter.CurrentPageNumber, MyItemInfo.ShortPath, instance, message, breakOrNot,
|
||||
DebugPagination.WriteLine("{0},'{1}',{2},'{3}','{4}',{5},{6},{7},{8},{9}",
|
||||
MyPageHelper.MyPdfContentByte.PdfWriter.CurrentPageNumber - (breakOrNot == "Yes" ? 0 : 1),
|
||||
MyItemInfo.ShortPath, instance,
|
||||
(manualPageBreak ? "Manual " : "") + message, breakOrNot,
|
||||
MyItemInfo.ItemID, YSize, yPageSize, yWithinMargins, (int)(100 * yWithinMargins / yPageSize));
|
||||
}
|
||||
// Console.WriteLine("{0},{1}", MyItemInfo.DBSequence, IsFirstSubStep(MyItemInfo)); //,instance);
|
||||
}
|
||||
private void BuildPageBreakList(float ySpaceOnCurPage, float yPageSize)
|
||||
private void BuildPageBreakList(float ySpaceOnCurPage, float yPageSize, bool KeepStepsOnPage)
|
||||
{
|
||||
ParagraphLocations myLocations = new ParagraphLocations();
|
||||
BuildLocationList(YTopMost, myLocations);
|
||||
StepLevelList myList = myLocations.BuildStepLevelList();
|
||||
StepLevelList myList = myLocations.BuildStepLevelList(KeepStepsOnPage);
|
||||
// Find Break Locations in the list based upon StepLevel and yLocation
|
||||
float yTop = 0;
|
||||
float yLowerLimit = (yPageSize - 2 * SixLinesPerInch) / 2;
|
||||
@@ -224,7 +256,9 @@ namespace Volian.Print.Library
|
||||
// Make sure that the FirstPiece (Caution Note HLS and First Substeps) fit
|
||||
float myFirstPieceSize = GetFirstPieceSize(); //Case 0
|
||||
if (myFirstPieceSize < ySpaceOnCurPage) yLowerLimit = Math.Max(myFirstPieceSize + yStart, yLowerLimit);
|
||||
while ((YSize - yTop) >= ySpaceOnCurPage)
|
||||
//while ((YSize - yTop) >= ySpaceOnCurPage)
|
||||
// Pagination Fix Break1LineShort3b
|
||||
while ((YSize - yTop) > ySpaceOnCurPage)
|
||||
{
|
||||
vlnParagraph paraBreak = FindPageBreak(yStart, ySpaceOnCurPage, yLowerLimit, myList);
|
||||
if (paraBreak == null) break;
|
||||
|
Reference in New Issue
Block a user