我有一个应用程序,它使用TWebBrowser
来显示HTML报告。我使用名为PrintCanvas
的TCanvas
来打印页眉、页脚和图像。现在,我想将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方法。