LeadTools中文入门教程(3):打印图像

发布时间:2014/09/02 00:09 发布者:Linda

返回博客中心

  • LeadTools中文入门教程(1):加载、显示和保存图像 点击进入
  • LeadTools中文入门教程(2):缩放图像 点击进入
  • LeadTools中文入门教程(3):打印图像 点击进入
  • LeadTools中文入门教程(4):使用OCR识别英文 点击进入
  • LeadTools中文入门教程(5):读取和编写条形码 点击进入
  • LeadTools中文入门教程(6):从TWAIN源获取图像 点击进入
  • LeadTools中文入门教程(7):使用OCR识别图像中的中文 点击进入
  • LeadTools中文入门教程(8):使用OCR识别扫描文件中的中文 点击进入

LeadTools图像处理开发工具,在医学DICOMPACS、栅格、矢量多媒体图像处理领域都处于世界领先的地位。LeadTools包括Raster ImagingDocument ImagingMedical ImagingMultimedia Imaging四个产品系列。

下面就让我们使用LeadTools创建一个具有“打印图像”功能的应用程序,具体步骤如下:

1. 打开Visual Studio .NET。

2. 点击 文件->新建->项目…。

3. 打开新建项目对话框后,在模板中选择“Visual C#”或“Visual Basic”,随后选择“Windows窗体应用程序”。在名称栏中输入项目名称“PrintImageTutorial”,并使用“浏览”按钮选择您工程的存储路径,点击“确定”。

4. 在“解决方案资源管理器”中,右击“引用”,选择“添加引用”。在“引用管理器”中,浏览选择Leadtools For .NET文件夹” <LEADTOOLS_INSTALLDIR>\Bin\DotNet\Win32”,选择以下的DLL:

  • Leadtools.dll
  • Leadtools.Codecs.dll
  • Leadtools.WinForms.dll
  • Leadtools.Codecs.Bmp.dll
  • Leadtools.Codecs.Cmp.dll
  • Leadtools.Codecs.Fax.dll
  • Leadtools.Codecs.Tif.dll

点击“确定”按钮,将以上所有的DLL添加到应用程序中。

以上的引用允许您使用BMPJPGTIF文件。如果您想使用更多的文件格式,可参考帮助文档Files To Be Included With Your ApplicationFile Formats部分。

5.由于我们将使用Win32(x86)程序集引用,因此我们必须将这个项目的build目标改为x86。选择

项目->PrintImageTutorial 属性,按照以下步骤设置:

  • 若为C#工程,选择生成选项栏,在配置下拉框选择“所有配置”,在目标平台下拉框选择“x86” 。
  • 若为VB工程,选择编译选项卡,在配置下拉框选择“所有配置”。点击高级编译选项按钮,在目标CPU中选择x86。点击确定关闭对话框。

6.将Form1调整到设计视图,从工具箱(视图->工具箱)拖拽一个MenuStrip控件到窗体。点击新的menuStrip1控件,添加以下顶级菜单项:

类型

Name

Text

Shortcut Keys

ToolStripMenuItem

fileToolStripMenuItem

文件

ToolStripMenuItem

pageToolStripMenuItem

页面

ToolStripMenuItem

optionsToolStripMenuItem

选项

7. 选择“文件”菜单项添加以下子项:

类型

Name

Text

Shortcut Keys

ToolStripMenuItem

openToolStripMenuItem

打开...

Ctrl+O

ToolStripSeparator

toolStripMenuItem1

ToolStripMenuItem

printPreviewToolStripMenuItem

打印预览

ToolStripMenuItem

printSetupToolStripMenuItem

打印设置...

ToolStripMenuItem

printToolStripMenuItem

打印...

Ctrl+P

ToolStripSeparator

toolStripMenuItem2

ToolStripMenuItem

exitToolStripMenuItem

退出

8. 选择“页面”菜单项添加以下子项:

类型

Name

Text

Shortcut Keys

ToolStripMenuItem

firstPageToolStripMenuItem

首页

ToolStripMenuItem

previousPageToolStripMenuItem

上一页

ToolStripMenuItem

nextPageToolStripMenuItem

下一页

ToolStripMenuItem

lastPageToolStripMenuItem

尾页

9. 选择“选项”菜单项添加以下子项:

类型

Name

Text

Shortcut Keys

ToolStripMenuItem

usePageMarginsToolStripMenuItem

使用页边距

ToolStripMenuItem

fitImageToPageToolStripMenuItem

调整图像适应页面

 

1

10. 从工具箱(视图->工具箱)拖拽一个RasterImageViewer实例至窗体。若您的工具箱没有RasterImageViewer,点击工具->选择工具箱项…。点击浏览从“<LEADTOOLS_INSTALLDIR>\Bin\DotNet\Win32”中选择Leadtools.WinForms.DLL,点击打开并确定。修改“RasterImageViewer”的以下属性:

属性

Dock

Fill

UseDpi

True

11. 切换至Form1的代码视图(右击Form1,选择查看代码),将下面几行代码添加到文件开始处:

  1: [C#]
  2: 
  3:       using System.Drawing.Printing;
  4:       using Leadtools;
  5:       using Leadtools.Codecs;
  6:       using Leadtools.WinForms;

 

12. 为Form1添加以下私有变量:

  1: [C#]
  2:      //加载图像时使用的 RasterCodecs 对象             
  3:      private RasterCodecs _rasterCodecs;
  4:      //整个演示中我们会用到的 PrintDocument 对象
  5:      private PrintDocument _printDocument;
  6:      //当前要打印的页码          
  7:      private int _currentPrintPageNumber;
  8:      //当前的图像文件名称
  9:      private string _currentImageFileName;
 

13. 为Form1添加以下代码:

  1: [C#]
  2: 
  3: protected override void OnLoad(EventArgs e)
  4: {
  5:      // 在加载图像时初始化 RasterCodecs 对象
  6:      this._rasterCodecs = new RasterCodecs();
  7:              
  8:      // 检查是否安装打印机                
  9:      if(PrinterSettings.InstalledPrinters == null || PrinterSettings.InstalledPrinters.Count < 1)
 10:      {
 11:          MessageBox.Show(this,"此机器上未安装打印机,此程序无法继续运行","打印图像演示",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
 12:          this.Close();
 13:      }
 14:      else
 15:      {
 16:          //创建我们将要使用的print document对象                   
 17:          this._printDocument = new PrintDocument();
 18:          //为打印事件添加句柄                   
 19:          this._printDocument.BeginPrint += new PrintEventHandler(_printDocument_BeginPrint);
 20:          this._printDocument.PrintPage += new PrintPageEventHandler(_printDocument_PrintPage);
 21:          this._printDocument.EndPrint += new PrintEventHandler(_printDocument_EndPrint);
 22:      }
 23:              
 24:      base.OnLoad(e);
 25: }
 26:              
 27: protected override void OnFormClosed(FormClosedEventArgs e)
 28: {
 29:      //释放我们使用的资源             
 30:      if(this._printDocument != null)
 31:      {
 32:           this._printDocument.Dispose();
 33:      }
 34:      if(this._rasterCodecs != null)
 35:      {
 36:           this._rasterCodecs.Dispose();
 37:      }
 38:          base.OnFormClosed(e);
 39:  }

 

14. 将下列代码添加到fileToolStripMenuItem菜单项的DropDownOpening事件:

  1: [C#]
  2: 
  3: private void fileToolStripMenuItem_DropDownOpening(object sender, EventArgs e)
  4: {
  5:     //更新UI状态
  6:     printPreviewToolStripMenuItem.Enabled = (rasterImageViewer1.Image != null);
  7:     printToolStripMenuItem.Enabled = (rasterImageViewer1.Image != null);
  8: }

 

15.     为openToolStripMenuItem按钮添加Click事件:

  1: [C#]
  2: 
  3: private void openToolStripMenuItem_Click(object sender, EventArgs e)
  4: { 
  5:       //将图像加载至查看器
  6:       using(OpenFileDialog dlg = new OpenFileDialog())
  7:       {
  8:             dlg.Filter = "All Files|*.*";
  9:             if(dlg.ShowDialog(this) == DialogResult.OK)
 10:             {
 11:                   try
 12:                   {
 13:                         //加载文件中的所有页面                       
 14:                         rasterImageViewer1.Image = this._rasterCodecs.Load(dlg.FileName);
 15:                         this._currentImageFileName = dlg.FileName;
 16:                         UpdateCaption();
 17:                   }
 18:                   catch(Exception ex)
 19:                   {
 20:                         MessageBox.Show(this, ex.Message, "打印图像演示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
 21:                   }
 22:             }
 23:       }
 24: }

 

16.     添加以下代码至printPreviewToolStripMenuItem菜单项的Click事件:

  1: [C#]
  2: 
  3: private void printPreviewToolStripMenuItem_Click(object sender, EventArgs e)
  4: {
  5:       //设置打印文档
  6:       SetupPrintDocument();
  7:              
  8:       // 使用 .NET PrintPreviewDialog
  9:       using(PrintPreviewDialog dlg = new PrintPreviewDialog())
 10:       {
 11:             // 显示对话框
 12:             dlg.Document = this._printDocument;
 13:             dlg.WindowState = FormWindowState.Maximized;
 14:             dlg.ShowDialog(this);
 15:       }
 16: }

 

17.     将以下代码添加到printSetupToolStripMenuItem菜单项的Click事件中:

  1: [C#]
  2: 
  3: private void printSetupToolStripMenuItem_Click(object sender, EventArgs e)
  4: {
  5:        // 使用.NET PageSetupDialog
  6:        using(PageSetupDialog dlg = new PageSetupDialog())
  7:        {
  8:               dlg.Document = this._printDocument;
  9:               dlg.ShowDialog(this);
 10:        }
 11: }
 
 
18.     将以下代码添加到printToolStripMenuItem菜单项的Click事件中:
 
  1: [C#]
  2: 
  3: private void printToolStripMenuItem_Click(object sender, EventArgs e)
  4: {
  5:       //用户可能会使用快捷键,因此即使我们禁用了菜单项,也需要检查打印状态是否可用  
  6:       if(rasterImageViewer1.Image == null)
  7:       {
  8:             return;
  9:       }
 10:              
 11:       // 显示打印预览对话框,然后直接打印
 12:              
 13:       // 设置打印文档
 14:       SetupPrintDocument();
 15:              
 16:       this._printDocument.Print();
 17: }
 
19.     将以下代码添加到exitToolStripMenuItem菜单项的Click事件中:
 
  1: [C#]
  2: 
  3: private void exitToolStripMenuItem_Click(object sender, EventArgs e)
  4: {
  5:       // 关闭应用程序
  6:       Close();
  7: }
 
20.     将以下代码添加到pageToolStripMenuItem菜单项的DropDownOpening事件中
 
  1: [C#]
  2: 
  3: private void pageToolStripMenuItem_DropDownOpening(object sender, EventArgs e)
  4: {
  5:       // 更新UI 状态
  6:       firstPageToolStripMenuItem.Enabled = (rasterImageViewer1.Image != null && rasterImageViewer1.Image.Page > 1);
  7:       previousPageToolStripMenuItem.Enabled = firstPageToolStripMenuItem.Enabled;
  8:       nextPageToolStripMenuItem.Enabled = (rasterImageViewer1.Image != null && rasterImageViewer1.Image.Page < rasterImageViewer1.Image.PageCount);
  9:       lastPageToolStripMenuItem.Enabled = nextPageToolStripMenuItem.Enabled;
 10: }

 

21.     将以下代码添加到firstPageToolStripMenuItem菜单项的Click事件中:

  1: [C#]
  2: private void firstPageToolStripMenuItem_Click(object sender, EventArgs e)
  3: {
  4:       //转到图像的首页
  5:       rasterImageViewer1.Image.Page = 1;
  6:       UpdateCaption();
  7: }

 

22.     将以下代码添加到previousPageToolStripMenuItem菜单项的Click事件中:

  1: [C#]
  2: 
  3: private void previousPageToolStripMenuItem_Click(object sender, EventArgs e)
  4: {
  5:       // 转到图像的上一页
  6:       rasterImageViewer1.Image.Page--;
  7:       UpdateCaption();
  8: }
 
23.     将以下代码添加到nextPageToolStripMenuItem菜单项的Click事件中:
 
  1: [C#]
  2: 
  3: private void nextPageToolStripMenuItem_Click(object sender, EventArgs e)
  4: {
  5:       // 转到图像的下一页
  6:       rasterImageViewer1.Image.Page++;
  7:       UpdateCaption();
  8: }
 
24.     将以下代码添加到lastPageToolStripMenuItem菜单项的Click事件中:
 
  1: [C#]
  2: private void lastPageToolStripMenuItem_Click(object sender, EventArgs e)
  3: {
  4:       // 转到图像的尾页
  5:       rasterImageViewer1.Image.Page = rasterImageViewer1.Image.PageCount;
  6:       UpdateCaption();
  7: }
 
25.     将以下代码添加到usePageMarginsToolStripMenuItem菜单项的Click事件中:
 
  1: [C#]
  2: 
  3: private void usePageMarginsToolStripMenuItem_Click(object sender, EventArgs e)
  4: {
  5:       // 切换选项
  6:       usePageMarginsToolStripMenuItem.Checked = !usePageMarginsToolStripMenuItem.Checked;
  7: }
 
26.     将以下代码添加到fitImageToPageToolStripMenuItem菜单项的Click事件
 
  1: [C#]
  2: 
  3: private void fitImageToPageToolStripMenuItem_Click(object sender, EventArgs e)
  4: {
  5:       // 切换选项
  6:       fitImageToPageToolStripMenuItem.Checked = !fitImageToPageToolStripMenuItem.Checked;
  7: }

 

27. 将以下代码添加到Form1:

  1: [C#]
  2: 
  3: private void UpdateCaption()
  4: {
  5:       //更新演示的标题,显示加载的图像文件名字和当前页码                
  6:       if(rasterImageViewer1.Image != null)
  7:       {
  8:             Text = string.Format(
  9:             "{0} - 第 {1} 页 (共 {2} 页) - 打印图像演示",
 10:             this._currentImageFileName,
 11:             rasterImageViewer1.Image.Page,
 12:             rasterImageViewer1.Image.PageCount);
 13:       }
 14:       else
 15:       {
 16:             Text = "打印图像演示";
 17:       }
 18: }
 19:              
 20: private void SetupPrintDocument()
 21: {
 22:       //在打印预览前或打印前调用,用于设置文档             
 23:       //最小值/最大值 为图像的页面数                
 24:       this._printDocument.PrinterSettings.MinimumPage = 1;
 25:       this._printDocument.PrinterSettings.MaximumPage = rasterImageViewer1.Image.PageCount;
 26:              
 27:       //默认打印所有页面
 28:       this._printDocument.PrinterSettings.FromPage = this._printDocument.PrinterSettings.MinimumPage;
 29:       this._printDocument.PrinterSettings.ToPage = this._printDocument.PrinterSettings.MaximumPage;
 30:              
 31:       //设置文档名字
 32:       this._printDocument.DocumentName = this._currentImageFileName;
 33: }
 34:              
 35: private void _printDocument_BeginPrint(object sender, PrintEventArgs e)
 36: {
 37:       // 重置页码为首页
 38:       this._currentPrintPageNumber = 1;
 39: }
 40:              
 41: private void _printDocument_PrintPage(object sender, PrintPageEventArgs e)
 42: {
 43:       // 打印一页
 44:              
 45:       // 获取print document 对象
 46:       PrintDocument document = sender as PrintDocument;
 47:              
 48:       // 创建一个新的LEADTOOLS image printer类
 49:       RasterImagePrinter printer = new RasterImagePrinter();
 50:              
 51:        //设置 document 对象以便进行页面计算
 52:       printer.PrintDocument = document;
 53:              
 54:       //检查我们是否想要使图像适应
 55:       if(fitImageToPageToolStripMenuItem.Checked)
 56:       {
 57:             //若为Yes, 将图像调整到最大打印区域并居中
 58:             printer.SizeMode = RasterPaintSizeMode.FitAlways;
 59:             printer.HorizontalAlignMode = RasterPaintAlignMode.Center;
 60:             printer.VerticalAlignMode = RasterPaintAlignMode.Center;
 61:       }
 62:       else
 63:       {
 64:             //若为No, 正常打印 (原始大小)
 65:             printer.SizeMode = RasterPaintSizeMode.Normal;
 66:             printer.HorizontalAlignMode = RasterPaintAlignMode.Near;
 67:             printer.VerticalAlignMode = RasterPaintAlignMode.Near;
 68:       }
 69:              
 70:       // 考虑具有不同水平和垂直分辨率的传真图像
 71:       printer.UseDpi = true;
 72:              
 73:       // 打印整个图像
 74:       printer.ImageRectangle = Rectangle.Empty;
 75:              
 76:       //使用最大页面维度,这和使用Windows照片库打印等效                
 77:       printer.PageRectangle = RectangleF.Empty;
 78:       //无论我们是否要忽略页边距,都会通知打印机
 79:       printer.UseMargins = usePageMarginsToolStripMenuItem.Checked;
 80:              
 81:       // 打印当前页
 82:       printer.Print(rasterImageViewer1.Image, this._currentPrintPageNumber, e);
 83:              
 84:       // 转到下一页
 85:       this._currentPrintPageNumber++;
 86:              
 87:       //无论我们是否要打印更多的页面,都通知打印机                
 88:       if(this._currentPrintPageNumber <= document.PrinterSettings.ToPage)
 89:       {
 90:             e.HasMorePages = true;
 91:       }
 92:       else
 93:       {
 94:             e.HasMorePages = false;
 95:       }
 96: }
 97:              
 98: private void _printDocument_EndPrint(object sender, PrintEventArgs e)
 99: {
100:       //此教程中此处不执行任何操作
101: }

 

28. 编译并运行程序。结果如下图所示。

提醒:若您遇到"Invalid File Format" 或"Feature Not Supported"异常,请查阅参考文档Invalid File Format/Feature Not Supported.

 

2

 

3 

DEMO下载:

 

本文Demo提供了使用LeadTools打印图像的全部代码。为了运行Demo代码,你需要下载LeadTools全功能试用版

 

LeadTools试用版下载

了解LeadTools产品更多特性

若您在使用LeadTools的过程中遇到任何问题,欢迎在葡萄城开发者社区LeadTools板块提问,我们的专业技术团队期待您的到来!

点击查看更多LeadTools使用教程、博文


关于葡萄城

赋能开发者!葡萄城是专业的集开发工具、商业智能解决方案、低代码开发平台于一身的软件和服务提供商,为超过 75% 的全球财富 500 强企业提供服务。葡萄城专注控件软件领域30年,希望通过模块化的开发控件、灵活的低代码应用开发平台等一系列开发工具、解决方案和服务,帮助开发者快速响应复杂多变的业务需求,最大程度地发挥开发者的才智和潜能,让开发者的 IT 人生更从容更美好。

了解详情,请访问葡萄城官网