This commit is contained in:
Kathy Ruffing 2011-06-16 10:37:25 +00:00
parent a062a026b4
commit 82900d18f0

View File

@ -84,10 +84,6 @@ namespace Volian.Print.Library
}
public class PromsPrinter
{
// the following boolean is to help testing of various formats. If the plant has an alternating foldout
// and you want a blank page, until foldouts are developed, set to true.
// AEP DU1 - do a blank page for foldout
private bool _DoBlankForFoldout = false;
public event PromsPrinterStatusEvent StatusChanged;
private void OnStatusChanged(object sender, PromsPrintStatusArgs args)
{
@ -255,8 +251,20 @@ namespace Volian.Print.Library
}
int _StepPageNumber = 0;
private VlnSvgPageHelper _MyHelper = null;
private static PdfReader _MyFoldoutReader = null;
private static SectionInfo _MyFoldoutSection = null;
private string Print(ProcedureInfo myProcedure, string pdfFolder)
{
_MyFoldoutReader = null;
foreach (SectionInfo mySection in myProcedure.Sections)
{
if (mySection.MyContent.Number.ToUpper() == "FOLDOUT")
{
_MyFoldoutSection = mySection;
string foldoutPdf = PrintProcedureOrFoldout(myProcedure, true, Volian.Base.Library.VlnSettings.TemporaryFolder + @"\Foldout.pdf");
_MyFoldoutReader = foldoutPdf != null ? new PdfReader(foldoutPdf) : null;
}
}
OnStatusChanged("Print " + myProcedure.DisplayNumber, PromsPrinterStatusType.Start);
string outputFileName = pdfFolder + "\\" + PDFFile;
@ -265,24 +273,31 @@ namespace Volian.Print.Library
if (MessageBox.Show(outputFileName + " exists. Overwrite file?", "File Exists", MessageBoxButtons.YesNo) == DialogResult.No)
return null;
}
return PrintProcedureOrFoldout(myProcedure, false, outputFileName);
}
private string PrintProcedureOrFoldout(ProcedureInfo myProcedure, bool doingFoldout, string outputFileName)
{
// Create an MSWord Pdf
// Setup a pdf Document for printing
OnStatusChanged("Before OpenDoc", PromsPrinterStatusType.Before);
PdfContentByte cb = OpenDoc(outputFileName);
if (cb == null) return null;
OnStatusChanged("Before NewPage", PromsPrinterStatusType.Before);
cb.PdfDocument.NewPage();
cb.PdfDocument.NewPage(); // Start of print
OnStatusChanged("After NewPage", PromsPrinterStatusType.NewPage);
OnStatusChanged(myProcedure.DisplayNumber, PromsPrinterStatusType.ProgressSetup,myProcedure.Sections.Count);
OnStatusChanged(myProcedure.DisplayNumber, PromsPrinterStatusType.ProgressSetup, myProcedure.Sections.Count);
int progress = 0;
foreach (SectionInfo mySection in myProcedure.Sections)
{
OnStatusChanged((mySection.DisplayNumber??"") == "" ? mySection.DisplayText : mySection.DisplayNumber, PromsPrinterStatusType.Progress, progress++);
if ((mySection.MyContent.Number.ToUpper() == "FOLDOUT") != doingFoldout) continue;
OnStatusChanged((mySection.DisplayNumber ?? "") == "" ? mySection.DisplayText : mySection.DisplayNumber, PromsPrinterStatusType.Progress, progress++);
// Set up Helper for the particular Section
if (_MyHelper == null)
{
cb.PdfWriter.PageEvent = _MyHelper = new VlnSvgPageHelper(mySection);
_MyHelper.MyPdfWriter = cb.PdfWriter;
_MyHelper.CreatingFoldoutPage = doingFoldout;
_MyHelper.MyPdfContentByte = cb;
if (DebugOutput)
@ -290,13 +305,13 @@ namespace Volian.Print.Library
// 16-bit background
string procedureFileName = BackgroundFolder + "\\" + CreateFileName(myProcedure.DisplayNumber);
FileInfo VEPromsFile = new FileInfo(procedureFileName);
if (VEPromsFile.Exists)
if (VEPromsFile.Exists && !doingFoldout)
{
_MyHelper.BackgroundFile = procedureFileName;
// X argument below: accounts for 16-bit pdf OverrideLeftMargin = -2 characters at the plant format's default Font's
// characters per inch.
// 16bit OverrideLeftMargin, defined as -2 in driver\drvin.rtf, - override took 2 characters out, so we're adding it back in:
_MyHelper.BackgroundOffset = new PointF(2*72F/(float)myProcedure.ActiveFormat.PlantFormat.FormatData.Font.CPI, -9.5F);
_MyHelper.BackgroundOffset = new PointF(2 * 72F / (float)myProcedure.ActiveFormat.PlantFormat.FormatData.Font.CPI, -9.5F);
_MyHelper.BackgroundPageOffset = 0;
}
_MyHelper.WatermarkLayer = _WatermarkLayer;
@ -319,7 +334,11 @@ namespace Volian.Print.Library
PdfReader readerWord = null;
string myPdfFile = null;
if (mySection.IsStepSection)
{
if ((mySection.MyDocStyle.StructureStyle.Style ?? 0 & E_DocStructStyle.UseSectionFoldout) != 0)
DoFoldoutPage(cb, "Beginning of Step Section", _TextLayer, _MyHelper);
CreateStepPdf(mySection, cb);
}
else
{
myPdfFile = BuildMSWordPDF(mySection);
@ -327,33 +346,54 @@ namespace Volian.Print.Library
{
readerWord = myPdfFile != null ? new PdfReader(myPdfFile) : null;
OnStatusChanged("Get Section", PromsPrinterStatusType.GetSection);
int sectPageCount=0;
using(PdfInfo myPdf = PdfInfo.Get(mySection))
sectPageCount = (int)(Math.Ceiling(myPdf.PageCount));
for (int ii = 0; ii < sectPageCount; ii++)
int sectPageCount = 0;
float locEndOfWordDoc = 0;
float pdfSize = 0;
using (PdfInfo myPdf = PdfInfo.Get(mySection))
{
sectPageCount = (int)(Math.Ceiling(myPdf.PageCount));
locEndOfWordDoc = (float)(myPdf.PageCount - (sectPageCount-1)) * 100;
pdfSize = (float)myPdf.PageCount;
}
for (int ii = 0; ii < sectPageCount; ii++)
{
if (((mySection.MyDocStyle.StructureStyle.Style ?? 0) & E_DocStructStyle.UseSectionFoldout) != 0)
DoFoldoutPage(cb, "Word Document", _TextLayer, _MyHelper);
int pageNumber = 1 + ii;
if (readerWord != null)
{
int pageNumber = 1 + ii;
if (readerWord != null)
bool doimport2 = true;
PdfImportedPage fgPage = null;
try
{
bool doimport2 = true;
PdfImportedPage fgPage = null;
try
{
fgPage = cb.PdfWriter.GetImportedPage(readerWord, ii + 1);
}
catch (Exception ex)
{
Console.WriteLine(ex);
doimport2 = false;
}
OnStatusChanged("Read MSWord", PromsPrinterStatusType.ReadMSWord);
if (doimport2) AddImportedPageToLayer(cb.PdfWriter.DirectContent, _MSWordLayer, fgPage, 0, 0);
OnStatusChanged("Merge MSWord", PromsPrinterStatusType.MergeMSWord);
fgPage = cb.PdfWriter.GetImportedPage(readerWord, ii + 1);
}
OnStatusChanged("Before NewPage", PromsPrinterStatusType.Before);
cb.PdfDocument.NewPage();
OnStatusChanged("After NewPage", PromsPrinterStatusType.NewPage);
catch (Exception ex)
{
Console.WriteLine(ex);
doimport2 = false;
}
OnStatusChanged("Read MSWord", PromsPrinterStatusType.ReadMSWord);
if (doimport2) AddImportedPageToLayer(cb.PdfWriter.DirectContent, _MSWordLayer, fgPage, 0, 0);
if (ii == sectPageCount - 1)
{
// if there's and end message, add it to the appropriate location on the last page of
// the word document:
float ylocation = cb.PdfDocument.PageSize.Height - ((float)mySection.MyDocStyle.Layout.TopMargin + locEndOfWordDoc * 72); // 72 - pts per inch.
iTextSharp.text.Font fnt = VolianPdf.GetFont(mySection.MyDocStyle.End.Font.WindowsFont);
fnt.Color=new iTextSharp.text.Color(PrintOverride.OverrideTextColor(System.Drawing.Color.Black));
iTextSharp.text.Paragraph para = new Paragraph(mySection.MyDocStyle.End.Message, fnt);
float wtpm = (float)mySection.MyDocStyle.Layout.PageWidth - (float)mySection.MyDocStyle.Layout.LeftMargin;
float centerpos = (float)mySection.MyDocStyle.Layout.LeftMargin + (wtpm - (mySection.MyDocStyle.End.Message.Length * mySection.MyDocStyle.End.Font.CharsToTwips)) / 2;
Rtf2Pdf.TextAt(cb, para, centerpos, ylocation + 6, 100, 12, "", 50);
}
OnStatusChanged("Merge MSWord", PromsPrinterStatusType.MergeMSWord);
}
OnStatusChanged("Before NewPage", PromsPrinterStatusType.Before);
cb.PdfDocument.NewPage(); // Word Document
OnStatusChanged("After NewPage", PromsPrinterStatusType.NewPage);
}
}
catch (Exception ex)
@ -367,19 +407,19 @@ namespace Volian.Print.Library
_MyHelper.MySvg = null;
while (cb.PdfWriter.CurrentPageNumber <= _MyHelper.BackgroundPageCount)
{
PrintTextMessage(cb, "No Proms Output");
cb.PdfDocument.NewPage();
PrintTextMessage(cb, "No Proms Output", _TextLayer);
cb.PdfDocument.NewPage(); // only have 16bit pages left (for DebugMode)
}
}
OnStatusChanged(myProcedure.DisplayNumber + " PDF Creation Completed", PromsPrinterStatusType.Progress, progress);
CloseDocument(cb, outputFileName);
// Return the fileName;
_MyHelper = null;
return outputFileName;
}
private void PrintTextMessage(PdfContentByte cb, string message)
private static void PrintTextMessage(PdfContentByte cb, string message, PdfLayer textLayer)
{
if (_TextLayer != null) cb.BeginLayer(_TextLayer);
if (textLayer != null) cb.BeginLayer(textLayer);
float fontSize = 30;
ColumnText ct = new ColumnText(cb);
iTextSharp.text.Font font = FontFactory.GetFont("Arial", fontSize, new iTextSharp.text.Color(PrintOverride.TextColor));
@ -393,32 +433,90 @@ namespace Volian.Print.Library
ct.AddElement(ph);
cb.SetColorFill(new iTextSharp.text.Color(PrintOverride.TextColor));
ct.Go();
if (_TextLayer != null) cb.EndLayer();
if (textLayer != null) cb.EndLayer();
}
private float _NoBreakYOffset = 0;
private void CreateStepPdf(SectionInfo section, PdfContentByte cb)
{
iTextSharp.text.pdf.PdfWriter writer = cb.PdfWriter;
ItemInfo myItemInfo = section as ItemInfo;
// 792: 72 * 11 inches - TopRow - Top is high value
float _PointsPerPage = 792;
float yTopMargin = _PointsPerPage - (float)myItemInfo.MyDocStyle.Layout.TopRow;
float yBottomMargin = yTopMargin - (float)myItemInfo.MyDocStyle.Layout.PageLength - 2 * vlnPrintObject.SixLinesPerInch;
float yTopMargin = _PointsPerPage - (float)myItemInfo.MyDocStyle.Layout.TopMargin;
float yBottomMargin = Math.Max(0, yTopMargin - (float)myItemInfo.MyDocStyle.Layout.PageLength - 2 * vlnPrintObject.SixLinesPerInch);
vlnParagraph.Prefix = myItemInfo.Path;
Rtf2Pdf.PdfDebug = true;
Rtf2Pdf.Offset = new PointF(0, 2.5F);
_MyHelper.ChangeBarDefinition = MyChangeBarDefinition;
vlnParagraph myParagraph = new vlnParagraph(null, cb, myItemInfo, (float)myItemInfo.MyDocStyle.Layout.LeftMargin, 0, 0, myItemInfo.ColumnMode, myItemInfo.ActiveFormat);
vlnParagraph myParagraph = new vlnParagraph(null, cb, myItemInfo, (float)myItemInfo.MyDocStyle.Layout.LeftMargin, _NoBreakYOffset, 0, myItemInfo.ColumnMode, myItemInfo.ActiveFormat);
if (myItemInfo.HasChildren)
myParagraph.ToPdf(cb, yTopMargin, yTopMargin, yBottomMargin);
else
PrintTextMessage(cb, "No Section Content");
if (_DoBlankForFoldout && section.IsDefaultSection)
PrintTextMessage(cb, "No Section Content", _TextLayer);
ItemInfo nxtSection = null;
SectionConfig.SectionPagination sp = SectionConfig.SectionPagination.Separate; // always the default
if ( section.NextItemCount > 0)
{
cb.PdfDocument.NewPage();
cb.Circle(400, 100, 50);
SectionInfo tmpii = SectionInfo.Get(section.NextItem.ItemID);
if (tmpii == null) Console.WriteLine("here");
nxtSection = tmpii;
if (!section.IsAccPages)
{
SectionConfig sc = tmpii.SectionConfig;
try
{
if (sc != null) sp = sc.Section_Pagination;
}
catch (Exception ex)
{
sp = SectionConfig.SectionPagination.Separate;
}
}
}
//if (nxtSection != null && sp == SectionConfig.SectionPagination.Separate)
if (sp == SectionConfig.SectionPagination.Separate)
{
cb.PdfDocument.NewPage(); // end of step section
_NoBreakYOffset = 0;
}
else
{
_NoBreakYOffset = myParagraph.YBottomMost;
}
cb.PdfDocument.NewPage();
OnStatusChanged("StepSection converted to PDF " + section.ShortPath, PromsPrinterStatusType.BuildStep);
}
public static void DoFoldoutPage(PdfContentByte cb, string str, PdfLayer textLayer)
{
cb.Circle(400, 100, 50);
PrintTextMessage(cb, "Foldout for: " + str, textLayer);
cb.PdfDocument.NewPage(); // Temporary for foldout/16bit-32bit page alignment
}
public static void DoFoldoutPage(PdfContentByte cb, string str, PdfLayer textLayer, VlnSvgPageHelper myPageHelper)
{
if (_MyFoldoutSection == null) return;
SectionInfo saveSect = myPageHelper.MySection;
myPageHelper.MySection = _MyFoldoutSection;
myPageHelper.OnFoldoutPage = true;
if (_MyFoldoutReader != null)
{
bool doimport2 = true;
PdfImportedPage fgPage = null;
try
{
fgPage = cb.PdfWriter.GetImportedPage(_MyFoldoutReader,1);
}
catch (Exception ex)
{
Console.WriteLine(ex);
doimport2 = false;
}
if (doimport2) AddImportedPageToLayer(cb.PdfWriter.DirectContent, textLayer, fgPage, 0, 0);
}
//PrintTextMessage(cb, "Foldout for: " + str, textLayer);
cb.PdfDocument.NewPage(); // Temporary for foldout/16bit-32bit page alignment
myPageHelper.MySection = saveSect;
myPageHelper.OnFoldoutPage = false;
}
}
}