Как отправить на печать пробную страницу на принтер с помощью delphi? - PullRequest
4 голосов
/ 05 марта 2011

На самом деле я работаю в проекте, который должен распечатать тестовую страницу на конкретном принтере. тестовая страница должна быть такой же, какая из распечатывается Windows в настройках принтера -> печать тестовой страницы.

Как я могу сделать это в Delphi?

Ответы [ 2 ]

13 голосов
/ 05 марта 2011

Этот код распечатает тестовую страницу для принтера по умолчанию:

uses ShellAPI, printers;
{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
var
  Device, Driver, Port: Array [0..255] of Char;
  hDevMode: THandle;
begin
  Printer.GetPrinter(Device, Driver, Port, hDevmode);
  ShInvokePrinterCommand(handle, PRINTACTION_TESTPAGE, Device, nil, true );
end;

Результат: Printer test page

Наслаждайтесь:)

6 голосов
/ 05 марта 2011

Вы можете использовать метод PrintTestPage из класса Win32_Printer wmi

проверить этот образец

{$APPTYPE CONSOLE}

uses
  SysUtils,
  ActiveX,
  ComObj;

procedure  PrintTestPage(const PrinterName:string);
var
  FSWbemLocator : OLEVariant;
  FWMIService   : OLEVariant;
  FWbemObjectSet: OLEVariant;
  FWbemObject   : OLEVariant;
  oEnum         : IEnumvariant;
  iValue        : LongWord;
  PrintResult   : Integer;
begin;
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService   := FSWbemLocator.ConnectServer('localhost', 'root\CIMV2', '', '');
  FWbemObjectSet:= FWMIService.ExecQuery(Format('SELECT * FROM Win32_Printer Where Name="%s"',[PrinterName]),'WQL',0);
  oEnum         := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
  if oEnum.Next(1, FWbemObject, iValue) = 0 then
  begin
    PrintResult:=FWbemObject.PrintTestPage;
    if PrintResult=0 then
     Writeln('Success')
    else
     Writeln('An error occurred');
  end;
end;


begin
 try
    CoInitialize(nil);
    try
      PrintTestPage('MyPrinter');
    finally
      CoUninitialize;
    end;
 except
    on E:Exception do
        Writeln(E.Classname, ':', E.Message);
 end;

 Readln;
end.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...