Initial import
git-svn-id: https://lsleditor.svn.sourceforge.net/svnroot/lsleditor@1 3f4676ac-adda-40fd-8265-58d1435b1672
This commit is contained in:
commit
7d308772cf
453 changed files with 57506 additions and 0 deletions
703
Helpers/PrinterHelper.cs
Normal file
703
Helpers/PrinterHelper.cs
Normal file
|
@ -0,0 +1,703 @@
|
|||
// /**
|
||||
// ********
|
||||
// *
|
||||
// * ORIGIONAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden
|
||||
// * The code was donated on 4/28/2010 by Alphons van der Heijden
|
||||
// * To Brandon'Dimentox Travanti' Husbands & Malcolm J. Kudra which in turn Liscense under the GPLv2.
|
||||
// * In agreement to Alphons van der Heijden wishes.
|
||||
// *
|
||||
// * The community would like to thank Alphons for all of his hard work, blood sweat and tears.
|
||||
// * Without his work the community would be stuck with crappy editors.
|
||||
// *
|
||||
// * The source code in this file ("Source Code") is provided by The LSLEditor Group
|
||||
// * to you under the terms of the GNU General Public License, version 2.0
|
||||
// * ("GPL"), unless you have obtained a separate licensing agreement
|
||||
// * ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
// * the GPL can be found in the gplv2.txt document.
|
||||
// *
|
||||
// ********
|
||||
// * GPLv2 Header
|
||||
// ********
|
||||
// * LSLEditor, a External editor for the LSL Language.
|
||||
// * Copyright (C) 2010 The LSLEditor Group.
|
||||
//
|
||||
// * This program is free software; you can redistribute it and/or
|
||||
// * modify it under the terms of the GNU General Public License
|
||||
// * as published by the Free Software Foundation; either version 2
|
||||
// * of the License, or (at your option) any later version.
|
||||
// *
|
||||
// * This program is distributed in the hope that it will be useful,
|
||||
// * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// * GNU General Public License for more details.
|
||||
// *
|
||||
// * You should have received a copy of the GNU General Public License
|
||||
// * along with this program; if not, write to the Free Software
|
||||
// * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
// ********
|
||||
// *
|
||||
// * The above copyright notice and this permission notice shall be included in all
|
||||
// * copies or substantial portions of the Software.
|
||||
// *
|
||||
// ********
|
||||
// */
|
||||
using System;
|
||||
using System.Text;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Printing;
|
||||
using System.Globalization;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace LSLEditor.Helpers
|
||||
{
|
||||
/// <summary>
|
||||
/// Data Grid View Printer. Print functions for a datagridview, since MS
|
||||
/// didn't see fit to do it.
|
||||
/// </summary>
|
||||
class PrinterHelper
|
||||
{
|
||||
//---------------------------------------------------------------------
|
||||
// global variables
|
||||
//---------------------------------------------------------------------
|
||||
#region global variables
|
||||
|
||||
// the data grid view we're printing
|
||||
EditForm editForm = null;
|
||||
int intCharFrom;
|
||||
int intCharTo;
|
||||
int intCharPrint;
|
||||
|
||||
// print document
|
||||
PrintDocument printDoc = null;
|
||||
|
||||
// print status items
|
||||
int fromPage = 0;
|
||||
int toPage = -1;
|
||||
|
||||
// page formatting options
|
||||
int pageHeight = 0;
|
||||
int pageWidth = 0;
|
||||
int printWidth = 0;
|
||||
int CurrentPage = 0;
|
||||
PrintRange printRange;
|
||||
|
||||
// calculated values
|
||||
private float footerHeight = 0;
|
||||
private float pagenumberHeight = 0;
|
||||
#endregion
|
||||
|
||||
//---------------------------------------------------------------------
|
||||
// properties - settable by user
|
||||
//---------------------------------------------------------------------
|
||||
#region properties
|
||||
|
||||
// Title
|
||||
#region title properties
|
||||
|
||||
/// <summary>
|
||||
/// Title for this report. Default is empty.
|
||||
/// </summary>
|
||||
private String title;
|
||||
public String Title
|
||||
{
|
||||
get { return title; }
|
||||
set { title = value; printDoc.DocumentName = title; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Font for the title. Default is Tahoma, 18pt.
|
||||
/// </summary>
|
||||
private Font titlefont;
|
||||
public Font TitleFont
|
||||
{
|
||||
get { return titlefont; }
|
||||
set { titlefont = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Foreground color for the title. Default is Black
|
||||
/// </summary>
|
||||
private Color titlecolor;
|
||||
public Color TitleColor
|
||||
{
|
||||
get { return titlecolor; }
|
||||
set { titlecolor = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Allow the user to override the title string alignment. Default value is
|
||||
/// Alignment - Near;
|
||||
/// </summary>
|
||||
private StringAlignment titlealignment;
|
||||
public StringAlignment TitleAlignment
|
||||
{
|
||||
get { return titlealignment; }
|
||||
set { titlealignment = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Allow the user to override the title string format flags. Default values
|
||||
/// are: FormatFlags - NoWrap, LineLimit, NoClip
|
||||
/// </summary>
|
||||
private StringFormatFlags titleformatflags;
|
||||
public StringFormatFlags TitleFormatFlags
|
||||
{
|
||||
get { return titleformatflags; }
|
||||
set { titleformatflags = value; }
|
||||
}
|
||||
#endregion
|
||||
|
||||
// SubTitle
|
||||
#region subtitle properties
|
||||
|
||||
/// <summary>
|
||||
/// SubTitle for this report. Default is empty.
|
||||
/// </summary>
|
||||
private String subtitle;
|
||||
public String SubTitle
|
||||
{
|
||||
get { return subtitle; }
|
||||
set { subtitle = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Font for the subtitle. Default is Tahoma, 12pt.
|
||||
/// </summary>
|
||||
private Font subtitlefont;
|
||||
public Font SubTitleFont
|
||||
{
|
||||
get { return subtitlefont; }
|
||||
set { subtitlefont = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Foreground color for the subtitle. Default is Black
|
||||
/// </summary>
|
||||
private Color subtitlecolor;
|
||||
public Color SubTitleColor
|
||||
{
|
||||
get { return subtitlecolor; }
|
||||
set { subtitlecolor = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Allow the user to override the subtitle string alignment. Default value is
|
||||
/// Alignment - Near;
|
||||
/// </summary>
|
||||
private StringAlignment subtitlealignment;
|
||||
public StringAlignment SubTitleAlignment
|
||||
{
|
||||
get { return subtitlealignment; }
|
||||
set { subtitlealignment = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Allow the user to override the subtitle string format flags. Default values
|
||||
/// are: FormatFlags - NoWrap, LineLimit, NoClip
|
||||
/// </summary>
|
||||
private StringFormatFlags subtitleformatflags;
|
||||
public StringFormatFlags SubTitleFormatFlags
|
||||
{
|
||||
get { return subtitleformatflags; }
|
||||
set { subtitleformatflags = value; }
|
||||
}
|
||||
#endregion
|
||||
|
||||
// Footer
|
||||
#region footer properties
|
||||
|
||||
/// <summary>
|
||||
/// footer for this report. Default is empty.
|
||||
/// </summary>
|
||||
private String footer;
|
||||
public String Footer
|
||||
{
|
||||
get { return footer; }
|
||||
set { footer = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Font for the footer. Default is Tahoma, 10pt.
|
||||
/// </summary>
|
||||
private Font footerfont;
|
||||
public Font FooterFont
|
||||
{
|
||||
get { return footerfont; }
|
||||
set { footerfont = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Foreground color for the footer. Default is Black
|
||||
/// </summary>
|
||||
private Color footercolor;
|
||||
public Color FooterColor
|
||||
{
|
||||
get { return footercolor; }
|
||||
set { footercolor = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Allow the user to override the footer string alignment. Default value is
|
||||
/// Alignment - Center;
|
||||
/// </summary>
|
||||
private StringAlignment footeralignment;
|
||||
public StringAlignment FooterAlignment
|
||||
{
|
||||
get { return footeralignment; }
|
||||
set { footeralignment = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Allow the user to override the footer string format flags. Default values
|
||||
/// are: FormatFlags - NoWrap, LineLimit, NoClip
|
||||
/// </summary>
|
||||
private StringFormatFlags footerformatflags;
|
||||
public StringFormatFlags FooterFormatFlags
|
||||
{
|
||||
get { return footerformatflags; }
|
||||
set { footerformatflags = value; }
|
||||
}
|
||||
|
||||
private float footerspacing;
|
||||
public float FooterSpacing
|
||||
{
|
||||
get { return footerspacing; }
|
||||
set { footerspacing = value; }
|
||||
}
|
||||
#endregion
|
||||
|
||||
// Page Numbering
|
||||
#region page number properties
|
||||
|
||||
/// <summary>
|
||||
/// Include page number in the printout. Default is true.
|
||||
/// </summary>
|
||||
private bool pageno = true;
|
||||
public bool PageNumbers
|
||||
{
|
||||
get { return pageno; }
|
||||
set { pageno = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Font for the page number, Default is Tahoma, 8pt.
|
||||
/// </summary>
|
||||
private Font pagenofont;
|
||||
public Font PageNumberFont
|
||||
{
|
||||
get { return pagenofont; }
|
||||
set { pagenofont = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Text color (foreground) for the page number. Default is Black
|
||||
/// </summary>
|
||||
private Color pagenocolor;
|
||||
public Color PageNumberColor
|
||||
{
|
||||
get { return pagenocolor; }
|
||||
set { pagenocolor = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Allow the user to override the page number string alignment. Default value is
|
||||
/// Alignment - Near;
|
||||
/// </summary>
|
||||
private StringAlignment pagenumberalignment;
|
||||
public StringAlignment PaageNumberAlignment
|
||||
{
|
||||
get { return pagenumberalignment; }
|
||||
set { pagenumberalignment = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Allow the user to override the pagenumber string format flags. Default values
|
||||
/// are: FormatFlags - NoWrap, LineLimit, NoClip
|
||||
/// </summary>
|
||||
private StringFormatFlags pagenumberformatflags;
|
||||
public StringFormatFlags PageNumberFormatFlags
|
||||
{
|
||||
get { return pagenumberformatflags; }
|
||||
set { pagenumberformatflags = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Allow the user to select whether to have the page number at the top or bottom
|
||||
/// of the page. Default is false: page numbers on the bottom of the page
|
||||
/// </summary>
|
||||
private bool pagenumberontop = false;
|
||||
public bool PageNumberInHeader
|
||||
{
|
||||
get { return pagenumberontop; }
|
||||
set { pagenumberontop = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Should the page number be printed on a separate line, or printed on the
|
||||
/// same line as the header / footer? Default is false;
|
||||
/// </summary>
|
||||
private bool pagenumberonseparateline = false;
|
||||
public bool PaageNumberOnSeparateLine
|
||||
{
|
||||
get { return pagenumberonseparateline; }
|
||||
set { pagenumberonseparateline = value; }
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
// Page Level Properties
|
||||
#region page level properties
|
||||
|
||||
/// <summary>
|
||||
/// Page margins override. Default is (60, 60, 60, 60)
|
||||
/// </summary>
|
||||
private Margins printmargins;
|
||||
public Margins PrintMargins
|
||||
{
|
||||
get { return printmargins; }
|
||||
set { printmargins = value; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// Constructor for PrinterHelper
|
||||
/// </summary>
|
||||
public PrinterHelper(PageSetupDialog pageSetupDialog)
|
||||
{
|
||||
// create print document
|
||||
printDoc = new PrintDocument();
|
||||
printDoc.PrintPage += new PrintPageEventHandler(printDoc_PrintPage);
|
||||
|
||||
if (pageSetupDialog.PrinterSettings != null)
|
||||
printDoc.PrinterSettings = pageSetupDialog.PrinterSettings;
|
||||
|
||||
if (pageSetupDialog.PageSettings != null)
|
||||
printDoc.DefaultPageSettings = pageSetupDialog.PageSettings;
|
||||
else
|
||||
printDoc.DefaultPageSettings.Margins = new Margins(60, 80, 40, 40);
|
||||
|
||||
printmargins = printDoc.DefaultPageSettings.Margins;
|
||||
|
||||
// set default fonts
|
||||
pagenofont = new Font("Tahoma", 8, FontStyle.Regular, GraphicsUnit.Point);
|
||||
pagenocolor = Color.Black;
|
||||
titlefont = new Font("Tahoma", 8, FontStyle.Bold, GraphicsUnit.Point);
|
||||
titlecolor = Color.Black;
|
||||
subtitlefont = new Font("Tahoma", 8, FontStyle.Regular, GraphicsUnit.Point);
|
||||
subtitlecolor = Color.Black;
|
||||
footerfont = new Font("Tahoma", 8, FontStyle.Regular, GraphicsUnit.Point);
|
||||
footercolor = Color.Black;
|
||||
|
||||
// set default string formats
|
||||
titlealignment = StringAlignment.Near;
|
||||
titleformatflags = StringFormatFlags.NoWrap | StringFormatFlags.LineLimit | StringFormatFlags.NoClip;
|
||||
|
||||
subtitlealignment = StringAlignment.Near;
|
||||
subtitleformatflags = StringFormatFlags.NoWrap | StringFormatFlags.LineLimit | StringFormatFlags.NoClip;
|
||||
|
||||
footeralignment = StringAlignment.Near;
|
||||
footerformatflags = StringFormatFlags.NoWrap | StringFormatFlags.LineLimit | StringFormatFlags.NoClip;
|
||||
|
||||
pagenumberalignment = StringAlignment.Center;
|
||||
pagenumberformatflags = StringFormatFlags.NoWrap | StringFormatFlags.LineLimit | StringFormatFlags.NoClip;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Start the printing process, print to a printer.
|
||||
/// </summary>
|
||||
/// <param name="editForm">The EditForm to print</param>
|
||||
/// NOTE: Any changes to this method also need to be done in PrintPreviewEditForm
|
||||
public void PrintEditForm(EditForm editForm)
|
||||
{
|
||||
// save the datagridview we're printing
|
||||
this.editForm = editForm;
|
||||
this.intCharFrom = 0;
|
||||
this.intCharPrint = 0;
|
||||
this.intCharTo = editForm.TextBox.Text.Length;
|
||||
|
||||
// create new print dialog
|
||||
PrintDialog pd = new PrintDialog();
|
||||
pd.Document = printDoc;
|
||||
//printDoc.DefaultPageSettings.Margins = printmargins;
|
||||
pd.AllowSelection = true;
|
||||
pd.AllowSomePages = false;
|
||||
pd.AllowCurrentPage = false;
|
||||
pd.AllowPrintToFile = false;
|
||||
|
||||
// show print dialog
|
||||
if (DialogResult.OK == pd.ShowDialog())
|
||||
{
|
||||
SetupPrint(pd);
|
||||
printDoc.Print();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Start the printing process, print to a print preview dialog
|
||||
/// </summary>
|
||||
/// <param name="editForm">The EditForm to print</param>
|
||||
/// NOTE: Any changes to this method also need to be done in PrintDataGridView
|
||||
public void PrintPreviewEditForm(EditForm editForm)
|
||||
{
|
||||
// save the datagridview we're printing
|
||||
this.editForm = editForm;
|
||||
this.intCharFrom = 0;
|
||||
this.intCharTo = editForm.TextBox.Text.Length;
|
||||
|
||||
// create new print dialog and set options
|
||||
PrintDialog pd = new PrintDialog();
|
||||
pd.Document = printDoc;
|
||||
//printDoc.DefaultPageSettings.Margins = printmargins;
|
||||
pd.AllowSelection = true;
|
||||
pd.AllowSomePages = false;
|
||||
pd.AllowCurrentPage = false;
|
||||
pd.AllowPrintToFile = false;
|
||||
|
||||
// show print dialog
|
||||
if (DialogResult.OK == pd.ShowDialog())
|
||||
{
|
||||
SetupPrint(pd);
|
||||
PrintPreviewDialog ppdialog = new PrintPreviewDialog();
|
||||
ppdialog.Document = printDoc;
|
||||
ppdialog.ShowDialog();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Set up the print job. Save information from print dialog
|
||||
/// and print document for easy access. Also sets up the rows
|
||||
/// and columns that will be printed.
|
||||
/// </summary>
|
||||
/// <param name="pd">The print dialog the user just filled out</param>
|
||||
void SetupPrint(PrintDialog pd)
|
||||
{
|
||||
//-----------------------------------------------------------------
|
||||
// save data from print dialog and document
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
// check to see if we're doing landscape printing
|
||||
if (printDoc.DefaultPageSettings.Landscape)
|
||||
{
|
||||
// landscape: switch width and height
|
||||
pageHeight = printDoc.DefaultPageSettings.PaperSize.Width;
|
||||
pageWidth = printDoc.DefaultPageSettings.PaperSize.Height;
|
||||
}
|
||||
else
|
||||
{
|
||||
// portrait: keep width and height as expected
|
||||
pageHeight = printDoc.DefaultPageSettings.PaperSize.Height;
|
||||
pageWidth = printDoc.DefaultPageSettings.PaperSize.Width;
|
||||
}
|
||||
|
||||
// save printer margins and calc print width
|
||||
printmargins = printDoc.DefaultPageSettings.Margins;
|
||||
printWidth = pageWidth - printmargins.Left - printmargins.Right;
|
||||
|
||||
// save print range
|
||||
printRange = pd.PrinterSettings.PrintRange;
|
||||
|
||||
// pages to print handles "some pages" option
|
||||
if (PrintRange.SomePages == printRange)
|
||||
{
|
||||
// set limits to only print some pages
|
||||
fromPage = pd.PrinterSettings.FromPage;
|
||||
toPage = pd.PrinterSettings.ToPage;
|
||||
}
|
||||
else
|
||||
{
|
||||
// set extremes so that we'll print all pages
|
||||
fromPage = 0;
|
||||
toPage = 2147483647;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// set up the pages to print
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
// pages (handles "selection" and "current page" options
|
||||
if (PrintRange.Selection == printRange)
|
||||
{
|
||||
intCharPrint = this.editForm.TextBox.SelectionStart;
|
||||
intCharFrom = intCharPrint;
|
||||
intCharTo = intCharFrom + this.editForm.TextBox.SelectionLength;
|
||||
}
|
||||
else if (PrintRange.CurrentPage == printRange)
|
||||
{
|
||||
}
|
||||
// this is the default for print all
|
||||
else
|
||||
{
|
||||
intCharPrint = 0;
|
||||
intCharFrom = intCharPrint;
|
||||
intCharTo = this.editForm.TextBox.Text.Length;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Centralize the string format settings. Does the work of checking for user
|
||||
/// overrides, and if they're not present, setting the cell alignment to match
|
||||
/// (somewhat) the source control's string alignment.
|
||||
/// </summary>
|
||||
/// <param name="alignment">String alignment</param>
|
||||
/// <param name="flags">String format flags</param>
|
||||
/// <param name="controlstyle">DataGridView style to apply (if available)</param>
|
||||
/// <param name="overrideformat">True if user overrode alignment or flags</param>
|
||||
/// <returns></returns>
|
||||
private static StringFormat managestringformat(StringAlignment alignment, StringFormatFlags flags)
|
||||
{
|
||||
// start with the provided
|
||||
StringFormat format = new StringFormat();
|
||||
format.Trimming = StringTrimming.Word;
|
||||
format.Alignment = alignment;
|
||||
format.FormatFlags = flags;
|
||||
|
||||
return format;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// PrintPage event handler. This routine prints one page. It will
|
||||
/// skip non-printable pages if the user selected the "some pages" option
|
||||
/// on the print dialog.
|
||||
/// </summary>
|
||||
/// <param name="sender">default object from windows</param>
|
||||
/// <param name="e">Event info from Windows about the printing</param>
|
||||
private void printDoc_PrintPage(object sender, PrintPageEventArgs e)
|
||||
{
|
||||
// adjust printing region, make space for headers and footers
|
||||
Rectangle rect = new Rectangle(
|
||||
e.MarginBounds.Left,
|
||||
e.MarginBounds.Top + e.MarginBounds.Top,
|
||||
e.MarginBounds.Width,
|
||||
e.MarginBounds.Height - e.MarginBounds.Top - e.MarginBounds.Top);
|
||||
PrintPageEventArgs ee = new PrintPageEventArgs(e.Graphics, rect, e.PageBounds, e.PageSettings);
|
||||
// Print the content of RichTextBox. Store the last character printed.
|
||||
intCharFrom = editForm.TextBox.Print(intCharFrom, intCharTo, ee);
|
||||
|
||||
// increment page number & check page range
|
||||
CurrentPage++;
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// print headers
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
// reset printpos as it may have changed during the 'skip pages' routine just above.
|
||||
float printpos = printmargins.Top;
|
||||
|
||||
// print page number if user selected it
|
||||
if (pagenumberontop)
|
||||
{
|
||||
// if we have a page number to print
|
||||
if (pageno)
|
||||
{
|
||||
// ... then print it
|
||||
printsection(e.Graphics, ref printpos, "Page " + CurrentPage.ToString(CultureInfo.CurrentCulture),
|
||||
pagenofont, pagenocolor, pagenumberalignment, pagenumberformatflags);
|
||||
|
||||
// if the page number is not on a separate line, don't "use up" it's vertical space
|
||||
if (!pagenumberonseparateline)
|
||||
printpos -= pagenumberHeight;
|
||||
}
|
||||
}
|
||||
|
||||
// print title if provided
|
||||
if (!String.IsNullOrEmpty(title))
|
||||
printsection(e.Graphics, ref printpos, title, titlefont,
|
||||
titlecolor, titlealignment, titleformatflags);
|
||||
|
||||
// print subtitle if provided
|
||||
if (!String.IsNullOrEmpty(subtitle))
|
||||
printsection(e.Graphics, ref printpos, subtitle, subtitlefont,
|
||||
subtitlecolor, subtitlealignment, subtitleformatflags);
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// print footer
|
||||
//-----------------------------------------------------------------
|
||||
printfooter(e.Graphics, ref printpos);
|
||||
|
||||
// Check for more pages
|
||||
if (intCharFrom < intCharTo)
|
||||
e.HasMorePages = true;
|
||||
else
|
||||
{
|
||||
intCharFrom = intCharPrint; // reset
|
||||
CurrentPage = 0;
|
||||
e.HasMorePages = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Print a header or footer section. Used for page numbers and titles
|
||||
/// </summary>
|
||||
/// <param name="g">Graphic context to print in</param>
|
||||
/// <param name="pos">Track vertical space used; 'y' location</param>
|
||||
/// <param name="text">String to print</param>
|
||||
/// <param name="font">Font to use for printing</param>
|
||||
/// <param name="color">Color to print in</param>
|
||||
/// <param name="alignment">Alignment - print to left, center or right</param>
|
||||
/// <param name="flags">String format flags</param>
|
||||
/// <param name="useroverride">True if the user overrode the alignment or flags</param>
|
||||
private void printsection(Graphics g, ref float pos, string text,
|
||||
Font font, Color color, StringAlignment alignment, StringFormatFlags flags)
|
||||
{
|
||||
// string formatting setup
|
||||
StringFormat printformat = managestringformat(alignment, flags);
|
||||
|
||||
// measure string
|
||||
SizeF printsize = g.MeasureString(text, font, printWidth, printformat);
|
||||
|
||||
// build area to print within
|
||||
RectangleF printarea = new RectangleF((float)printmargins.Left, pos, (float)printWidth,
|
||||
printsize.Height);
|
||||
|
||||
// do the actual print
|
||||
g.DrawString(text, font, new SolidBrush(color), printarea, printformat);
|
||||
|
||||
// track "used" vertical space
|
||||
pos += printsize.Height;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Print the footer. This handles the footer spacing, and printing the page number
|
||||
/// at the bottom of the page (if the page number is not in the header).
|
||||
/// </summary>
|
||||
/// <param name="g">Graphic context to print in</param>
|
||||
/// <param name="pos">Track vertical space used; 'y' location</param>
|
||||
private void printfooter(Graphics g, ref float pos)
|
||||
{
|
||||
// print last footer. Note: need to force printpos to the bottom of the page
|
||||
// as we may have run out of data anywhere on the page
|
||||
pos = pageHeight - footerHeight - printmargins.Top - printmargins.Bottom;
|
||||
|
||||
// add spacing
|
||||
pos += footerspacing;
|
||||
|
||||
// print the footer
|
||||
printsection(g, ref pos, footer, footerfont,
|
||||
footercolor, footeralignment, footerformatflags);
|
||||
|
||||
// print the page number if it's on the bottom.
|
||||
if (!pagenumberontop)
|
||||
{
|
||||
if (pageno)
|
||||
{
|
||||
pagenumberHeight = g.MeasureString("M", pagenofont).Height;
|
||||
// if the pageno is not on a separate line, push the print location up by its height.
|
||||
if (!pagenumberonseparateline)
|
||||
pos = pos - pagenumberHeight;
|
||||
|
||||
// print the page number
|
||||
printsection(g, ref pos, "Page " + CurrentPage.ToString(CultureInfo.CurrentCulture),
|
||||
pagenofont, pagenocolor, pagenumberalignment, pagenumberformatflags);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue