ArcGIS Engine - 地图导出

tech2022-10-15  140

本文在 https://blog.csdn.net/eof_2011/article/details/8038602 的基础上对代码进行了优化与改进:

private string path; private double pWidth, pHeight; private IActiveView pActiveView; private AxPageLayoutControl PageLayoutControl; private ProcessBar processBar = new ProcessBar(); public OutputPage(AxPageLayoutControl pageLayoutControl) { InitializeComponent(); PageLayoutControl = pageLayoutControl; pActiveView = pageLayoutControl.ActiveView; UpdatePageSize(); } private void FileSave_Click(object sender, EventArgs e) { SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.Title = "导出地图"; saveFileDialog.Filter = "JPEG (*.jpg)|*.jpg|PNG (*.png)|*.png|GIF (*.gif)|*.gif|TIF (*.tif)|*.tif|BMP (*.bmp)|*.bmp|EMF (*.emf)|*.emf|AI (*.ai)|*.ai|SVG (*.svg)|*.svg"; saveFileDialog.InitialDirectory = Configuration.Environment.WorkPath; if (saveFileDialog.ShowDialog() == DialogResult.OK) { path = saveFileDialog.FileNames.GetValue(0).ToString(); textFile.Text = saveFileDialog.FileName; } } private void simpleOutput_Click(object sender, EventArgs e) { if (textFile.Text != "") { processBar.Show(); ExportTool(); } else { MessageBox.Show("请设置文件保存路径!", "提示"); return; } this.Close(); } private void simpleCancel_Click(object sender, EventArgs e) { this.Close(); } private void ExportTool() { IExport pExport = null; ESRI.ArcGIS.esriSystem.tagRECT userRECT = new ESRI.ArcGIS.esriSystem.tagRECT(); switch (path.Trim().Substring(0, 3)) { case "jpg": pExport = new ExportJPEGClass(); break; case "bmp": pExport = new ExportBMPClass(); break; case "gif": pExport = new ExportGIFClass(); break; case "tif": pExport = new ExportTIFFClass(); break; case "png": pExport = new ExportPNGClass(); break; case "emf": pExport = new ExportEMFClass(); break; case ".ai": pExport = new ExportAIClass(); break; case "svg": pExport = new ExportSVGClass(); break; default: pExport = new ExportJPEGClass(); break; } if (textFile.Text.ToString().Trim() != "") { int lResolution = Convert.ToInt32(txtResolution.Value); pExport.ExportFileName = textFile.Text; pExport.Resolution = lResolution; IExportImage pExportType = pExport as IExportImage; pExportType.ImageType = esriExportImageType.esriExportImageTypeTrueColor; IEnvelope pEnv = new EnvelopeClass(); PageLayoutControl.Page.PrintableBounds.QueryEnvelope(pEnv); userRECT.top = 0; userRECT.left = 0; userRECT.right = (int)pWidth; userRECT.bottom = (int)pHeight; IEnvelope pDriverBounds = new EnvelopeClass(); pDriverBounds.PutCoords(userRECT.left, userRECT.top, userRECT.right, userRECT.bottom ); pExport.PixelBounds = pDriverBounds; ITrackCancel pTrackCancel = new TrackCancelClass(); pActiveView.Output(pExport.StartExporting(), lResolution, ref userRECT, pEnv, pTrackCancel); pExport.FinishExporting(); processBar.Close(); MessageBox.Show("地图导出成功!", "提示", MessageBoxButtons.OK); } else { MessageBox.Show("请设置导出路径!"); } } private void UpdatePageSize() { txtWidth.ReadOnly = true; txtLength.ReadOnly = true; switch (cmbPageSize.Text) { case "布局尺寸": double x, y; PageLayoutControl.Page.QuerySize(out x, out y); showWH(x, y); break; case "A4": showWH(21, 29.7); break; case "A3": showWH(29.7, 42); break; case "A2": showWH(42, 59.4); break; case "A1": showWH(59.4, 84.1); break; case "A0": showWH(84.1, 118.9); break; case "自定义大小": txtWidth.ReadOnly = false; txtLength.ReadOnly = false; txtWidth.Focus(); break; } } private void showWH(double pW, double pH) { if (this.radioButton1.Checked == true) { //计算像素 pWidth = Convert.ToInt32((pW / 2.54) * Convert.ToInt32(txtResolution.Value)); pHeight = Convert.ToInt32((pH / 2.54) * Convert.ToInt32(txtResolution.Value)); this.txtWidth.Text = pWidth.ToString(); this.txtLength.Text = pHeight.ToString(); } else if (this.radioButton2.Checked == true) { //计算厘米 this.txtWidth.Text = pW.ToString(".0"); this.txtLength.Text = pH.ToString(".0"); } else if (this.radioButton3.Checked == true) { //计算英尺 this.txtWidth.Text = Convert.ToDouble(pW / 2.54).ToString(".0"); this.txtLength.Text = Convert.ToDouble(pH / 2.54).ToString(".0"); } } private void txtResolution_ValueChanged(object sender, EventArgs e) { if (txtResolution.Value >= 1) { UpdatePageSize(); } else { MessageBox.Show("请设置分辨率!", "提示"); } } private void cmbPageSize_SelectedValueChanged(object sender, EventArgs e) { if (cmbPageSize.Text != "") { UpdatePageSize(); } else { MessageBox.Show("请设置地图尺寸!", "提示"); } } private void txtWidth_TextChanged(object sender, EventArgs e) { if (txtWidth.ReadOnly == false) { if (IsNumbericA(txtWidth.Text)) { if (this.radioButton1.Checked == true) { pWidth = Convert.ToInt32(txtWidth.Text); } else if (this.radioButton2.Checked == true) { pWidth = Convert.ToInt32(Convert.ToDouble(txtWidth.Text) / 2.54) * Convert.ToInt32(txtResolution.Value); } else { pWidth = Convert.ToInt32(txtWidth.Text) * Convert.ToInt32(txtResolution.Value); } } else { MessageBox.Show("请输入宽度!", "提示"); } } } private void txtLength_TextChanged(object sender, EventArgs e) { if (txtLength.ReadOnly == false) { if (IsNumbericA(txtLength.Text)) { if (this.radioButton1.Checked == true) { pHeight = Convert.ToInt32(txtLength.Text); } else if (this.radioButton2.Checked == true) { pHeight = Convert.ToInt32(Convert.ToDouble(txtLength.Text) / 2.54) * Convert.ToInt32(txtResolution.Value); } else { pHeight = Convert.ToInt32(txtLength.Text) * Convert.ToInt32(txtResolution.Value); } } else { MessageBox.Show("请输入长度!", "提示"); } } } private void radioButton1_CheckedChanged(object sender, EventArgs e) { UpdatePageSize(); } private void radioButton2_CheckedChanged(object sender, EventArgs e) { UpdatePageSize(); } private void radioButton3_CheckedChanged(object sender, EventArgs e) { UpdatePageSize(); } #region 通用函数 /// <summary> /// 是否大于0的数字 /// </summary> /// <param name="v"></param> /// <returns></returns> private bool IsNumbericA(string v) { return ((this.IsIntegerA(v)) || (this.IsFloatA(v))); } /// <summary> /// 是否正浮点数 /// </summary> /// <param name="v"></param> /// <returns></returns> private bool IsFloatA(string v) { string pattern = @"^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$"; Regex reg = new Regex(pattern); return reg.IsMatch(v); } /// <summary> /// 是否正整数 /// </summary> /// <param name="v"></param> /// <returns></returns> private bool IsIntegerA(string v) { string pattern = @"^[0-9]*[1-9][0-9]*$"; Regex reg = new Regex(pattern); return reg.IsMatch(v); } #endregion
最新回复(0)