delphi - 直接将字符串打印到打印机

标签 delphi printing delphi-xe6

我需要将字符串直接打印到打印机
我通过搜索找到了这段代码

uses WinSpool, Printers

type
  TDoc_Info_1 = record
    pDocName: pChar;
    pOutputFile: pChar;
    pDataType: pChar;
  end;


procedure PrintSimpleText(sPrinter, sText: String);
var
  sTitle: String;
  hPrinter: THandle;
  PrnDocInfo: TDoc_Info_1;
  lst: TStringList;
  i: Integer;
  n: Cardinal;
  sTextLine: String;
  bFound: Boolean;
begin
  lst := TStringList.Create;
  try
    lst.Text := sText; //with CRLF
    //new doc
    sTitle := 'Raw print';
    ZeroMemory(@PrnDocInfo, SizeOf(TDoc_Info_1));
    PrnDocInfo.pDocName := PChar(sTitle);
    PrnDocInfo.pDataType := 'RAW';
    //find printer (if is installed in windows)
    bFound := False;
    for i:=1 to Printer.Printers.Count do
    begin
      if Pos(sPrinter, Printer.Printers.Strings[i-1])>0 then
      begin
        bFound := True;
        sPrinter := Printer.Printers.Strings[i-1];
        Printer.PrinterIndex := i-1; //set printer
        Break;
      end;
    end;

    if bFound then
    begin
      // open the printer
      if OpenPrinter(PChar(sPrinter), hPrinter, nil) then
      begin
        //start
        StartDocPrinter(hPrinter, 1, @PrnDocInfo);
        if StartPagePrinter(hPrinter) then
        begin
          //print by line
          for i := 1 to lst.Count do
          begin
            sTextLine := lst.Strings[i-1];
            if not WritePrinter(hPrinter, PChar(sTextLine), Length(sTextLine), n) then
              Break;
          end;
          //end of page
          EndPagePrinter(hPrinter);
          //end
          EndDocPrinter(hPrinter);
        end;
        ClosePrinter(hPrinter);
      end;
    end;
  finally
    lst.Free;
  end;
end;

这样运行:

procedure TForm1.Button1Click(Sender: TObject);
begin
  PrintSimpleText('pdfFactory Pro', 'Tis is a'#13#10'text');
  showmessage('aaaa');
end;

1) 但点击 Button1 它只会显示一条消息! 是否需要发送带有字符串的自定义 header 以供打印? 或者这里有什么问题?

2) 另外,如果您认为这不是一个好方法,请告诉我更好的解决方案!我需要向打印机提交这样的字符串

------------------------------------------------------
      your card number is 1111 1111 1111 1111
           your name is mr xxxx xxxxxxx
        your nationality code is 9999999999
------------------------------------------------------
              your password is : 555555
-----------------------------------------------------

起初我尝试将字符串保存到文本文件中并将其发送到 pronter,但打印机在文件顶部打印了文件名

然后我尝试创建一个位图图像并将其发送到机器 但打印机是点阵的,看不懂图像!!

更新:

这段代码在我的电脑上完美运行 我认为打印机已被检测到并且工作正常。

procedure TForm1.Button2Click(Sender: TObject);
begin
if OpenDialog1.Execute then
ShellExecute(Handle, 'print', PChar(OpenDialog1.FileName), nil, nil, SW_HIDE) ;
end;

最佳答案

示例如何将一些文本直接写入默认打印机(如文本文件)。

uses ..., Printers;

...

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  lst: TextFile;
begin
  AssignPrn(lst);
  Rewrite(lst);
  try
    Writeln(lst, '      your card number is 1111 1111 1111 1111');
    Writeln(lst, '           your name is mr xxxx xxxxxxx');
    Writeln(lst, '        your nationality code is 9999999999');
    Writeln(lst, '------------------------------------------------------');
  finally
    CloseFile(lst);
  end;
end;

对于矩阵打印机特别有用。

关于delphi - 直接将字符串打印到打印机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25371291/

相关文章:

delphi - 编译器提示 : "Inline function ' . 。 .' has not been expanded..."

delphi - 当参数类型为开放Char数组时,是否允许使用动态Char数组?

android - Delphi 10 - 在 Android 上执行命令行并实时获取输出

html - 如何让 IE 在打印时显示所有背景图像?

ios - 按用户定义的标准对列表框进行排序 - delphi xe6

delphi - 鼠标悬停(类似提示)delphi

delphi - 如何从 Delphi 中的 TClientDataset 获取新的字段值?

delphi - 如何刷新 VirtualStringTree 中的垂直滚动条?

java - 有没有办法让这个 "send to printer"Java 方法起作用?

python - Python print 使用哪个函数?