我有一个使用
TWebBrowser
来显示 HTML 报告的应用程序。我使用名为 TCanvas
的 PrintCanvas
来打印页眉、页脚和图像。现在我想将 TWebBrowser
中的内容添加到画布中,以便也打印 HTML 报告。我尝试将 TWebBrowser
内容复制到位图,然后将位图添加到我的 PrintCanvas
。这有效,但仅显示 TWebBrowser
的显示部分。
有没有办法将整个 HTML 报告复制到
TCanvas
? 这将允许我使用现有的打印代码。如果有更好的方法,我可以使用TWebBrowser
以外的方法。
我尝试过的另一件事是使用 TWebBrowser 的
ExecWB
方法来执行 OLECMDID_PRINT
命令,该命令会打开浏览器的打印对话框。这可行,但不允许我打印 PrintCanvas
上已有的其他信息,例如页眉、页脚和图像。
有多种方法可以做到这一点,但它们都需要不同的组件。
解决方案1:既然你提到你可以使用替代组件,那么我会使用CEF4Delphi。
CEF 具有离屏渲染模式 (OSR),可在原始位图缓冲区中绘制 Web 内容。
几个 CEF4Delphi 演示展示了如何使用该模式,例如 SimpleOSRBrowser、TabbedOSRBrowser 或 KioskOSRBrowser。您可以使用任何演示作为您的应用程序的模板。
这些演示从 TChromiumCore.OnPaint 事件中的“buffer”参数中复制原始位图数据和 Web 内容。正如您在此处所看到的,SimpleOSRBrowser 将扫描线从缓冲区参数复制到自定义位图。
或者,您也可以使用 CEF 浏览器而不使用离屏渲染模式。如果您构建 MiniBrowser 演示,您可以尝试右上角菜单按钮中的“截取屏幕截图”选项。此选项使用“Page.captureScreenshot”DevTools 方法来截取屏幕截图并将其保存为 PNG 图像此处。
解决方案2:使用WebView4Delphi。 WebView4Delphi 还有一个带有“拍摄快照...”菜单选项的 MiniBrowser 演示,它调用 TWVBrowser.CapturePreview 来保存 PNG 文件,但如果您调用 TWVBrowser.CallDevToolsProtocolMethod,您也可以使用前面提到的 WebView4Delphi 的 DevTools 方法。
Иногда (и не так уж редко) бывает необходимо конвертировать DELPHI-файлы в HTML-формат。 Например,для публикации Delphi-исходников。 Вот здесь (см. ниже), как раз один из таких инструментов. https://roamer55.ru/my_download/progs/os_win/spPasToHtml/spPasToHtml.htm