我有一个应用程序,它使用TWebBrowser
来显示HTML报表。我使用名为PrintCanvas
的TCanvas
来打印页眉、页脚和图像。现在,我想将TWebBrowser
中的内容添加到画布中,以便也打印HTML报表。我尝试过将TWebBrowser
内容复制到位图中,然后将位图添加到我的PrintCanvas
中。这可以工作,但只显示TWebBrowser
的显示部分。
**是否有方法可以将整个HTML报告复制到TCanvas
?**这将允许我使用现有的打印代码。如果有更好的方法,我可以使用TWebBrowser
以外的方法。
我尝试过的另一个方法是使用TWebBrowser的ExecWB
方法来执行OLECMDID_PRINT
命令,这会打开浏览器的打印对话框,这可以工作,但这不允许我打印PrintCanvas
上已经存在的其他信息,如页眉、页脚和图像。
1条答案
按热度按时间vc6uscn91#
有几种方法可以做到这一点,但所有这些方法都需要不同的组件。
**解决方案1:**既然您提到可以使用替代组件,那么我将使用CEF4Delphi。
CEF有一个 offscreen rendering 模式(OSR),可以在原始位图缓冲区中绘制Web内容。
几个CEF4Delphi演示展示了如何使用这种模式,如SimpleOSRBrowser、TabbedOSRBrowser或KioskOSRBrowser。您可以使用任何演示作为应用程序的模板。
这些演示从TCromiumCore.OnPaint事件的“buffer”参数中复制原始位图数据和Web内容。正如您在这里看到的,SimpleOSRBrowser从buffer参数中复制扫描线到自定义位图。
或者,您也可以使用CEF浏览器而不使用屏幕外渲染模式。如果您构建MiniBrowser演示,您可以尝试右上角菜单按钮中的“拍摄屏幕快照”选项。此选项使用“Page.captureScreenshot”DevTools方法拍摄屏幕快照,并将其保存为PNG图像。
**解决方案2:**使用WebView4Delphi.WebView4Delphi也有一个MiniBrowser演示,它带有一个“拍摄快照...”菜单选项,该选项调用 TWVBrowser.CapturePreview 来保存PNG文件,但是如果调用TWVBrowser.CallDevToolsProtocolMethod,您也可以使用前面提到的DevTools方法。