using System; using System.Drawing; using System.Text; using System.Windows.Forms; using FastReport.Export; using FastReport.Export.Text; using FastReport.Utils; using System.Globalization; using System.IO; namespace FastReport.Forms { /// /// Form for . /// For internal use only. /// public partial class TextExportForm : BaseExportForm { private TextExport previewExport; private Report report; private int prevPage; /// public override void Init(ExportBase export) { base.Init(export); TextExport textExport = Export as TextExport; report = textExport.Report; ProfessionalColorTable vs2005ColorTable = new ProfessionalColorTable(); vs2005ColorTable.UseSystemColors = true; toolStrip.Renderer = new ToolStripProfessionalRenderer(vs2005ColorTable); cbPageBreaks.Checked = textExport.PageBreaks; cbEmptyLines.Checked = textExport.EmptyLines; if (textExport.Frames && textExport.TextFrames) cbbFrames.SelectedIndex = 1; else if (textExport.Frames && !textExport.TextFrames) cbbFrames.SelectedIndex = 2; else cbbFrames.SelectedIndex = 0; cbDataOnly.Checked = textExport.DataOnly; if (textExport.Encoding == Encoding.Default) cbbCodepage.SelectedIndex = 0; else if (textExport.Encoding == Encoding.UTF8) cbbCodepage.SelectedIndex = 1; else if (textExport.Encoding == Encoding.GetEncoding(CultureInfo.CurrentCulture.TextInfo.OEMCodePage)) cbbCodepage.SelectedIndex = 2; udX.Value = (decimal)textExport.ScaleX; udY.Value = (decimal)textExport.ScaleY; udX.ValueChanged += new EventHandler(udX_ValueChanged); udY.ValueChanged += new EventHandler(udX_ValueChanged); cbbFrames.SelectedIndexChanged += new EventHandler(cbbFrames_SelectedIndexChanged); tbPage.Text = "1"; prevPage = 1; lblTotalPages.Text = String.Format(Res.Get("Misc,ofM"), report.PreparedPages.Count); cbFontSize.SelectedIndex = 4; previewExport = new TextExport(); previewExport.PreviewMode = true; CalcScale(); } /// public override void Localize() { base.Localize(); MyRes res = new MyRes("Export,Text"); Text = res.Get(""); lblFrames.Text = res.Get("Frames"); cbEmptyLines.Text = res.Get("EmptyLines"); cbDataOnly.Text = res.Get("DataOnly"); cbbFrames.Items[0] = res.Get("FramesNone"); cbbFrames.Items[1] = res.Get("FramesText"); cbbFrames.Items[2] = res.Get("FramesGraphic"); lblCodepage.Text = res.Get("Codepage"); cbbCodepage.Items[0] = res.Get("Default"); cbbCodepage.Items[1] = res.Get("Unicode"); cbbCodepage.Items[2] = res.Get("OEM"); lblX.Text = res.Get("ScaleX"); lblY.Text = res.Get("ScaleY"); btnCalculate.Text = res.Get("AutoScale"); lblLoss.Text = res.Get("DataLoss"); lblPageWidth.Text = res.Get("PageWidth"); lblPageHeight.Text = res.Get("PageHeight"); gbScale.Text = res.Get("Scale"); res = new MyRes("Export,Misc"); gbOptions.Text = res.Get("Options"); cbPageBreaks.Text = res.Get("PageBreaks"); res = new MyRes("Preview"); btnPrint.Text = res.Get("PrintText"); btnPrint.ToolTipText = res.Get("Print"); btnSave.ToolTipText = res.Get("Save"); btnSave.Text = res.Get("SaveText"); btnZoomOut.ToolTipText = Res.Get("Designer,Toolbar,Zoom,ZoomOut"); btnZoomIn.ToolTipText = Res.Get("Designer,Toolbar,Zoom,ZoomIn"); btnFirst.ToolTipText = res.Get("First"); btnPrior.ToolTipText = res.Get("Prior"); lblTotalPages.Text = String.Format(Res.Get("Misc,ofM"), 1); btnNext.ToolTipText = res.Get("Next"); btnLast.ToolTipText = res.Get("Last"); btnClose.Text = Res.Get("Buttons,Close"); } /// public override void UpdateDpiDependencies() { base.UpdateDpiDependencies(); toolStrip.Font = Font; Status.Font = Font; cbFontSize.Size = this.LogicalToDevice(new Size(40, 21)); tbPage.Size = this.LogicalToDevice(new Size(40, 21)); btnPrint.Image = GetImage(195); btnSave.Image = GetImage(2); btnZoomOut.Image = GetImage(193); btnZoomIn.Image = GetImage(192); btnFirst.Image = GetImage(185); btnPrior.Image = GetImage(186); btnNext.Image = GetImage(187); btnLast.Image = GetImage(188); picPerforation.BackgroundImage = this.GetImage("perforation.png"); } private void CalcScale() { TextExport textExport = Export as TextExport; using (ProgressForm progressForm = new ProgressForm(null)) { progressForm.Show(); MyRes res = new MyRes("Export,Text"); progressForm.ShowProgressMessage(res.Get("ScaleMessage")); textExport.EmptyLines = cbEmptyLines.Checked; textExport.Frames = cbbFrames.SelectedIndex != 0; textExport.TextFrames = cbbFrames.SelectedIndex == 1; textExport.DataOnly = cbDataOnly.Checked; textExport.ScaleX = (float)udX.Value; textExport.ScaleY = (float)udY.Value; textExport.CalculateScale(progressForm); udX.Value = (decimal)Math.Round(textExport.ScaleX, 2); udY.Value = (decimal)Math.Round(textExport.ScaleY, 2); } UpdatePreview(); } private void UpdatePreview() { if (previewExport != null) { TextExport textExport = Export as TextExport; int pageNo = int.Parse(tbPage.Text) - 1; using (ReportPage page = textExport.Report.PreparedPages.GetPage(pageNo)) { previewExport.PageBreaks = cbPageBreaks.Checked; previewExport.DataOnly = cbDataOnly.Checked; previewExport.Frames = cbbFrames.SelectedIndex != 0; previewExport.TextFrames = cbbFrames.SelectedIndex == 1; previewExport.EmptyLines = cbEmptyLines.Checked; previewExport.Encoding = GetEncoding(); previewExport.ScaleX = (float)udX.Value; previewExport.ScaleY = (float)udY.Value; previewExport.SetReport(textExport.Report); tbPreview.Text = previewExport.ExportPage(pageNo); lblPageWidthValue.Text = previewExport.PageWidth.ToString(); lblPageHeightValue.Text = previewExport.PageHeight.ToString(); lblLoss.Visible = !previewExport.DataSaved; } } } private Encoding GetEncoding() { Encoding encoding; if (cbbCodepage.SelectedIndex == 0) encoding = Encoding.Default; else if (cbbCodepage.SelectedIndex == 1) encoding = Encoding.UTF8; else if (cbbCodepage.SelectedIndex == 2) encoding = Encoding.GetEncoding(CultureInfo.CurrentCulture.TextInfo.OEMCodePage); else throw new Exception("Unknown encoding"); return encoding; } private void cbPageBreaks_Click(object sender, EventArgs e) { UpdatePreview(); } private void cbbCodepage_SelectedValueChanged(object sender, EventArgs e) { UpdatePreview(); } private void btnCalculate_Click(object sender, EventArgs e) { CalcScale(); } private void tbPage_TextChanged(object sender, EventArgs e) { bool validate = false; try { int i = int.Parse(tbPage.Text); validate = (i > 0 && i <= report.PreparedPages.Count); UpdatePreview(); btnFirst.Enabled = i > 1; btnPrior.Enabled = btnFirst.Enabled; btnNext.Enabled = i < report.PreparedPages.Count; btnLast.Enabled = btnNext.Enabled; } catch { } if (!validate) tbPage.Text = prevPage.ToString(); else prevPage = int.Parse(tbPage.Text); } private void btnClose_Click(object sender, EventArgs e) { DialogResult = DialogResult.Cancel; } private void btnFirst_Click(object sender, EventArgs e) { tbPage.Text = "1"; } private void btnPrior_Click(object sender, EventArgs e) { int i = int.Parse(tbPage.Text); if (i > 1) tbPage.Text = (i - 1).ToString(); } private void btnNext_Click(object sender, EventArgs e) { int i = int.Parse(tbPage.Text); if (i < report.PreparedPages.Count) tbPage.Text = (i + 1).ToString(); } private void btnLast_Click(object sender, EventArgs e) { tbPage.Text = report.PreparedPages.Count.ToString(); } private void cbFontSize_SelectedIndexChanged(object sender, EventArgs e) { tbPreview.Font = new Font(tbPreview.Font.FontFamily, int.Parse(cbFontSize.Text)); } private void btnZoomOut_Click(object sender, EventArgs e) { if (cbFontSize.SelectedIndex > 0) cbFontSize.SelectedIndex--; } private void btnZoomIn_Click(object sender, EventArgs e) { if (cbFontSize.SelectedIndex < cbFontSize.Items.Count - 1) cbFontSize.SelectedIndex++; } private void btnSave_Click(object sender, EventArgs e) { TextExport textExport = new TextExport(); textExport.PageBreaks = cbPageBreaks.Checked; textExport.EmptyLines = cbEmptyLines.Checked; textExport.Frames = cbbFrames.SelectedIndex != 0; textExport.TextFrames = cbbFrames.SelectedIndex == 1; textExport.DataOnly = cbDataOnly.Checked; textExport.Encoding = GetEncoding(); textExport.ScaleX = (float)udX.Value; textExport.ScaleY = (float)udY.Value; textExport.OpenAfterExport = false; textExport.AvoidDataLoss = false; using (SaveFileDialog dialog = new SaveFileDialog()) { dialog.FileName = Path.GetFileNameWithoutExtension(Path.GetFileName(report.FileName)); dialog.Filter = textExport.FileFilter; string defaultExt = dialog.Filter.Split('|')[1]; dialog.DefaultExt = Path.GetExtension(defaultExt); if (dialog.ShowDialog() == DialogResult.OK) { Config.DoEvent(); textExport.Export(report, dialog.FileName); } } } private void udX_ValueChanged(object sender, EventArgs e) { UpdatePreview(); } private void udY_ValueChanged(object sender, EventArgs e) { UpdatePreview(); } private void cbbFrames_SelectedIndexChanged(object sender, EventArgs e) { CalcScale(); } private void btnCalculate_Click_1(object sender, EventArgs e) { CalcScale(); } private void btnPrint_Click(object sender, EventArgs e) { TextExport parentExport = Export as TextExport; TextExport textExport = new TextExport(); using (TextExportPrintForm printDialog = new TextExportPrintForm(textExport)) { textExport.PrinterTypes = parentExport.PrinterTypes; textExport.Copies = parentExport.Copies; printDialog.CurrentPage = tbPage.Text; if (printDialog.ShowDialog() == DialogResult.OK) { if (cbbCodepage.SelectedIndex == 1) cbbCodepage.SelectedIndex = 2; textExport.PageBreaks = cbPageBreaks.Checked; textExport.EmptyLines = cbEmptyLines.Checked; textExport.Frames = cbbFrames.SelectedIndex != 0; textExport.TextFrames = cbbFrames.SelectedIndex == 1; textExport.DataOnly = cbDataOnly.Checked; textExport.Encoding = GetEncoding(); textExport.ScaleX = (float)udX.Value; textExport.ScaleY = (float)udY.Value; textExport.PrintAfterExport = true; textExport.OpenAfterExport = false; textExport.AvoidDataLoss = false; using (MemoryStream memStream = new MemoryStream()) textExport.Export(report, memStream); } } } private void TextExportForm_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Escape) DialogResult = DialogResult.Cancel; else if (e.KeyCode == Keys.PageDown) btnNext_Click(null, null); else if (e.KeyCode == Keys.PageUp) btnPrior_Click(null, null); } private void TextExportForm_Shown(object sender, EventArgs e) { // do not set this property in the .Designer.cs file: // modal dialog form with Maximized state will be displayed on wrong monitor and have scaling issues WindowState = FormWindowState.Maximized; } private void TextExportForm_FormClosing(object sender, FormClosingEventArgs e) { TextExport textExport = Export as TextExport; textExport.PageBreaks = cbPageBreaks.Checked; textExport.EmptyLines = cbEmptyLines.Checked; textExport.Frames = cbbFrames.SelectedIndex != 0; textExport.TextFrames = cbbFrames.SelectedIndex == 1; textExport.DataOnly = cbDataOnly.Checked; textExport.Encoding = GetEncoding(); textExport.ScaleX = (float)udX.Value; textExport.ScaleY = (float)udY.Value; } /// /// Initializes a new instance of the class. /// public TextExportForm() { InitializeComponent(); } } }