using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Text; using FastReport.Preview; using FastReport.Table; using FastReport.Utils; namespace FastReport.Export.Text { /// /// Represents the text export. /// public partial class TextExport : ExportBase { #region Constants private const float XDiv = 7.5f; private const float YDiv = 4f; private const float XDivAdv = 0.1015f; private const float YDivAdv = 0.06f; private const float CalculateStep = 0.1f; private const float CalculateStepBack = 0.01f; private const float divPaperX = 4.8f; private const float divPaperY = 3.6f; private const int CalcIterations = 10; byte[] u_HEADER = { 239, 187, 191 }; string[] ref_frames = { // 0 left, 1 top, 2 left-up, 3 right-top, 4 right-down, 5 left-down, 6 left-t, // 7 right-t, 8 up-t, 9 down-t, 10 cross "|-+++++++++", "\u2502\u2500\u250c\u2510\u2518\u2514\u251c\u2524\u252c\u2534\u253c" }; #endregion #region Private fields private bool pageBreaks; private MyRes res; private bool frames; private bool textFrames; private bool emptyLines; private int screenWidth; private int screenHeight; private StringBuilder screen; private float scaleX; private float scaleY; private float scaleXStart; private float scaleYStart; private Encoding encoding; private bool dataOnly; private bool previewMode; private int pageWidth; private int pageHeight; private bool dataSaved; private bool dataLossBreak; private string frameChars; private List printerTypes; private int printerType; private bool printAfterExport; private string printerName; private int copies; private bool avoidDataLoss; #endregion #region Properties /// /// Enable or disable the Data loss avoiding. /// Auto calculation of ScaleX and ScaleY will be launched when dialogue window will be off. /// public bool AvoidDataLoss { get { return avoidDataLoss; } set { avoidDataLoss = value; } } /// /// Gets or sets the count of copies for printing of results. /// public int Copies { get { return copies; } set { copies = value; } } /// /// Gets or sets the printer name for printing of results. /// public string PrinterName { get { return printerName; } set { printerName = value; } } /// /// Enable or disable the printing results after export. /// public bool PrintAfterExport { get { return printAfterExport; } set { printAfterExport = value; } } /// /// Gets or sets the active index of registered printer type. /// public int PrinterType { get { return printerType; } set { printerType = value; } } /// /// Gets or sets the list of printer types. /// public List PrinterTypes { get { return printerTypes; } set { printerTypes = value; } } /// /// Gets or sets the scale by X axis for correct text objects placement. /// public float ScaleX { get { return scaleX; } set { scaleX = value; scaleXStart = value; } } /// /// Gets or sets the scale by Y axis for correct text objects placement. /// public float ScaleY { get { return scaleY; } set { scaleY = value; scaleYStart = value; } } /// /// Gets or sets the encoding of resulting document. /// /// /// Windows ANSI encoding /// TextExport.Encoding = Encoding.Default; /// Unicode UTF-8 encoding /// TextExport.Encoding = Encoding.UTF8; /// OEM encoding for current system locale sessings /// TextExport.Encoding = Encoding.GetEncoding(CultureInfo.CurrentCulture.TextInfo.OEMCodePage); /// public Encoding Encoding { get { return encoding; } set { encoding = value; } } /// /// Enable or disable the data only output without any headers. Default value is false. /// public bool DataOnly { get { return dataOnly; } set { dataOnly = value; } } /// /// Enable or disable the breaks of pages in resulting document. Default value is true. /// public bool PageBreaks { get { return pageBreaks; } set { pageBreaks = value; } } /// /// Enable or disable frames in resulting document. Default value is true. /// public bool Frames { get { return frames; } set { frames = value; } } /// /// Enable or disable the text (non graphic) frames in resulting document. Default value is false. /// public bool TextFrames { get { return textFrames; } set { textFrames = value; } } /// /// Enable or disable the output of empty lines in resulting document. Default value is false. /// public bool EmptyLines { get { return emptyLines; } set { emptyLines = value; } } /// /// /// public bool DataSaved { get { return dataSaved; } } /// /// /// public bool DataLossBreak { get { return dataLossBreak; } set { dataLossBreak = value; } } /// /// /// public int PageHeight { get { return pageHeight; } } /// /// /// public int PageWidth { get { return pageWidth; } } /// /// /// public bool PreviewMode { get { return previewMode; } set { previewMode = value; } } #endregion #region Private Methods private char ScreenGet(int x, int y) { if ((x < screenWidth) && (y < screenHeight) && (x >= 0) && (y >= 0)) return screen[screenWidth * y + x]; else return ' '; } private void ScreenType(int x, int y, char c) { if ((x < screenWidth) && (y < screenHeight) && (x >= 0) && (y >= 0)) { if (c != ' ') { char current = screen[screenWidth * y + x]; if (current != ' ' && !(frames && IsFrame(current) && IsFrame(c))) dataSaved = false; screen[screenWidth * y + x] = c; } } else if (c != ' ') dataSaved = false; } private bool IsFrame(char c) { return c == ' ' ? false : (frameChars.IndexOf(c) != -1); } private StringBuilder AlignStr(string s, HorzAlign align, int width) { if (align == HorzAlign.Right) return RightStr(s, width - 1); else if (align == HorzAlign.Center) return CenterStr(s, width - 1); else return LeftStr(s, width - 1); } private StringBuilder LeftStr(string s, int width) { return AddCharR(' ', s, width); } private StringBuilder AddCharR(char p, string s, int width) { width = width > 0 ? width : 0; StringBuilder result = new StringBuilder(width); if (s.Length < width) return result.Append(s).Append(new String(p, width - s.Length)); else return result.Append(s); } private StringBuilder CenterStr(string s, int width) { if (width < s.Length) width = s.Length; StringBuilder result = new StringBuilder(width); if (s.Length < width) { result.Append(new String(' ', (int)(width / 2) - (int)(s.Length / 2))).Append(s); result.Append(new String(' ', width - result.Length)); } else result.Append(s); return result; } private StringBuilder RightStr(string s, int width) { return AddChar(' ', s, width); } private StringBuilder AddChar(char p, string s, int width) { width = width > 0 ? width : 0; StringBuilder result = new StringBuilder(width); if (s.Length < width) result.Append(new String(p, width - s.Length)).Append(s); else result.Append(s); return result; } private void ScreenString(int x, int y, string s) { for (int i = 0; i < s.Length; i++) ScreenType(x + i, y, s[i]); } private void InitScreen() { screen = new StringBuilder(screenWidth * screenHeight); screen.Append(' ', screenWidth * screenHeight); } private void DrawLineObject(LineObject lineObject) { if (lineObject.Width == 0 || lineObject.Height == 0) { int d = frames ? 1 : 0; int curx = (int)Math.Round(lineObject.AbsLeft * scaleX * XDivAdv) + d; int cury = (int)Math.Round(lineObject.AbsTop * YDivAdv * scaleY) + d; int cury2 = (int)Math.Floor((lineObject.AbsTop + lineObject.Height) * scaleY * YDivAdv) + d; int curx2 = (int)Math.Floor((lineObject.AbsLeft + lineObject.Width) * scaleX * XDivAdv) + d; int height = cury2 - cury; int width = curx2 - curx; if (lineObject.Width == 0) for (int i = 0; i < height; i++) ScreenType(curx, cury + i, frameChars[0]); else if (lineObject.Height == 0) for (int i = 0; i < width; i++) ScreenType(curx + i, cury, frameChars[1]); } } private void DrawTextObject(TextObject textObject) { int linesBefore = 0; int d = frames ? 1 : 0; int curx = (int)(textObject.AbsLeft * scaleX * XDivAdv) + d; int cury = (int)(textObject.AbsTop * YDivAdv * scaleY) + d; int cury2 = (int)Math.Floor((textObject.AbsTop + textObject.Height) * scaleY * YDivAdv) + d; int curx2 = (int)Math.Floor((textObject.AbsLeft + textObject.Width) * scaleX * XDivAdv) + d; int height = cury2 - cury; int width = curx2 - curx; List lines = WrapTextObject(textObject); if (textObject.VertAlign == VertAlign.Bottom) linesBefore = height - lines.Count; else if (textObject.VertAlign == VertAlign.Center) linesBefore = (int)((height - lines.Count) / 2); for (int i = 0; i < lines.Count; i++) { string s = AlignStr(lines[i], textObject.HorzAlign, width).ToString(); ScreenString(curx, cury + i + linesBefore, s); if (dataLossBreak && !dataSaved) return; } if (frames) { if ((textObject.Border.Lines & BorderLines.Left) > 0) for (int i = 0; i < height; i++) ScreenType(curx - 1, cury + i, frameChars[0]); if ((textObject.Border.Lines & BorderLines.Right) > 0) for (int i = 0; i < height; i++) ScreenType(curx + width - 1, cury + i, frameChars[0]); if ((textObject.Border.Lines & BorderLines.Top) > 0) for (int i = 0; i < width; i++) ScreenType(curx + i, cury - 1, frameChars[1]); if ((textObject.Border.Lines & BorderLines.Bottom) > 0) for (int i = 0; i < width; i++) ScreenType(curx + i, cury + height - 1, frameChars[1]); } } private List WrapTextObject(TextObject obj) { float FDpiFX = 96f / DrawUtils.ScreenDpi; List result = new List(); DrawText drawer = new DrawText(); using (Bitmap b = new Bitmap(1, 1)) using (Graphics g = Graphics.FromImage(b)) using (Font f = new Font(obj.Font.FontFamily, obj.Font.Size * FDpiFX, obj.Font.Style)) { float h = f.Height - f.Height / 4; float memoWidth = obj.Width - obj.Padding.Horizontal; string text = obj.Text; float memoHeight = drawer.CalcHeight(text, g, f, memoWidth, obj.Height - obj.Padding.Vertical, obj.HorzAlign, obj.LineHeight, obj.ForceJustify, obj.RightToLeft, obj.WordWrap, obj.Trimming); float y, prevy = 0; StringBuilder line = new StringBuilder(256); foreach (Paragraph par in drawer.Paragraphs) { foreach (Word word in par.Words) { if (!word.visible) break; y = word.top + 1; if (prevy == 0) prevy = y; if (y != prevy) { result.Add(line.ToString()); line.Length = 0; prevy = y; } line.Append(word.text).Append(' '); } } result.Add(line.ToString()); } return result; } #endregion #region Protected Methods /// protected override void Start() { base.Start(); if (avoidDataLoss) CalculateScale(null); if (printerType >= 0 && printerType < printerTypes.Count) foreach (TextExportPrinterCommand command in printerTypes[printerType].Commands) if (command.Active) foreach (byte esc in command.SequenceOn) Stream.WriteByte(esc); if (Encoding == Encoding.UTF8) Stream.Write(u_HEADER, 0, 3); } /// protected override void Finish() { if (printerType >= 0 && printerType < printerTypes.Count) foreach (TextExportPrinterCommand command in printerTypes[printerType].Commands) if (command.Active) foreach (byte esc in command.SequenceOff) Stream.WriteByte(esc); FinishInternal(); scaleX = scaleXStart; scaleY = scaleYStart; } /// protected override string GetFileFilter() { return new MyRes("FileFilters").Get("TxtFile"); } #endregion /// protected override void ExportPageBegin(ReportPage page) { base.ExportPageBegin(page); if (frames) frameChars = textFrames ? ref_frames[0] : ref_frames[1]; pageWidth = pageHeight = 0; dataSaved = true; screenWidth = (int)Math.Floor(ExportUtils.GetPageWidth(page) * divPaperX * XDivAdv * scaleX); screenHeight = (int)Math.Floor(ExportUtils.GetPageHeight(page) * divPaperY * YDivAdv * scaleY); InitScreen(); } private void ExportObject(Base c) { if (c is ReportComponentBase && (c as ReportComponentBase).Exportable) { ReportComponentBase obj = c as ReportComponentBase; if (dataOnly && (obj.Parent == null || !(obj.Parent is DataBand))) return; if (obj is TableCell) return; else if (obj is TableBase) { TableBase table = obj as TableBase; using (TextObject tableback = new TextObject()) { tableback.Border = table.Border; tableback.Fill = table.Fill; tableback.FillColor = table.FillColor; tableback.Left = table.AbsLeft; tableback.Top = table.AbsTop; float tableWidth = 0; for (int i = 0; i < table.ColumnCount; i++) { if (table.RowCount > 0) tableWidth += table[i, 0].Width; } tableback.Width = (tableWidth < table.Width) ? tableWidth : table.Width; tableback.Height = table.Height; DrawTextObject(tableback); } float y = 0; for (int i = 0; i < table.RowCount; i++) { float x = 0; for (int j = 0; j < table.ColumnCount; j++) { if (!table.IsInsideSpan(table[j, i])) { TableCell textcell = table[j, i]; textcell.Left = x; textcell.Top = y; DrawTextObject(textcell); } x += (table.Columns[j]).Width; } y += (table.Rows[i]).Height; } } else if (obj is TextObject) DrawTextObject(obj as TextObject); else if (obj is LineObject && frames) DrawLineObject(obj as LineObject); //if (FDataLossBreak && !FDataSaved) // return; } } /// protected override void ExportBand(BandBase band) { base.ExportBand(band); ExportObject(band); foreach (Base c in band.ForEachAllConvectedObjects(this)) { ExportObject(c); } } private StringBuilder builder; /// protected override void ExportPageEnd(ReportPage page) { builder = new StringBuilder(screenHeight * screenWidth); for (int y = 0; y < screenHeight; y++) { bool empty = true; StringBuilder buf = new StringBuilder(screenWidth); for (int x = 0; x < screenWidth; x++) { char c = ScreenGet(x, y); if (frames && (c == ' ' || IsFrame(c))) // && c != ' ' && IsFrame(c) { bool up = ScreenGet(x, y - 1) == frameChars[0]; bool down = ScreenGet(x, y + 1) == frameChars[0]; bool left = ScreenGet(x - 1, y) == frameChars[1]; bool right = ScreenGet(x + 1, y) == frameChars[1]; if (down && right && !left && !up) c = frameChars[2]; else if (down && !right && left && !up) c = frameChars[3]; else if (!down && !right && left && up) c = frameChars[4]; else if (!down && right && !left && up) c = frameChars[5]; else if (down && right && !left && up) c = frameChars[6]; else if (down && !right && left && up) c = frameChars[7]; else if (down && right && left && !up) c = frameChars[8]; else if (!down && right && left && up) c = frameChars[9]; else if (up && down && left && right) c = frameChars[10]; else if (up && down && !left && !right) c = frameChars[0]; else if (!up && !down && left && right) c = frameChars[1]; } buf.Append(c); if (c != ' ' && (!frames || c != frameChars[0])) empty = false; } if (!empty || emptyLines) { string s = buf.ToString().TrimEnd((char)32); builder.AppendLine(s); if (s.Length > pageWidth) pageWidth = s.Length; pageHeight++; } } if (pageBreaks) builder.AppendLine("\u000c"); if (!previewMode) { byte[] bytes = encoding.GetBytes(builder.ToString()); Stream.Write(bytes, 0, bytes.Length); } } #region Internal methods /// /// Exports the page. /// /// /// public string ExportPage(int pageNo) { PreparedPage ppage = Report.PreparedPages.GetPreparedPage(pageNo); ReportPage page = null; try { page = ppage.StartGetPage(pageNo); ExportPageBegin(page); foreach (Base obj in ppage.GetPageItems(page, false)) ExportBand(obj as BandBase); ExportPageEnd(page); } finally { ppage.EndGetPage(page); } if (previewMode) return builder.ToString(); else return String.Empty; } /// /// Calculates scale. /// /// public void CalculateScale(object progress) { bool oldPreviewMode = previewMode; dataLossBreak = true; previewMode = true; float initX = CalculateStep; float initY = CalculateStep; for (int p = 0; p < Report.PreparedPages.Count; p++) { if (IsAborted(progress)) break; ExportPage(p); int j = CalcIterations; while (!dataSaved && --j > 0) { if (IsAborted(progress)) break; int i = CalcIterations; float oldX = ScaleX; while (!dataSaved && --i > 0) { if (IsAborted(progress)) break; scaleX += CalculateStep; ExportPage(p); } i = CalcIterations; while (!dataSaved && --i > 0) { if (IsAborted(progress)) break; scaleY += CalculateStep; ExportPage(p); } if (dataSaved && i < CalcIterations) { i = CalcIterations; scaleX = oldX; ExportPage(p); while (!dataSaved && --i > 0) { if (IsAborted(progress)) break; scaleX += CalculateStep; ExportPage(p); } } } if (dataSaved && frames) { int i = CalcIterations; float oldY = scaleY; while (dataSaved && --i > 0) { if (IsAborted(progress)) break; oldY = scaleY; scaleY -= CalculateStepBack; if (scaleY < initY) break; ExportPage(p); } scaleY = oldY; dataSaved = true; i = CalcIterations; float oldX = scaleX; while (dataSaved && --i > 0) { if (IsAborted(progress)) break; oldX = scaleX; scaleX -= CalculateStepBack; if (scaleX < initX) break; ExportPage(p); } scaleX = oldX; dataSaved = true; } initX = scaleX; initY = scaleY; if (j == 0) break; } dataLossBreak = false; previewMode = oldPreviewMode; } #endregion /// /// Initializes a new instance of the class. /// public TextExport() { pageBreaks = true; emptyLines = false; frames = true; textFrames = false; encoding = Encoding.UTF8; dataOnly = false; scaleX = 1.0f; scaleXStart = 1.0f; scaleY = 1.0f; scaleYStart = 1.0f; previewMode = false; dataLossBreak = false; avoidDataLoss = true; printerTypes = new List(); TextExportPrinterType printer = new TextExportPrinterType(); printer.Name = "Epson ESC/P2"; printerTypes.Add(printer); TextExportPrinterCommand command = new TextExportPrinterCommand(); command.Name = "Reset"; command.SequenceOn.Add(27); command.SequenceOn.Add(64); printer.Commands.Add(command); command = new TextExportPrinterCommand(); command.Name = "Normal"; command.SequenceOn.Add(27); command.SequenceOn.Add(120); command.SequenceOn.Add(0); printer.Commands.Add(command); command = new TextExportPrinterCommand(); command.Name = "Pica"; command.SequenceOn.Add(27); command.SequenceOn.Add(120); command.SequenceOn.Add(1); command.SequenceOn.Add(27); command.SequenceOn.Add(107); command.SequenceOn.Add(0); printer.Commands.Add(command); command = new TextExportPrinterCommand(); command.Name = "Elite"; command.SequenceOn.Add(27); command.SequenceOn.Add(120); command.SequenceOn.Add(1); command.SequenceOn.Add(27); command.SequenceOn.Add(107); command.SequenceOn.Add(1); printer.Commands.Add(command); command = new TextExportPrinterCommand(); command.Name = "Condenced"; command.SequenceOn.Add(15); command.SequenceOff.Add(18); printer.Commands.Add(command); command = new TextExportPrinterCommand(); command.Name = "Bold"; command.SequenceOn.Add(27); command.SequenceOn.Add(71); command.SequenceOff.Add(27); command.SequenceOff.Add(72); printer.Commands.Add(command); command = new TextExportPrinterCommand(); command.Name = "Italic"; command.SequenceOn.Add(27); command.SequenceOn.Add(52); command.SequenceOff.Add(27); command.SequenceOff.Add(53); printer.Commands.Add(command); command = new TextExportPrinterCommand(); command.Name = "Wide"; command.SequenceOn.Add(27); command.SequenceOn.Add(87); command.SequenceOn.Add(1); command.SequenceOff.Add(27); command.SequenceOff.Add(87); command.SequenceOff.Add(0); printer.Commands.Add(command); command = new TextExportPrinterCommand(); command.Name = "12cpi"; command.SequenceOn.Add(27); command.SequenceOn.Add(77); command.SequenceOff.Add(27); command.SequenceOff.Add(80); printer.Commands.Add(command); command = new TextExportPrinterCommand(); command.Name = "Linefeed 1/8\""; command.SequenceOn.Add(27); command.SequenceOn.Add(48); printer.Commands.Add(command); command = new TextExportPrinterCommand(); command.Name = "Linefeed 7/72\""; command.SequenceOn.Add(27); command.SequenceOn.Add(49); printer.Commands.Add(command); command = new TextExportPrinterCommand(); command.Name = "Linefeed 1/6\""; command.SequenceOn.Add(27); command.SequenceOn.Add(50); printer.Commands.Add(command); printer = new TextExportPrinterType(); printer.Name = "HP PCL"; printerTypes.Add(printer); command = new TextExportPrinterCommand(); command.Name = "Reset"; command.SequenceOn.Add(27); command.SequenceOn.Add(69); printer.Commands.Add(command); command = new TextExportPrinterCommand(); command.Name = "Landscape"; command.SequenceOn.Add(27); command.SequenceOn.Add(38); command.SequenceOn.Add(108); command.SequenceOn.Add(49); command.SequenceOn.Add(79); command.SequenceOff.Add(27); command.SequenceOff.Add(38); command.SequenceOff.Add(108); command.SequenceOff.Add(48); command.SequenceOff.Add(79); printer.Commands.Add(command); command = new TextExportPrinterCommand(); command.Name = "Italic"; command.SequenceOn.Add(27); command.SequenceOn.Add(40); command.SequenceOn.Add(115); command.SequenceOn.Add(49); command.SequenceOn.Add(83); command.SequenceOff.Add(27); command.SequenceOff.Add(40); command.SequenceOff.Add(115); command.SequenceOff.Add(48); command.SequenceOff.Add(83); printer.Commands.Add(command); command = new TextExportPrinterCommand(); command.Name = "Bold"; command.SequenceOn.Add(27); command.SequenceOn.Add(40); command.SequenceOn.Add(115); command.SequenceOn.Add(51); command.SequenceOn.Add(66); command.SequenceOff.Add(27); command.SequenceOff.Add(40); command.SequenceOff.Add(115); command.SequenceOff.Add(48); command.SequenceOff.Add(66); printer.Commands.Add(command); command = new TextExportPrinterCommand(); command.Name = "Draft EconoMode"; command.SequenceOn.Add(27); command.SequenceOn.Add(40); command.SequenceOn.Add(115); command.SequenceOn.Add(49); command.SequenceOn.Add(81); command.SequenceOff.Add(27); command.SequenceOff.Add(40); command.SequenceOff.Add(115); command.SequenceOff.Add(50); command.SequenceOff.Add(81); printer.Commands.Add(command); command = new TextExportPrinterCommand(); command.Name = "Condenced"; command.SequenceOn.Add(27); command.SequenceOn.Add(40); command.SequenceOn.Add(115); command.SequenceOn.Add(49); command.SequenceOn.Add(50); command.SequenceOn.Add(72); command.SequenceOn.Add(27); command.SequenceOn.Add(38); command.SequenceOn.Add(108); command.SequenceOn.Add(56); command.SequenceOn.Add(68); command.SequenceOff.Add(27); command.SequenceOff.Add(40); command.SequenceOff.Add(115); command.SequenceOff.Add(49); command.SequenceOff.Add(48); command.SequenceOff.Add(72); printer.Commands.Add(command); printer = new TextExportPrinterType(); printer.Name = "Canon/IBM"; printerTypes.Add(printer); command = new TextExportPrinterCommand(); command.Name = "Reset"; command.SequenceOn.Add(27); command.SequenceOn.Add(64); printer.Commands.Add(command); command = new TextExportPrinterCommand(); command.Name = "Normal"; command.SequenceOn.Add(27); command.SequenceOn.Add(120); command.SequenceOn.Add(0); printer.Commands.Add(command); command = new TextExportPrinterCommand(); command.Name = "Pica"; command.SequenceOn.Add(27); command.SequenceOn.Add(48); command.SequenceOn.Add(73); printer.Commands.Add(command); command = new TextExportPrinterCommand(); command.Name = "Elite"; command.SequenceOn.Add(27); command.SequenceOn.Add(56); command.SequenceOn.Add(73); printer.Commands.Add(command); command = new TextExportPrinterCommand(); command.Name = "Condenced"; command.SequenceOn.Add(15); command.SequenceOff.Add(18); printer.Commands.Add(command); command = new TextExportPrinterCommand(); command.Name = "Bold"; command.SequenceOn.Add(27); command.SequenceOn.Add(71); command.SequenceOff.Add(27); command.SequenceOff.Add(72); printer.Commands.Add(command); command = new TextExportPrinterCommand(); command.Name = "Italic"; command.SequenceOn.Add(27); command.SequenceOn.Add(52); command.SequenceOff.Add(27); command.SequenceOff.Add(53); printer.Commands.Add(command); command = new TextExportPrinterCommand(); command.Name = "12cpi"; command.SequenceOn.Add(27); command.SequenceOn.Add(77); command.SequenceOff.Add(27); command.SequenceOff.Add(80); printer.Commands.Add(command); printerType = 0; copies = 1; OpenAfterExport = false; printAfterExport = false; res = new MyRes("Export,Misc"); } } /// /// Represents the printer command class /// public class TextExportPrinterCommand { private List sequenceOn; private List sequenceOff; private string name; private bool active; /// /// Gets or sets the active state of command. Default value is false. /// public bool Active { get { return active; } set { active = value; } } /// /// Gets or sets the command name. /// public string Name { get { return name; } set { name = value; } } /// /// Gets or sets the list of "on sequence". /// public List SequenceOn { get { return sequenceOn; } set { sequenceOn = value; } } /// /// Gets or sets the list of "off sequence". /// public List SequenceOff { get { return sequenceOff; } set { sequenceOff = value; } } /// /// Initializes a new instance of the class. /// public TextExportPrinterCommand() { sequenceOn = new List(); sequenceOff = new List(); active = false; } } /// /// Represents of the printer type class. /// public class TextExportPrinterType { private List commands; private string name; /// /// Gets or sets the printer name. /// public string Name { get { return name; } set { name = value; } } /// /// Gets or sets the list of printer commands. /// public List Commands { get { return commands; } set { commands = value; } } /// /// Initializes a new instance of the class. /// public TextExportPrinterType() { commands = new List(); } } }