【问题标题】:How to print a PDF file from TWebBrowser with a background process?如何使用后台进程从 TWebBrowser 打印 PDF 文件?
【发布时间】:2021-09-06 14:46:12
【问题描述】:

我在TWebBrowser 中有一个 HTML 文档。我需要将此文档转换为 PDF 文件并将其作为邮件附件发送。我找到的方法是使用 PDF 打印机打印TWebBrowser 内容。有没有办法在不显示对话框的情况下始终使用 PDF 打印机(后台进程)?考虑到该功能由 3 台计算机使用,并且并非所有计算机都默认设置相同的打印机。

我目前正在使用此代码,但我遇到了问题,因为计算机没有相同的打印机索引

procedure TfmNavegador.btnImprimirClick(Sender: TObject);
const
  OLECMDID_PRINT               = $00000006;
  OLECMDEXECOPT_PROMPTUSER     = $00000001;
var
vIn, vOut: OleVariant;
begin
  wbNotificacion.ControlInterface.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER, vIn, vOut) ;
end;

【问题讨论】:

  • 如果您不想显示打印对话框,那么您应该使用OLECMDEXECOPT_DONTPROMPTUSE 作为第二个参数,而不是您当前使用的OLECMDEXECOPT_PROMPTUSER。您可以在this 文章中阅读有关使用 TWebBrowser 打印的更多信息。但我不确定是否可以选择特定的打印机来执行此操作。

标签: delphi delphi-7


【解决方案1】:

这样好吗?

您可以让每台计算机都配置为默认打印机,或者输入打印机的索引或只选择一次然后自动设置,如下面的代码:

// Unit
Uses Vcl.Printers;



procedure TfmNavegador.btnImprimirClick(Sender: TObject);
const
  OLECMDID_PRINT               = $00000006;
  OLECMDEXECOPT_PROMPTUSER     = $00000001;
var
vIn, vOut: OleVariant;
begin
  // call default printer
  Printer.Printers[ Printer.PrinterIndex ]);

  wbNotificacion.ControlInterface.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER, vIn, vOut) ;
end;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    • 2017-10-02
    相关资源
    最近更新 更多