如何将HTML内容复制到Delphi中的TCanvas ?



我有一个应用程序,它使用TWebBrowser来显示HTML报告。我使用名为PrintCanvasTCanvas来打印页眉、页脚和图像。现在,我想将TWebBrowser中的内容添加到画布中,以便也打印HTML报告。我尝试将TWebBrowser内容复制到位图,然后将位图添加到我的PrintCanvas。这可以工作,但只显示TWebBrowser的显示部分。

是否有一种方法可以将整个HTML报告复制到TCanvas?这将允许我使用现有的打印代码。如果有更好的方法,我可以使用TWebBrowser以外的方法。

我尝试过的另一件事是使用TWebBrowser的ExecWB方法来执行OLECMDID_PRINT命令,该命令打开浏览器的打印对话框。这工作,但这不允许我打印其他信息已经在我的PrintCanvas,如页眉,页脚,和图像。

有几种方法可以做到这一点,但它们都需要不同的组件。

解决方案1:既然你提到你可以使用替代组件,那么我会使用CEF4Delphi。

CEF有一个屏幕外渲染模式(OSR),它在原始位图缓冲区中绘制web内容。

几个CEF4Delphi演示如何使用该模式,如SimpleOSRBrowser, TabbedOSRBrowser或KioskOSRBrowser。您可以使用任何演示作为应用程序的模板。

这些演示将原始位图数据与web内容从"缓冲区"中复制出来。参数。OnPaint事件。正如您在这里看到的,SimpleOSRBrowser将扫描线从buffer参数复制到自定义位图。

或者,您也可以使用CEF浏览器而不使用离屏呈现模式。如果您要构建MiniBrowser演示,您可以尝试"截图";选项在右上角的菜单按钮。此选项使用"Page.captureScreenshot"DevTools方法获取截图,并将其保存为PNG图像。

解决方案2:使用WebView4Delphi。WebView4Delphi也有一个带有"快照"的迷你浏览器演示。菜单选项,调用TWVBrowser。CapturePreview来保存PNG文件,但是如果你调用TWVBrowser.CallDevToolsProtocolMethod,你也可以使用前面提到的WebView4Delphi的DevTools方法。

最新更新