From 59e8e7c6dcf6688ec115130bf8c6e443f4bbad1a Mon Sep 17 00:00:00 2001 From: John Date: Tue, 15 Apr 2014 19:57:23 +0000 Subject: [PATCH] Turn off the landscape mode setting in words section after we finish printing them. --- PROMS/Volian.Print.Library/PromsPrinter.cs | 189 ++++++++++++++++++++- 1 file changed, 183 insertions(+), 6 deletions(-) diff --git a/PROMS/Volian.Print.Library/PromsPrinter.cs b/PROMS/Volian.Print.Library/PromsPrinter.cs index b94944cd..60723428 100644 --- a/PROMS/Volian.Print.Library/PromsPrinter.cs +++ b/PROMS/Volian.Print.Library/PromsPrinter.cs @@ -505,6 +505,11 @@ namespace Volian.Print.Library if (mySection.IsAutoTOCSection) GenerateTOC(mySection, myProcedure, cb, _TextLayer); + // is this the right place for PlaceKeeper? + // I think we need to check if the actual PlaceKeeper section has the PlaceKeeper flag set (for auto generation) + // users can turn this off and edit the section manaully in 16-bit. + //else if (mySection.IsPlacekeeperSection) + // GeneratePlaceKeeper(mySection, myProcedure, cb, _TextLayer); else { if (mySection.IsStepSection) @@ -631,9 +636,9 @@ 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); - if(DebugPagination.IsOpen) DebugPagination.WriteLine("{0:D6},'{1}',{2}", - _MyHelper.MyPdfContentByte.PdfWriter.CurrentPageNumber, mySection.ShortPath,pageNumber); + AddImportedPageToLayer(cb.PdfWriter.DirectContent, _MSWordLayer, fgPage, (float)(mySection.MyDocStyle.Layout.MSWordXAdj ?? 0), (float)(mySection.MyDocStyle.Layout.MSWordYAdj ?? 0) + yoff); + if (DebugPagination.IsOpen) DebugPagination.WriteLine("{0:D6},'{1}',{2}", + _MyHelper.MyPdfContentByte.PdfWriter.CurrentPageNumber, mySection.ShortPath, pageNumber); } if (ii == sectPageCount - 1) @@ -661,13 +666,13 @@ namespace Volian.Print.Library _MyHelper.IsLandscape = false; cb.PdfDocument.NewPage(); // Word Document //_MyLog.InfoFormat("NewPage 3 {0}", cb.PdfWriter.CurrentPageNumber); - + // if this document style has another style that is for pages other than first, we need to // reset the document style off of this section AND reset docstyle values used. _MyHelper.DidFirstPageDocStyle = true; //DebugPagination.WriteLine("CreateWordDocPdf"); if ((mySection.MyDocStyle.StructureStyle.Where & E_DocStyleUse.UseOnFirstPage) > 0) - _MyHelper.MySection = mySection; // this resets the docstyle/pagestyle if pagehelper + _MyHelper.MySection = mySection; // this resets the docstyle/pagestyle in pagehelper OnStatusChanged("After NewPage", PromsPrinterStatusType.NewPage); } } @@ -676,6 +681,10 @@ namespace Volian.Print.Library cb.PdfDocument.NewPage(); // can we put out 'error on page'? _MyLog.InfoFormat("NewPage error on page {0}", cb.PdfWriter.CurrentPageNumber); } + finally + { + _MyHelper.IsLandscape = false; // reset landscape mode to false + } } private void GenerateTOC(SectionInfo tocSection, ProcedureInfo myProcedure, PdfContentByte cb, PdfLayer textLayer) { @@ -693,6 +702,22 @@ namespace Volian.Print.Library //_MyLog.InfoFormat("NewPage 4 {0}", cb.PdfWriter.CurrentPageNumber); _NoBreakYOffset = 0; } + //private void GeneratePlaceKeeper(SectionInfo pkSection, ProcedureInfo myProcedure, PdfContentByte cb, PdfLayer textLayer) + //{ + // iTextSharp.text.pdf.PdfWriter writer = cb.PdfWriter; + // float _PointsPerPage = 792; + // float yTopMargin = _PointsPerPage - (float)pkSection.MyDocStyle.Layout.TopMargin; + // float yBottomMargin = Math.Max(0, yTopMargin - (float)pkSection.MyDocStyle.Layout.PageLength); // - 2 * vlnPrintObject.SixLinesPerInch); + // if (textLayer != null) cb.BeginLayer(textLayer); + // PlacekeeperData pkdata = pkSection.ActiveFormat.PlantFormat.FormatData.SectData.AccSectionData.PlacekeeperData; + // ItemInfo procItem = ItemInfo.Get(myProcedure.ItemID); + // lastyLocation = 0; + // AddSectionToPK(pkSection, procItem, pkdata, cb, yTopMargin, 0); + // if (textLayer != null) cb.EndLayer(); + // cb.PdfDocument.NewPage(); + // //_MyLog.InfoFormat("NewPage 4 {0}", cb.PdfWriter.CurrentPageNumber); + // _NoBreakYOffset = 0; + //} float lastyLocation = 0; private string GetRtfToC(string txt, TableOfContentsData tOfCData) { @@ -848,7 +873,159 @@ namespace Volian.Print.Library PdfTemplate tmp = _MyHelper.MyTOCPageCounts.AddToTemplateList(key, _MyHelper.MyPdfWriter, "{TOCPAGE}", tOfC.Font.WindowsFont, Element.ALIGN_LEFT, PrintOverride.TextColor); _MyHelper.MyPdfContentByte.AddTemplate(tmp, leftMargin + secPagePos, (yPageStartAdj - yLocation) - height / 2); } - + + //private string GetRtfPlacekeeper(string txt, PlacekeeperData pkCData) + //{ + // StringBuilder _RtfSB = new StringBuilder(); + // Volian.Controls.Library.DisplayText pktxt = new Volian.Controls.Library.DisplayText(txt, pkCData.Font, false); + // System.Drawing.Font myFont = pktxt.TextFont.WindowsFont; + // _RtfSB.Append(vlnPrintObject.AddFontTable(myFont)); + // _RtfSB.Append(pktxt.StartText); + // _RtfSB.Append("}"); + // return _RtfSB.ToString(); + //} + //private float AddSectionToPK(SectionInfo pkSection, ItemInfo ii, PlacekeeperData pkData, PdfContentByte cb, float yPageStart, float yLocation) + //{ + // SectionConfig pkSC = pkSection.MyConfig as SectionConfig; + // if (pkSC.Section_Placekeeper != "Y") return yLocation; // automatic generation of Placekeeper turned off + // float xAdjNumber = -6 + 1.2F; + // float xAdjTitle = .8F + 1.2F; + // float xAdjTitleIndent = -6 + 2.4F; + // float yadj = 0.5F; // tweak to get 16 & 32 bit output to match. + + // float yPageStartAdj = yPageStart - yadj; + // float leftMargin = (float)pkSection.MyDocStyle.Layout.LeftMargin; + // //float secNumPos = (float)tOfC.TofCSecNumPos + xAdjNumber; + // //float secTitlePos = (float)tOfC.TofCSecTitlePos + xAdjTitle; + // //float secPagePos = (float)tOfC.TofCPageNumPos + xAdjNumber; + // //float height = tOfC.Font.WindowsFont.Size * 1.5F; + // if (ii.Sections != null) + // { + // foreach (SectionInfo mySection in ii.Sections) + // { + // SectionConfig sc = mySection.MyConfig as SectionConfig; + // if (mySection.ItemID != pkSection.ItemID && sc != null && sc.Section_Placekeeper == "Y") + // { + // // Look at each step in the section and build a Placekeeper for those steps that are marked + + // // need to do the section number, section title & page number. Page number + // // has to be put on at end after number of page is known, so use a Template. + // //string tmptxt = mySection.MyContent.Number == null || mySection.MyContent.Number == "" ? " " : mySection.MyContent.Number; + // //string rtfText = GetRtfPlacekeeper(tmptxt, pkData);//GetRtfToC(tmptxt, tOfC); + // //Paragraph myparagraphn = vlnPrintObject.RtfToParagraph(rtfText); + // float width = 0; + // //foreach (Chunk chkt in myparagraphn.Chunks) + // // width += chkt.GetWidthPoint(); + // float numwidth = width; + // float yBottomMargin = yPageStart - (float)pkSection.MyDocStyle.Layout.PageLength + (2 * vlnPrintObject.SixLinesPerInch); + // Rtf2Pdf.Offset = new PointF(0, 2.5F); + + // //// for indenting of subsections, count up tree. Only start indenting + // //// at third level, i.e. not indent on 1.0 and 1.1, but indent on 1.1.1: + // //int level = 0; + // //ItemInfo iilvl = mySection as ItemInfo; + // //while (!iilvl.IsProcedure) + // //{ + // // level++; + // // iilvl = iilvl.MyParent; + // //} + // //// check what level the plant wants the auto ToC indented: + // //int tofCNumLevels = pkSection.ActiveFormat.PlantFormat.FormatData.SectData.AccSectionData.TableOfContentsData.TofCNumLevels ?? 0; + // //if (tofCNumLevels > 0 && level > tofCNumLevels) return yLocation; + + // //level = level <= 2 ? 0 : level - 2; // no indenting until third level + // //float indentOffset = (level * (secTitlePos - secNumPos)); + + // // if the starting column of text would be in 'middle of' the number, just put it + // // a few spaces after the number. The '18' below represents 3 chars. + // //float adjSecTitlePos = secTitlePos + indentOffset + (level * 6); + // //if (secNumPos + numwidth + indentOffset > secTitlePos + indentOffset) + // // adjSecTitlePos = secNumPos + numwidth + 18 - xAdjTitleIndent + indentOffset; + // //rtfText = GetRtfToC(mySection.MyContent.Text, tOfC); + // //Paragraph myparagrapht = vlnPrintObject.RtfToParagraph(rtfText); + // //width = secPagePos - adjSecTitlePos - 6; + // //float retval = Rtf2Pdf.TextAt(cb, myparagrapht, leftMargin + adjSecTitlePos, yPageStart - yLocation, width, height, "", yBottomMargin); + // //float ttlRetval = retval; + // //if (retval == 0) + // //{ + // // cb.PdfDocument.NewPage(); + // // //_MyLog.InfoFormat("NewPage 5 {0}", cb.PdfWriter.CurrentPageNumber); + // // yLocation = lastyLocation = 0; + // // retval = Rtf2Pdf.TextAt(cb, myparagrapht, leftMargin + adjSecTitlePos, yPageStart - yLocation, width, height, "", yBottomMargin); + // // ttlRetval = retval; + // //} + // //retval = Rtf2Pdf.TextAt(cb, myparagraphn, leftMargin + secNumPos + indentOffset, yPageStart - yLocation, width * 1.3F, height, "", yBottomMargin); + // //if (retval == 0) // do a newpage, it couldn't fit on current page. + // //{ + // // cb.PdfDocument.NewPage(); + // // //_MyLog.InfoFormat("NewPage 5 {0}", cb.PdfWriter.CurrentPageNumber); + // // yLocation = lastyLocation = 0; + // // retval = Rtf2Pdf.TextAt(cb, myparagraphn, leftMargin + secNumPos + indentOffset, yPageStart - yLocation, width * 1.3F, height, "", yBottomMargin); + // //} + // //retval = Math.Min(retval, ttlRetval); + // //float lSpace = (tOfC.TofCLineSpacing == 2) ? 2 * vlnPrintObject.SixLinesPerInch : vlnPrintObject.SixLinesPerInch; + // //if (lastyLocation != 0 && ((lastyLocation - retval) > lSpace)) + // // yLocation += (lastyLocation - retval - lSpace); + // //lastyLocation = retval; + + // //// check that the page number should be in the TOC (some BGE sections do not have the page number) + // //if (!((mySection.MyDocStyle.StructureStyle.Style & E_DocStructStyle.DontNumberInTOC) == E_DocStructStyle.DontNumberInTOC)) + // //{ + // // // add a template for the page number: + // // // if the space character is not null & is not a space, the we've got to put out + // // // these between the section title & the page number + // // if (tOfC.TofCSpaceChar != null && tOfC.TofCSpaceChar != "" && tOfC.TofCSpaceChar != " ") + // // { + // // width = 0; + // // foreach (Chunk chkt in myparagrapht.Chunks) + // // width += chkt.GetWidthPoint(); + // // float startSpace = leftMargin + adjSecTitlePos + width; + // // float endSpace = leftMargin + secPagePos; + // // float numSpace = endSpace - startSpace; + // // string spaceStr = ""; + // // rtfText = GetRtfToC(tOfC.TofCSpaceChar, tOfC); + // // Paragraph tmpmyparagraph = vlnPrintObject.RtfToParagraph(rtfText); + // // float spacchrwid = 0; + // // foreach (Chunk chkt in tmpmyparagraph.Chunks) + // // spacchrwid += chkt.GetWidthPoint(); + // // while (numSpace > 0) + // // { + // // spaceStr = spaceStr + tOfC.TofCSpaceChar; + // // numSpace -= spacchrwid; + // // } + // // rtfText = GetRtfToC(spaceStr, tOfC); + // // Paragraph myparagraphs = vlnPrintObject.RtfToParagraph(rtfText); + // // retval = Rtf2Pdf.TextAt(cb, myparagraphs, startSpace, yPageStart - yLocation, endSpace - startSpace, height, "", yBottomMargin); + // // } + // // // if in the pre-table of content list, just put the page number out as text. + // // // otherwise, add a template _MyHelper.MyTOCPageCounts + // // string key = "TOC" + mySection.ItemID.ToString(); + // // if (mySection.IsAutoTOCSection || _MyHelper.MyTOCPageNums.ContainsKey(key)) + // // { + // // string pnum = _MyHelper.MyTOCPageNums.ContainsKey(key) ? _MyHelper.MyTOCPageNums[key].ToString() : (_MyHelper.CurrentTOCPageNumber + 1).ToString(); + // // rtfText = GetRtfToC(pnum, tOfC); + // // Paragraph myparagraphp = vlnPrintObject.RtfToParagraph(rtfText); + // // width = pnum.Length * 6; + // // retval = Rtf2Pdf.TextAt(cb, myparagraphp, leftMargin + secPagePos, yPageStart - yLocation, width, height, "", yBottomMargin); + // // } + // // else + // // AddTemplateTOCPageCounts(tOfC, yLocation, yPageStartAdj, leftMargin, secPagePos, height, mySection); + // //} + + // yLocation += vlnPrintObject.SixLinesPerInch; + // } + // //yLocation = AddSectionToTOC(tocSection, mySection, tOfC, cb, yPageStart, yLocation); + // } + // } + // return yLocation; + //} + + //private void AddTemplatePKPageCounts(TableOfContentsData tOfC, float yLocation, float yPageStartAdj, float leftMargin, float secPagePos, float height, SectionInfo mySection) + //{ + // string key = "PK" + mySection.ItemID.ToString(); + // PdfTemplate tmp = _MyHelper.MyTOCPageCounts.AddToTemplateList(key, _MyHelper.MyPdfWriter, "{TOCPAGE}", tOfC.Font.WindowsFont, Element.ALIGN_LEFT, PrintOverride.TextColor); + // _MyHelper.MyPdfContentByte.AddTemplate(tmp, leftMargin + secPagePos, (yPageStartAdj - yLocation) - height / 2); + //} private static void PrintTextMessage(PdfContentByte cb, string message, PdfLayer textLayer) { if (textLayer != null) cb.BeginLayer(textLayer);