首页>学校动态>邯郸万博网络教育学校-在Delphi中打印各种已知类型的文件

邯郸万博网络教育学校-在Delphi中打印各种已知类型的文件

来源:邯郸万博网络教育学校时间:2013/5/9 14:04:36

 大多数文档是面向应用的,如微软的Word,MS Excel或Adobe,“知道”如何打印文件。例如,Word文本保存DOC扩展名的文档里面。由Word(微软)决定doc文件的原始的内容,它知道如何打印doc文件。这同样适用于任何有可打印信息的已知类型的文件。

如果你需要从你的应用打印不同类型文件,你能知道如何传送文件,以便打印机能正确打印?我想答案是否定的。至少我不知道:)

Delphi打印任何类型的文件(PDF,文档,xls,HTML格式,RTF格式,docx)

那么,你如何用Delphi代码编程打印任何类型的文档?

嗯,我想我们应该问windows:应用程序如何打印? 例如,一个PDF文件。甚至我们应该告诉到Windows更多:这里有一个PDF文件,发送到

PDF文件关联的的打印程序。

打开Windows资源管理器,浏览一个包含了一些可打印的文件的目录,当您右键单击在Windows资源管理器中的文件时,大部分时间,你会找到“打印”命令。执行这个shell打印命令,文件被发送到默认打印机打印。

嗯,这正是我们想要的 - 一个文件类型,调用一个方法,将文件发送到相关的应用程序进行打印。

我们所寻找的功能就是ShellExecute的API函数。
 
ShellExecute: Print / PrintTo
 
简单的,让您可以编程调用ShellExecute启动任何应用程序/打开任何在用户的计算机上安装的文件。

然而,ShellExecute可以做更多。 ShellExecute可用于启动应用程序,打开Windows资源管理器,启动一个指定的目录中搜索的开始 -

,什么是重要的,我们现在:打印指定的文件。


指定 ShellExecute / Print 的打印机

以下是使用ShellExecute函数如何打印文件:

 ShellExecute(Handle, 'print', PChar('c:\document.doc'), nil, nil, SW_HIDE) ;
 

请注意第二个参数:“print”。

使用上面的调用,一个在C盘的根目录的文件“document.doc”将被发送到Windows默认打印机。

ShellExecute对于"print"操作总是使用默认打印机。


如果你需要打印到不同的打印机,你想允许用户更改打印机吗?
 
PrintTo Shell命令

有些应用程序支持'printto操作。 PrintTo可用于指定打印操作中使用的打印机的名称。

打印机有3个参数:打印机名称,驱动器的名称和端口。


以编程方式打印文件


好了,有了足够的理论。现在时真正的写代码的时间了:

复制和粘贴前:Printer全局变量(TPrinter类型)为所有Delphi程序管理打印任务。

printer是在“printers”文件中定义,ShellExecute是在“shellapi”文件中定义。

    拖放一个TComboBox到窗体上。将它命名为“cboPrinter”。设置样式为csDropDownLidt 
    把下面两行的代码加到窗体的OnCreate事件处理程序中:

   //在combobox中填写有效的打印机的名称
   cboPrinter.Items.Assign(printer.Printers);

   //指定默认打印机
   cboPrinter.ItemIndex := printer.PrinterIndex;
     

现在,您可以使用下面的程序在指定的打印机上打印任何类型的文件:

 uses shellapi, printers;
 
 procedure PrintDocument(const documentToPrint : string) ;
 var
 printCommand : string;
 printerInfo : string;
 Device, Driver, Port: array[0..255] of Char;
 hDeviceMode: THandle;
 begin
 
 if Printer.PrinterIndex = cboPrinter.ItemIndex then
 begin
 printCommand := 'print';
 printerInfo := '';
 end
 else
 begin
 printCommand := 'printto';
 Printer.PrinterIndex := cboPrinter.ItemIndex;
 Printer.GetPrinter(Device, Driver, Port, hDeviceMode) ;
 printerInfo := Format('"%s" "%s" "%s"', [Device, Driver, Port]) ;
 end;
 
 ShellExecute(Application.Handle, PChar(printCommand), PChar(documentToPrint), PChar(printerInfo), nil, SW_HIDE) ;
 end;
注意:如果所选的打印机是默认的,程序使用“print”操作。如果所选的打印机不是默认的,程序使用“printo”的操作。

请注意,另外:某些文件类型没有关联的应用程序进行打印。有些不具备“printto”操作。


邯郸万博网络教育学校,开设有专业的邯郸软件开发培训,邯郸网站开发培训,邯郸幼师培训等。


上一页 下一页

推荐课程更多>

申请体验课

关于我们 | 联系我们 | 邯郸万博网络教育学校

版权所有:培训指南

  • 在线咨询
  • 电话咨询
  • 预约试听