📄 daprintdocument.cs
字号:
/// Gets/Sets the
/// <see cref="daReport.Paper.Type">daReport.Paper.Type</see>
/// for the current DaPrintDocument
/// </summary>
public Paper.Type PaperType
{
get{ return paperType;}
set
{
paperType = value;
int[] size = Paper.GetPaperSize(paperType);
this.DefaultPageSettings.PaperSize = new PaperSize("",size[0],size[1]);
if(OnPageSizeChanged!=null)
OnPageSizeChanged(this);
}
}
/// <summary>
/// Uses the passed in string to look up paramter values
/// </summary>
/// <param name="input">paramater value to look up</param>
/// <returns>string value of parameter</returns>
[Browsable(false)]
public string ResolveParameterValues(string input)
{
string buffer = "";
int pos = -1;
int oldPos = 0;
while( (pos=input.IndexOf("$P",oldPos)) != -1 )
{
buffer += input.Substring(oldPos,pos-oldPos);
if ( input.Substring(pos+2,1).Equals("{") && input.IndexOf("}",pos+2) != -1 )
{
string parameterName = input.Substring(pos+3,input.IndexOf("}",pos+2)-pos-3).Trim();
if ( systemValues.ContainsKey(parameterName))
{
buffer += systemValues[parameterName].ToString();
}
else if ( declaredParameters.Contains(parameterName) && parameterValues.ContainsKey(parameterName))
{
buffer += parameterValues[parameterName].ToString();
}
oldPos = input.IndexOf("}",pos+2) + 1;
}
else
{
oldPos = pos+2;
}
}
buffer += input.Substring(oldPos);
return buffer;
}
/// <summary>
/// A string collection of parameters for the current DaPrintDocument object.
/// </summary>
/// <remarks>You will use the
/// <see cref="daReport.DaPrintDocument.SetParameters">daReport.DaPrintDocument.SetParameters</see>
/// function to set the values of parameters.</remarks>
public Parameters Parameters
{
get { return declaredParameters; }
set { declaredParameters = value; }
}
/// <summary>
///
/// </summary>
/// <param name="FileName">Location of the file to be saved to</param>
/// <returns>returns true if save was successful</returns>
public bool SaveXMLDocument(string FileName)
{
try
{
string CurrentLayout = "Portrait";
if (this.Layout == DaPrintDocument.LayoutType.Landscape )
CurrentLayout = "Landscape";
//XmlTextWriter XmlWriter = new XmlTextWriter(Application.StartupPath + "\\test.xml", System.Text.Encoding.UTF8);
XmlTextWriter XmlWriter = new XmlTextWriter(FileName, System.Text.Encoding.UTF8);
XmlWriter.Formatting = Formatting.Indented;
XmlWriter.WriteStartElement("daReport");
XmlWriter.WriteAttributeString("papersize", this.paperType.ToString());
XmlWriter.WriteAttributeString("layout", CurrentLayout);
XmlWriter.WriteStartElement("margins");
XmlWriter.WriteAttributeString("left", this.Margins.Left.ToString());
XmlWriter.WriteAttributeString("top", this.Margins.Top.ToString());
XmlWriter.WriteAttributeString("right", this.Margins.Right.ToString());
XmlWriter.WriteAttributeString("bottom", this.Margins.Bottom.ToString());
XmlWriter.WriteEndElement(); //end of margins element
if (this.Parameters.Count>0)
{
XmlWriter.WriteStartElement("parameters");
for (int i=0;i<this.Parameters.Count;i++)
{
XmlWriter.WriteStartElement("parameter");
XmlWriter.WriteAttributeString("name", this.Parameters[i].Name);
XmlWriter.WriteEndElement();
}
XmlWriter.WriteEndElement(); //end of parameters element
}
if (this.staticObjects.Length>0 || this.dynamicObjects.Length>0)
{
XmlWriter.WriteStartElement("content");
if (this.staticObjects.Length>0)
{
XmlWriter.WriteStartElement("staticContent");
for (int i=0;i<this.staticObjects.Length;i++)
{
this.staticObjects[i].AddXMLToWriter(ref XmlWriter);
}
XmlWriter.WriteEndElement(); //end of staticContent element
}
if (this.dynamicObjects.Length>0)
{
XmlWriter.WriteStartElement("dynamicContent");
for (int i=0;i<this.dynamicObjects.Length;i++)
{
this.dynamicObjects[i].AddXMLToWriter(ref XmlWriter);
}
XmlWriter.WriteEndElement(); //end of dynamicContent element
}
XmlWriter.WriteEndElement(); //end of content element
}
XmlWriter.WriteEndElement(); //end of daReport element
XmlWriter.Close();
return true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return false;
}
}
#endregion
#region Private Event Handlers
private void DaPrintDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
if (isXmlOK)
{
systemValues["pageNumber"] = (int)systemValues["pageNumber"]+1 ;
Graphics g = e.Graphics;
if ((int)systemValues["totalPages"] == 0)
systemValues["totalPages"] = calculateNumberOfPages(g) ;
bool morePages = updateDynamicContent(g);
for (int i =0;i<staticObjects.Length;i++)
{
if (staticObjects[i] != null)
{
if (Int32.Parse(systemValues["pageNumber"].ToString()) > 1)
{
if (! morePages)
{
if (staticObjects[i].ObjectRepeatability != ICustomPaint.ObjectRepeatabilityTypes.OnlyFirstPage)
staticObjects[i].Paint(g);
}
else
{
if (staticObjects[i].ObjectRepeatability == ICustomPaint.ObjectRepeatabilityTypes.RepeatOnAllPages)
staticObjects[i].Paint(g);
}
}
else
{
if (staticObjects[i].ObjectRepeatability != ICustomPaint.ObjectRepeatabilityTypes.OnlyLastPage)
staticObjects[i].Paint(g);
}
}
}
for (int i =0;i<dynamicObjects.Length;i++)
{
if (dynamicObjects[i] != null)
{
if (Int32.Parse(systemValues["pageNumber"].ToString()) > 1)
{
if (! morePages)
{
if (dynamicObjects[i].ObjectRepeatability != ICustomPaint.ObjectRepeatabilityTypes.OnlyFirstPage)
dynamicObjects[i].Paint(g);
}
else
{
if (dynamicObjects[i].ObjectRepeatability == ICustomPaint.ObjectRepeatabilityTypes.RepeatOnAllPages)
dynamicObjects[i].Paint(g);
}
}
else
{
if (dynamicObjects[i].ObjectRepeatability != ICustomPaint.ObjectRepeatabilityTypes.OnlyLastPage)
dynamicObjects[i].Paint(g);
}
}
}
e.HasMorePages = morePages;
}
else
{
string theMessage = "Xml file structure is incorrect !\r\n\r\n";
e.Graphics.DrawString(theMessage+theErrorMessage,new Font("Tahoma",10),new SolidBrush(Color.Black),e.MarginBounds);
e.HasMorePages = false;
}
}
private void DaPrintDocument_BeginPrint(object sender, System.Drawing.Printing.PrintEventArgs e)
{
if (!designMode)
PrepareStaticObjects();
IDictionaryEnumerator en = mDataTables.GetEnumerator();
while (en.MoveNext())
{
rowsPrintedSoFar[en.Key] = 0;
}
// reset system variables on begin print
systemValues["pageNumber"] = 0 ;
systemValues["totalPages"] = 0 ;
}
#endregion
#region Private Functions
private void getChartNames()
{
if (xmlStaticElements==null) return;
for (int i=0;i<xmlStaticElements.Count;i++)
{
if (xmlStaticElements[i].Name == "chartBox")
{
if (xmlStaticElements[i].Attributes["name"] != null)
{
theCharts.Add(xmlStaticElements[i].Attributes["name"].Value,i);
}
}
}
}
private void initSystemParameters()
{
systemValues = new Hashtable();
systemValues.Add("pageNumber",0);
systemValues.Add("totalPages",0);
systemValues.Add("systemDate",DateTime.Now.ToString("dd/MM/yyyy"));
systemValues.Add("systemTime",DateTime.Now.ToString("HH:mm:ss"));
}
private void PrepareStaticObjects()
{
for (int i=0;i<staticObjects.Length;i++)
{
if (staticObjects[i] is TextField)
{
TextField txtField = staticObjects[i] as TextField;
txtField.Text = ResolveParameterValues(txtField.Text);
}
}
}
private void resolveContents(XmlNode theNode)
{
XmlNodeList temp = theNode.ChildNodes;
for (int i=0;i<temp.Count;i++)
{
switch (temp[i].Name)
{
case "dynamicContent" :
xmlDynamicElements = temp[i].ChildNodes;
break;
case "staticContent" :
xmlStaticElements = temp[i].ChildNodes;
break;
}
}
}
private void resolveLayout(XmlNode theNode)
{
if (theNode.Attributes["size"] != null)
{
string theSize = theNode.Attributes["size"].Value;
}
if (theNode.Attributes["layout"] != null)
{
string theOrientation = theNode.Attributes["layout"].Value;
if ( theOrientation == "Landscape" )
this.DefaultPageSettings.Landscape = true;
else
this.DefaultPageSettings.Landscape = false;
}
}
private void resolveMargins(XmlNode theNode)
{
try
{
this.Margins.Top = Convert.ToInt32 (theNode.Attributes["top"].Value);
this.Margins.Left = Convert.ToInt32 (theNode.Attributes["left"].Value);
this.Margins.Bottom = Convert.ToInt32 (theNode.Attributes["bottom"].Value);
this.Margins.Right = Convert.ToInt32 (theNode.Attributes["right"].Value);
}
catch(Exception){}
}
private void resolvePaperSize(XmlNode theNode)
{
if (theNode.Attributes["papersize"] != null)
{
this.PaperType = Paper.GetType(theNode.Attributes["papersize"].Value);
}
}
private void resolveParameterDeclaration(XmlNode theNode)
{
XmlNodeList childNodes = theNode.ChildNodes;
for (int i=0;i<childNodes.Count;i++)
{
try
{
Parameter Param = new Parameter(childNodes[i].Attributes["name"].Value);
if (!declaredParameters.Contains(Param))
{
declaredParameters.Add(Param);
}
}
catch(Exception){}
}
}
private void setXML()
{
try
{
XmlNode root = xmlDoc.FirstChild;
XmlNodeList temp = root.ChildNodes;
resolvePaperSize(root);
resolveLayout(root);
for (int i=0;i<temp.Count;i++)
{
switch (temp[i].Name)
{
case "margins" :
resolveMargins(temp[i]);
break;
case "parameters" :
resolveParameterDeclaration(temp[i]);
break;
case "content" :
resolveContents(temp[i]);
break;
}
}
InitStaticObjects();
InitDynamicObjects();
this.OnMarginsChanged += new MarginsChangedHandler(RepeatAlignments);
this.OnPageLayoutChanged += new PageLayoutChangedHandler(RepeatAlignments);
}
catch(FileNotFoundException)
{
//MessageBox.Show("No such file "+filename);
}
catch(XmlException e)
{
isXmlOK = false;
Exception tmp = e;
theErrorMessage = "";
while (tmp != null)
{
theErrorMessage += tmp.Message + "\r\n";
tmp = tmp.InnerException;
}
}
}
#endregion
#region Private Properties
private int adjustHorizontalFill(string theFill)
{
int width = Math.Max(0,DefaultPageSettings.Bounds.Right - DefaultPageSettings.Bounds.Left - DefaultPageSettings.Margins.Left - DefaultPageSettings.Margins.Right);
try
{
int pctFill = Convert.ToInt32(theFill);
if (pctFill>100)
{
pctFill = 100;
}
else if (pctFill<0)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -